Explorer
/tmp/patch_aa021_ingestion.py
← Zurück ↓ Download
from pathlib import Path
p=Path('/opt/struktur/social-media-radar/intake/multi_intake.py')
s=p.read_text()
needle='''def _parse_relative_time_german(rel_str):\n'''
helper='''def normalize_youtube_published(raw: str) -> str:\n    """Normalisiert relative YouTube-Zeitangaben; unbekannt bleibt leer."""\n    value = (raw or "").strip()\n    if not value:\n        return ""\n    if "T" in value and (value.endswith("Z") or "+" in value or value.count(":") >= 2):\n        return value\n    m = re.search(r"(?:vor|hace)\\s+(\\d+)\\s+(minute|minutes|minuten|minuto|stunde|stunden|hora|horas|tag|tage|dia|dias|día|días|woche|wochen|semana|semanas|day|days|week|weeks)\\b|\\b(\\d+)\\s+(minutes?|hours?|days?|weeks?)\\s+ago", value.casefold())\n    if not m:\n        return ""\n    number = int(m.group(1) or m.group(3))\n    unit = (m.group(2) or m.group(4)).casefold()\n    if unit.startswith(("minute", "minut")): delta = timedelta(minutes=number)\n    elif unit.startswith(("stund", "hora", "hour")): delta = timedelta(hours=number)\n    elif unit.startswith(("tag", "dia", "day")): delta = timedelta(days=number)\n    elif unit.startswith(("woch", "semana", "week")): delta = timedelta(weeks=number)\n    else: return ""\n    return (datetime.now(timezone.utc) - delta).isoformat()\n\n\n'''
assert needle in s
s=s.replace(needle,helper+needle,1)
s=s.replace('t0 = time.time()','t0 = time.monotonic()',2)
s=s.replace('    pub_iso = v.get("published") or ""\n','    pub_iso = normalize_youtube_published(v.get("published") or "")\n',1)
p.write_text(s)

q=Path('/tmp/aa021_watch.py')
w=q.read_text().replace('    t0 = time.time()','    t0 = time.monotonic()',1)
q.write_text(w)