23 lines
2.0 KiB
Python
23 lines
2.0 KiB
Python
"""Freeze explicitly verified historical cleanup receipts after rechecking retained local media."""
|
|
import contextlib,hashlib,json,pathlib,sqlite3
|
|
ROOT=pathlib.Path(__file__).resolve().parent.parent;OUT=ROOT/'integration-work/historical-video-cleanup-20261112';DATA=ROOT/'huobao-data'
|
|
inventory={r['id']:r for r in json.loads((OUT/'inventory.json').read_text())}
|
|
probes=json.loads((OUT/'server-probe.json').read_text())
|
|
if (OUT/'orphan-probe.json').exists():probes+=json.loads((OUT/'orphan-probe.json').read_text())
|
|
verified={p['task']:p for p in probes if p['verified']};approved=[]
|
|
with contextlib.closing(sqlite3.connect((DATA/'huobao.sqlite3').as_uri()+'?mode=ro',uri=True)) as db:
|
|
db.row_factory=sqlite3.Row
|
|
for task,p in verified.items():
|
|
r=inventory[task];current=db.execute('select * from sys_task where id=?',(task,)).fetchone()
|
|
assert current and all(current[k]==r[k] for k in ('status','local_path','task_id','config_id','config_base_url','provider','model')),'Local task changed'
|
|
assert current['status']=='completed' and r['localVerified']
|
|
f=(DATA/current['local_path']).resolve(strict=True)
|
|
assert f.is_relative_to((DATA/'static/videos').resolve())
|
|
with f.open('rb') as stream:h=hashlib.file_digest(stream,'sha256').hexdigest()
|
|
assert {'bytes':f.stat().st_size,'sha256':h}==r['receipt'],'Local bytes changed'
|
|
cfg=db.execute('select base_url,provider,is_active from ai_service_configs where id=?',(r['config_id'],)).fetchone()
|
|
assert cfg and cfg['base_url']==r['config_base_url'] and cfg['provider']==r['provider'] and cfg['is_active'],'Original service unavailable'
|
|
approved.append({'task':task,'id':r['task_id'],'bridge':p['bridge'],'index':r['index'],'receipt':r['receipt'],'method':p.get('method','live-history-and-download'),'manifest':p['manifest'],'worker':p['worker'],'fileReceipt':p['fileReceipt']})
|
|
(OUT/'approved.json').write_text(json.dumps(approved,indent=2),'utf-8')
|
|
print(json.dumps({'approved':len(approved),'tasks':[r['task'] for r in approved],'bytes':sum(r['fileReceipt']['bytes'] for r in approved)}))
|