Explorer
/tmp/aa043_p29_r5_patch_processor.py
← Zurück ↓ Download
from pathlib import Path
p=Path('/opt/struktur/youtube-research/supadata_native_batch.py')
s=p.read_text()
old="def candidates(c,limit):\n q=\"\"\"SELECT e.job_id,e.video_id,e.youtube_id,e.status e2e_status,e.attempts,v.transcript_status,v.transcript_source,v.created_at,e.updated_at,length(trim(coalesce(v.transcript,''))) transcript_len FROM e2e_jobs e JOIN videos v ON v.id=e.video_id WHERE v.youtube_id IS NOT NULL AND length(trim(coalesce(v.transcript,'')))=0 AND coalesce(v.transcript_status,'')<>'done' AND coalesce(v.transcript_source,'') NOT IN ('supadata_native','windows_local') AND e.status IN ('blocked_transcript_fetch','local_transcript_retry','local_transcript_pending','supadata_retry') ORDER BY CASE e.status WHEN 'blocked_transcript_fetch' THEN 0 WHEN 'local_transcript_retry' THEN 1 WHEN 'local_transcript_pending' THEN 2 ELSE 3 END,e.job_id LIMIT ?\"\"\"\n return [dict(r) for r in c.execute(q,(limit,))]"
new="def candidates(c,limit,exclude_job_ids=()):\n q=\"\"\"SELECT e.job_id,e.video_id,e.youtube_id,e.status e2e_status,e.attempts,v.transcript_status,v.transcript_source,v.created_at,e.updated_at,length(trim(coalesce(v.transcript,''))) transcript_len FROM e2e_jobs e JOIN videos v ON v.id=e.video_id WHERE v.youtube_id IS NOT NULL AND length(trim(coalesce(v.transcript,'')))=0 AND coalesce(v.transcript_status,'')<>'done' AND coalesce(v.transcript_source,'') NOT IN ('supadata_native','windows_local') AND e.status IN ('blocked_transcript_fetch','local_transcript_retry','local_transcript_pending','supadata_retry')\"\"\"\n params=[]\n if exclude_job_ids:\n  q += \" AND e.job_id NOT IN (\" + ','.join('?' for _ in exclude_job_ids) + \")\"\n  params.extend(exclude_job_ids)\n q += \" ORDER BY CASE e.status WHEN 'blocked_transcript_fetch' THEN 0 WHEN 'local_transcript_retry' THEN 1 WHEN 'local_transcript_pending' THEN 2 ELSE 3 END,e.job_id LIMIT ?\"\n params.append(limit)\n return [dict(r) for r in c.execute(q,params)]"
if old not in s: raise SystemExit('candidate block not found')
s=s.replace(old,new)
old2=" ap=argparse.ArgumentParser(); ap.add_argument('--limit',type=int,default=10); ap.add_argument('--reserve-credits',type=int,default=5); ap.add_argument('--dry-run',action='store_true'); a=ap.parse_args(); assert 1<=a.limit<=10 and a.reserve_credits>=1"
new2=" ap=argparse.ArgumentParser(); ap.add_argument('--limit',type=int,default=10); ap.add_argument('--reserve-credits',type=int,default=5); ap.add_argument('--exclude-job-ids',default=''); ap.add_argument('--dry-run',action='store_true'); a=ap.parse_args(); assert 1<=a.limit<=10 and a.reserve_credits>=1; exclude=tuple(int(x) for x in a.exclude_job_ids.split(',') if x.strip())"
if old2 not in s: raise SystemExit('arg block not found')
s=s.replace(old2,new2).replace('rows=candidates(c,a.limit)','rows=candidates(c,a.limit,exclude)')
p.write_text(s)
print('PATCH_PASS')