from pathlib import Path
p=Path('/opt/struktur/content-extraction/db.py'); s=p.read_text()
changes=[
(' v.language AS language,',' v.language AS language,\n v.published_at AS published_at,'),
('SELECT id, youtube_id, title, channel, language, transcript_status,','SELECT id, youtube_id, title, channel, language, published_at, transcript_status,'),
('row["language"],\n youtube_url,','row["language"],\n row["published_at"],\n youtube_url,'),
('language, youtube_url, transcript_status, summary, skill_file,','language, published_at, youtube_url, transcript_status, summary, skill_file,'),
('VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)','VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)'),
('or existing["language"] != row["language"]\n or existing["transcript_status"]','or existing["language"] != row["language"]\n or existing["published_at"] != row["published_at"]\n or existing["transcript_status"]'),
('youtube_id = ?, title = ?, channel = ?, language = ?,\n youtube_url','youtube_id = ?, title = ?, channel = ?, language = ?, published_at = ?,\n youtube_url'),
('row["youtube_id"], row["title"], row["channel"], row["language"],\n youtube_url','row["youtube_id"], row["title"], row["channel"], row["language"], row["published_at"],\n youtube_url')]
for a,b in changes:
if a not in s: raise SystemExit('MISSING:'+repr(a))
s=s.replace(a,b,1)
p.write_text(s); print('PUBLISHED_AT_PATCH_OK')