Files
dj/integration-work/historical_cleanup_prepare_local.py
2026-11-13 11:46:25 +08:00

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)}))