from pathlib import Path
p=Path('/opt/struktur/social-media-agent/app.py')
s=p.read_text()
s=s.replace('from datetime import datetime, timezone\n', 'from datetime import datetime, timezone, timedelta\nfrom zoneinfo import ZoneInfo\n')
old='''def get_radar_signals(limit=12, days=3, sort="relevance",
status_filter=None, competition_only=False, pinned_only=False,
highlight_id=None):'''
new='''MADRID_TZ = ZoneInfo("Europe/Madrid")
def radar_cutoff_utc(days, now=None):
"""Start of the Europe/Madrid calendar window as UTC ISO text."""
now = now or datetime.now(timezone.utc)
if now.tzinfo is None:
now = now.replace(tzinfo=timezone.utc)
local_now = now.astimezone(MADRID_TZ)
local_start = datetime.combine(local_now.date(), datetime.min.time(), tzinfo=MADRID_TZ)
local_start -= timedelta(days=max(int(days), 1) - 1)
return local_start.astimezone(timezone.utc).isoformat()
def platform_filter_clause(platform):
if platform == "facebook":
return ("AND COALESCE(mas_relevant,0)=1 AND "
"(platform_facebook >= 2 OR lower(COALESCE(briefing_fb_fit,'')) IN ('ja','pruefen'))", [])
if platform == "linkedin":
return ("AND COALESCE(mas_relevant,0)=1 AND "
"(platform_linkedin >= 2 OR lower(COALESCE(briefing_li_fit,'')) IN ('ja','pruefen'))", [])
return ("", [])
def get_radar_signals(limit=12, days=3, sort="relevance",
status_filter=None, competition_only=False, pinned_only=False,
highlight_id=None):'''
if old not in s: raise SystemExit('function anchor missing')
s=s.replace(old,new)
s=s.replace(''' now = datetime.now(timezone.utc)
cutoff = (now - timedelta(days=max(days, 1))).isoformat() if days else "1970-01-01"''',''' cutoff = radar_cutoff_utc(days) if days else "1970-01-01"''')
old2=''' if sort == "facebook":
# Facebook ist Zielplattform: Quellplattform/Quelltyp sind kein Fit.
platform_clause = (
"AND COALESCE(mas_relevant,0)=1 AND "
"(COALESCE(platform_facebook,1)>=2 "
"OR lower(COALESCE(briefing_fb_fit,'')) IN ('ja','pruefen'))"
)
elif sort == "linkedin":
# LinkedIn ist Zielplattform: Provenienz darf keine Eignung ersetzen.
platform_clause = (
"AND COALESCE(mas_relevant,0)=1 AND "
"(COALESCE(platform_linkedin,1)>=2 "
"OR lower(COALESCE(briefing_li_fit,'')) IN ('ja','pruefen'))"
)
else:
platform_clause = ""'''
new2=''' # NULL bedeutet unbekannten Fit, nicht automatisch passend.
platform_clause, platform_params = platform_filter_clause(sort)'''
if old2 not in s: raise SystemExit('platform anchor missing')
s=s.replace(old2,new2)
s=s.replace('params = date_params + st_params + [limit]', 'params = date_params + st_params + platform_params + [limit]')
p.write_text(s)