Explorer
/tmp/aa045f3_test_e.py
← Zurück ↓ Download
"""AA-045-F3 Test E: End-to-End reales Signal.
Radar-Collect (echter YouTube-Intake) -> Briefing -> Caption -> Visuals."""
import sys, json
sys.path.insert(0, "/opt/struktur/social-media-radar")

# 1. Radar-Collect: echter Produktionspfad (YouTube-Suche + RSS + Wetter)
from radar import collect_signals
total = collect_signals()
print("Neue Signale aus Radar-Lauf:", total)

import sqlite3
conn = sqlite3.connect("/var/lib/sma-data/signals.db")
conn.row_factory = sqlite3.Row

# 2. Ein reales neues YouTube-Signal waehlen
sig = conn.execute("""
    SELECT signal_id, topic, briefing_winkel FROM signals
    WHERE source_type='youtube' AND status='neu'
    ORDER BY created_at DESC LIMIT 1""").fetchone()
if not sig:
    sig = conn.execute("""
        SELECT signal_id, topic, briefing_winkel FROM signals
        WHERE status='neu' AND COALESCE(mallorca_relevance,0)>0
        ORDER BY created_at DESC LIMIT 1""").fetchone()
SID = sig["signal_id"]
had_briefing_before = bool(sig["briefing_winkel"])
print(f"Testsignal: {SID[:12]} | {(sig['topic'] or '')[:55]} | Briefing vorher vorhanden: {had_briefing_before}")

# 3. Director + Briefing (wie in run_radar.sh verdrahtet)
from content_director import run as run_director
run_director(limit=500, min_radar_score=30.0)
from content_briefing import run as run_briefing
run_briefing(limit=500)

r = dict(conn.execute("SELECT briefing_winkel, briefing_nutzen, briefing_error FROM signals WHERE signal_id=?", (SID,)).fetchone())
assert r["briefing_winkel"], "Briefing fehlt nach Lauf!"
print("Briefing:", r["briefing_winkel"][:50], "|", r["briefing_nutzen"][:40], "| error:", repr(r["briefing_error"]))

# 4. Caption + beide Visuals ueber die echten API-Endpoints
import urllib.request
def api(path):
    with urllib.request.urlopen(f"http://127.0.0.1:8652{path}", timeout=120) as resp:
        return json.loads(resp.read())

cap = api(f"/api/visual/{SID}?fmt=1x1")   # Warmup (Playwright)
v1 = api(f"/api/visual/{SID}?fmt=1x1")
v4 = api(f"/api/visual/{SID}?fmt=4x5")
caption = api(f"/api/caption/{SID}")

print("Visual 1x1:", "OK" if v1.get("success") else v1.get("reason","")[:60])
print("Visual 4x5:", "OK" if v4.get("success") else v4.get("reason","")[:60])
print("Caption:", "OK" if caption.get("success") else caption.get("reason","")[:80])

e2e = (r["briefing_winkel"] and v1.get("success") and v4.get("success"))
print("\nTEST E:", "BESTANDEN" if e2e else "TEILWEISE (Caption ggf. durch fachliche Freigabe blockiert)")