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

25 lines
1.7 KiB
Python

"""Read-only verification of isolated real-model storyboard results."""
from pathlib import Path
import hashlib,json,sqlite3,sys
ROOT=Path(__file__).resolve().parent.parent
reports=[]
for argument in sys.argv[1:]:
folder=Path(argument).resolve()
assert folder.is_relative_to(ROOT/'integration-work')
with sqlite3.connect((folder/'huobao.sqlite3').as_uri()+'?mode=ro',uri=True) as db:
db.row_factory=sqlite3.Row
assert db.execute('pragma integrity_check').fetchone()[0]=='ok'
job=json.loads(db.execute("select value from app_settings where key='storyboard_job:8'").fetchone()[0])
assert job['status']=='done',job['status']
shots=[dict(r) for r in db.execute('select * from storyboards where episode_id=8 and deleted_at is null order by storyboard_number')]
assert len(shots)==job['completed'] and shots[-1]['storyboard_number']==job['narrativeEndShot']
assert [s['storyboard_number'] for s in shots]==list(range(1,len(shots)+1))
for shot in shots:
assert shot['video_prompt_en'] and shot['video_prompt_en_source_hash']==hashlib.sha256(('english-v1-speech-cues\n'+shot['video_prompt'].strip()).encode()).hexdigest()
assert db.execute('select count(*) from sys_task').fetchone()[0]==0,'No media jobs should be submitted'
from datetime import datetime
elapsed=(datetime.fromisoformat(job['finishedAt'])-datetime.fromisoformat(job['startedAt'])).total_seconds()
reports.append({'fixture':str(folder),'status':'done','shots':len(shots),'video_seconds':job['seconds'],'elapsed_seconds':round(elapsed,1),'bilingual_hashes_valid':True,'stopped_at_script_ending':True,'media_jobs_started':0})
(ROOT/'integration-work/storyboard-real-model-audit.json').write_text(json.dumps(reports,indent=2),'utf-8')
print(json.dumps(reports))