This commit is contained in:
team3
2026-07-12 16:13:50 +02:00
parent a284e03225
commit 31a42bbf1d
48 changed files with 3625 additions and 253 deletions

View File

@@ -11,6 +11,7 @@ import re
import sys
from pathlib import Path
import config
import db
import pipeline
from config import PROJECT_ROOT
@@ -69,6 +70,11 @@ def _einfuegen(tabelle: str, zeilen: list[dict], **ersetzungen) -> dict:
def importieren(d: dict) -> None:
topic = d["topic"]
# Vor dem destruktiven topic_loeschen (rmtree) den Namen validieren — ein
# manipulierter Export mit topic="../evil" würde sonst außerhalb von storage
# löschen/schreiben.
if not config.topic_name_ok(topic):
raise ValueError(f"ungültiger Topic-Name: {topic!r}")
if db.one("SELECT name FROM topics WHERE name=?", (topic,)):
pipeline.topic_loeschen(topic) # Zielseite wird überschrieben
@@ -119,12 +125,21 @@ def importieren(d: dict) -> None:
alt = int(m.group(1))
return m.group(0).replace(m.group(1), str(a_map[alt]), 1) if alt in a_map else m.group(0)
def auftrag_remap(m: re.Match) -> str:
alt = int(m.group(2))
return f"{m.group(1)}{a_map[alt]}" if alt in a_map else m.group(0)
for z in d["sections"]: # PK ist baustein_id
z = dict(z)
z["baustein_id"] = b_map.get(z["baustein_id"])
for feld in ("text_lang", "text_kompakt"):
if z.get(feld):
z[feld] = re.sub(r"<!--\s*atom:\s*(\d+)\s*\|", marker_remap, z[feld])
# offene Fix-Aufträge nennen Atom-IDs im Klartext („Marker für Atom 123
# fehlt") — mitremappen, sonst fixt der Prüfer gegen tote IDs
if z.get("befunde"):
z["befunde"] = db.j([re.sub(r"(Atom |Marker )(\d+)", auftrag_remap, str(a))
for a in db.uj(z["befunde"])])
db.insert("sections", **z)
r_map = _einfuegen("runs", d["runs"])
_einfuegen("befunde", d["befunde"], run_id=r_map)