Explorer
/tmp/patch_aa023.py
← Zurück ↓ Download
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)