from pathlib import Path
p=Path('/opt/struktur/social-media-radar/intake/meta_ads_intake.py')
s=p.read_text()
s=s.replace('from signal_db import insert_signal, record_source_run # noqa: E402\n', 'from signal_db import insert_signal, record_source_run # noqa: E402\nfrom published_at_normalizer import normalize_published_at # noqa: E402\n')
s=s.replace(" 'published_at': ad.get('started_raw'),\n", " 'published_at': normalize_published_at(ad.get('started_raw'), datetime.now(timezone.utc).isoformat()),\n", 1)
old=''' sid = insert_signal(signal)\n if sid is None:\n duplicate += 1\n else:\n new += 1\n'''
new=''' sid = insert_signal(signal)\n if sid is None:\n duplicate += 1\n # Refresh metadata/creative for an already-known public Ad ID.\n import sqlite3\n with sqlite3.connect('/var/lib/sma-data/signals.db') as sync:\n sync.execute(\n "UPDATE signals SET published_at=COALESCE(?,published_at), image_url=COALESCE(NULLIF(?,''),image_url), image_source=COALESCE(NULLIF(?,''),image_source), image_found=CASE WHEN ? <> '' THEN 1 ELSE image_found END, image_checked_at=? WHERE external_id=? AND source_type='meta_ad'",\n (signal['published_at'], signal['image_url'], signal['image_source'], signal['image_url'], datetime.now(timezone.utc).isoformat(), signal['external_id']),\n )\n else:\n new += 1\n'''
if old not in s: raise SystemExit('duplicate block missing')
p.write_text(s.replace(old,new,1))