Fremdsprachige Artikel ohne deutsche Fassung lassen sich jetzt manuell über das Verwaltungs-Dashboard übersetzen. Hintergrund: die automatische Übersetzung im Monitor wurde deaktiviert (TRANSLATOR_ENABLED=false), nachdem ein sehr großer Lauf den Refresh-Worker blockiert hatte. - translation_agent.py: Verwaltungs-Adaption des Monitor-Translators (Haiku-Batches), Imports auf shared.agents.claude_client umgestellt - routers/translation.py: Endpoints /api/translation/status, /run und /cancel. Der Lauf läuft als entkoppelter Hintergrund-Task, blockiert keinen Request und ist jederzeit abbrechbar - Dashboard-Karte mit Fortschrittsbalken, Aufwandsschätzung vorab und Abbrechen-Button - test_imports.py: neuen Router in den Smoke-Test aufgenommen Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
34 Zeilen
1.4 KiB
Python
34 Zeilen
1.4 KiB
Python
"""Smoke-Test: alle Backend-Module importierbar (Catch-Net fuer Syntax-Errors)."""
|
|
import importlib
|
|
|
|
|
|
def test_main_app_imports():
|
|
import main # FastAPI app
|
|
assert hasattr(main, "app")
|
|
|
|
|
|
def test_all_routers_importable():
|
|
"""Bei Syntax-Fehlern in einem Router crasht das Ganze - hier fangen wir das ab."""
|
|
for mod in ("auth", "organizations", "licenses", "users",
|
|
"dashboard", "sources", "token_usage", "audit", "translation"):
|
|
m = importlib.import_module(f"routers.{mod}")
|
|
assert hasattr(m, "router"), f"routers/{mod} hat keinen router-Objekt"
|
|
|
|
|
|
def test_shared_modules_importable():
|
|
"""src/shared/ muss eigenstaendig importierbar sein (kein sys.path-Hack)."""
|
|
from shared.source_rules import discover_source, evaluate_feeds_with_claude
|
|
from shared.services.source_health import run_health_checks
|
|
from shared.services.source_suggester import generate_suggestions
|
|
from shared.agents.claude_client import call_claude
|
|
assert callable(discover_source)
|
|
assert callable(run_health_checks)
|
|
|
|
|
|
def test_helpers_importable():
|
|
from auth import generate_magic_token, create_token, decode_token
|
|
from audit import log_action, diff, get_client_ip, row_to_dict
|
|
from email_utils.sender import send_email
|
|
from email_utils.templates import portal_magic_link_email, invite_email
|
|
from source_meta import get_meta, category_label, type_label
|