import sqlite3,json,datetime
SRC='/opt/struktur/youtube-research/knowledge.db'; CE='/opt/struktur/content-extraction/data/content_extraction.db'
s=sqlite3.connect('file:'+SRC+'?mode=ro',uri=True); s.row_factory=sqlite3.Row
v=s.execute('select * from videos where id=1246').fetchone(); e=s.execute('select * from e2e_extractions where video_id=1246').fetchone(); s.close()
assert v and e and v['transcript_status']=='done' and v['transcript_source']=='supadata_native' and len(v['transcript'])>0
path=e['obsidian_path']; now=datetime.datetime.now(datetime.timezone.utc).isoformat()
c=sqlite3.connect(CE,timeout=30); c.row_factory=sqlite3.Row; c.execute('PRAGMA busy_timeout=30000'); c.execute('BEGIN IMMEDIATE')
r=c.execute("select id from ce_sources where source_system='youtube-research' and source_video_id=1246").fetchall(); assert len(r)==1
cur=c.execute("update ce_sources set youtube_id=?,title=?,channel=?,youtube_url=?,transcript_status='done',obsidian_artifact_path=?,imported_at=?,source_snapshot_hash=?,summary=?,description=?,transcript=?,transcript_hash=?,content_hash=?,extraction_version=?,processed_at=? where source_system='youtube-research' and source_video_id=1246",(v['youtube_id'],v['title'],v['channel'],f'https://www.youtube.com/watch?v={v["youtube_id"]}',path,now,e['content_hash'],v['summary'] or '',v['description'] or '',v['transcript'],v['transcript_hash'],e['content_hash'],e['extraction_version'],e['processed_at']))
assert cur.rowcount==1; c.commit(); out=dict(c.execute("select source_video_id,youtube_id,transcript_status,obsidian_artifact_path,length(transcript) transcript_len,transcript_hash,content_hash from ce_sources where source_system='youtube-research' and source_video_id=1246").fetchone()); c.close(); print(json.dumps(out,ensure_ascii=False))