update
This commit is contained in:
@@ -251,7 +251,9 @@ def _bausteine_files(topic: str) -> dict:
|
||||
def _alle_slot_dateien(files: dict) -> list[Path]:
|
||||
arbeit = files["arbeit"]
|
||||
# Subbaustein-/Stufen-Slots sind pro Chunk dynamisch — per Glob einsammeln.
|
||||
dyn = (list(arbeit.glob("subbaustein-*")) + list(arbeit.glob("stufe-*")) + list(arbeit.glob("relevanz-*")) + list(arbeit.glob("frage-muster-*"))) if arbeit.is_dir() else []
|
||||
dyn = (list(arbeit.glob("subbaustein-*")) + list(arbeit.glob("stufe-*")) + list(arbeit.glob("relevanz-*"))
|
||||
+ list(arbeit.glob("frage-muster-*")) + list(arbeit.glob("recherche-*")) + list(arbeit.glob("konsolidierung-*"))
|
||||
+ list(arbeit.glob("klaerung*"))) if arbeit.is_dir() else []
|
||||
return [
|
||||
*files["recherche"], files["recherche_mapping"],
|
||||
*(p for slots in files["auswahl"].values() for p in slots),
|
||||
@@ -322,16 +324,18 @@ def active_bausteine() -> list[dict]:
|
||||
|
||||
|
||||
def reset_bausteine(topic: str) -> None:
|
||||
files = _bausteine_files(topic)
|
||||
files["final"].unlink(missing_ok=True)
|
||||
files["sidecar"].unlink(missing_ok=True) # liegt im Themen-Root, nicht in arbeit/
|
||||
files["frage_muster"].unlink(missing_ok=True) # ebenfalls im Themen-Root
|
||||
quelle_path(topic).unlink(missing_ok=True)
|
||||
shutil.rmtree(quelle_crawl_dir(topic), ignore_errors=True) # gecrawlte Link-Quelle
|
||||
shutil.rmtree(files["arbeit"], ignore_errors=True)
|
||||
"""„Löschen": räumt nur die generierten Bausteine weg (Dateien ab Inventar). BEHÄLT
|
||||
Quelle (quelle.json), Crawl-Ordner und Sichtung. Voller Wipe inkl. Quelle/Crawl nur
|
||||
über „Thema löschen" (DELETE /topics → rmtree(topic_dir))."""
|
||||
_reset_ab_phase(topic, "Inventar")
|
||||
_bausteine_errors.pop(topic, None)
|
||||
|
||||
|
||||
async def reset_bausteine_db(topic: str) -> None:
|
||||
"""DB-Pendant zu reset_bausteine: Inventar…Fragen aus der DB; Coverage/Sichtung + Quelle bleiben."""
|
||||
await _reset_db_ab_phase(topic, "Inventar")
|
||||
|
||||
|
||||
def _phase_idx(label: str) -> int:
|
||||
"""Index der groben Phase in der kanonischen Reihenfolge (Quelle=0 … Fragen=5)."""
|
||||
order = [l for l, _ in PHASEN]
|
||||
|
||||
@@ -17,7 +17,7 @@ from database import (
|
||||
set_baustein_score, set_baustein_absolviert, set_baustein_verstanden, set_baustein_gemeistert, delete_baustein_daten,
|
||||
delete_topic_pipeline, get_guide_content, delete_guide_content,
|
||||
)
|
||||
from bausteine import generate_bausteine, cancel_bausteine, bausteine_status, active_bausteine, reset_bausteine, lade_quelle, lade_uebersicht, subbausteine_titel, lade_frage_muster
|
||||
from bausteine import generate_bausteine, cancel_bausteine, bausteine_status, active_bausteine, reset_bausteine, reset_bausteine_db, lade_quelle, lade_uebersicht, subbausteine_titel, lade_frage_muster
|
||||
from elements import generate_element, chat_with_guide, chat_with_element, check_element, style_element, refine_suggestion
|
||||
from lernen import NOETIG, MASTERY, MEISTERN, NIVEAUS, baustein_chat, baustein_diskussion, baustein_element_anlegen, pruefung_bewertung, pruefung_bewertung_schnell, pruefung_frage, pruefung_frage_variante, quiz_generieren, lueckwahl_generieren, lueckentext_generieren, lueckentext_pruefen, score_berechnen, floor_aus_meilensteinen, _zufall_malus
|
||||
from guide import generate_guide, guide_slot_dateien, guide_fertig_step
|
||||
@@ -172,8 +172,8 @@ async def cancel_bausteine_route(topic: str):
|
||||
|
||||
@router.delete("/bausteine")
|
||||
async def remove_bausteine(topic: str):
|
||||
reset_bausteine(topic)
|
||||
await delete_topic_pipeline(topic)
|
||||
reset_bausteine(topic) # Dateien ab Inventar — Quelle/Crawl bleiben
|
||||
await reset_bausteine_db(topic) # DB ab Inventar — Coverage/Sichtung + Quelle bleiben
|
||||
return {"ok": True}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user