feat: rebuild rss-news backend, admin ui, and legal extraction pipeline

This commit is contained in:
Oliver 2026-02-18 09:46:44 +01:00
parent d65c55d315
commit 2c331d683b
No known key found for this signature in database
43 changed files with 3463 additions and 73 deletions

35
backend/app/policy.py Normal file
View file

@ -0,0 +1,35 @@
from __future__ import annotations
from typing import Any
def evaluate_source_policy(source: dict[str, Any] | None) -> list[str]:
issues: list[str] = []
if not source:
issues.append("Keine Quelle zugeordnet")
return issues
risk_level = (source.get("risk_level") or "").strip().lower()
if risk_level != "green":
issues.append(f"Quelle nicht freigegeben (risk_level={risk_level or 'unset'})")
terms_url = (source.get("terms_url") or "").strip()
if not terms_url:
issues.append("terms_url fehlt")
license_name = (source.get("license_name") or "").strip()
if not license_name:
issues.append("license_name fehlt")
last_reviewed_at = (source.get("last_reviewed_at") or "").strip()
if not last_reviewed_at:
issues.append("last_reviewed_at fehlt")
if int(source.get("is_enabled", 0) or 0) != 1:
issues.append("Quelle ist deaktiviert")
return issues
def is_source_allowed(source: dict[str, Any] | None) -> bool:
return len(evaluate_source_policy(source)) == 0