Optionaler Stopp nach der Gliederung je Version
Häkchen beim Anlegen und bei „Neue Version“: der Lauf hält nach der Gliederung als „pausiert“ an, damit man sie prüfen kann, bevor die Kapitel geschrieben werden. „Fortsetzen“ schreibt weiter. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -30,10 +30,12 @@ class ThemaNeu(BaseModel):
|
||||
name: str
|
||||
hinweise: str = ""
|
||||
spezialisierung: str = ""
|
||||
stopp_gliederung: bool = False
|
||||
|
||||
|
||||
class VersionNeu(BaseModel):
|
||||
hinweise: str | None = None # None: wie die bisherige Version
|
||||
stopp_gliederung: bool = False
|
||||
|
||||
|
||||
class Position(BaseModel):
|
||||
@@ -89,7 +91,7 @@ async def thema_anlegen(body: ThemaNeu):
|
||||
if not state.name_ok(name) or not state.name_ok(state.bezeichnung(name, body.spezialisierung.strip())):
|
||||
raise HTTPException(400, "Ungültiger Name")
|
||||
try:
|
||||
return _thema_info(state.anlegen(name, body.hinweise, body.spezialisierung))
|
||||
return _thema_info(state.anlegen(name, body.hinweise, body.spezialisierung, body.stopp_gliederung))
|
||||
except ValueError as e:
|
||||
raise HTTPException(409, str(e))
|
||||
|
||||
@@ -112,7 +114,7 @@ async def thema_loeschen(slug: str):
|
||||
async def version_anlegen(slug: str, body: VersionNeu | None = None):
|
||||
"""Neue Version: frischer Lauf ohne Wissen über die Vorgänger; Hinweise wahlweise geändert."""
|
||||
b = body or VersionNeu()
|
||||
key = state.version_anlegen(_thema(slug)["name"], b.hinweise)
|
||||
key = state.version_anlegen(_thema(slug)["name"], b.hinweise, b.stopp_gliederung)
|
||||
return {"v": int(key.rsplit("/v", 1)[1])}
|
||||
|
||||
|
||||
|
||||
@@ -50,6 +50,9 @@ async def _lauf(name: str) -> None:
|
||||
await STUFEN_FN[sid](name)
|
||||
s.update(status="fertig", beendet=state.jetzt())
|
||||
state.speichern(name)
|
||||
if sid == "gliederung" and st.get("stopp_gliederung"):
|
||||
st.update(status="pausiert", grund="Nach der Gliederung angehalten – „Fortsetzen“ schreibt die Kapitel", stufe="")
|
||||
return
|
||||
st.update(status="fertig", grund="", stufe="")
|
||||
except asyncio.CancelledError:
|
||||
st.update(status="pausiert", grund="Pausiert")
|
||||
|
||||
@@ -55,15 +55,17 @@ def name_von_slug(sl: str) -> str | None:
|
||||
return next((t["name"] for t in themen() if t.get("slug") == sl), None)
|
||||
|
||||
|
||||
def version_anlegen(name: str, hinweise: str | None = None) -> str:
|
||||
"""Neue Version; ohne Angabe übernimmt sie die Hinweise der neuesten Version (bzw. des Themas)."""
|
||||
def version_anlegen(name: str, hinweise: str | None = None, stopp_gliederung: bool = False) -> str:
|
||||
"""Neue Version; ohne Angabe übernimmt sie die Hinweise der neuesten Version (bzw. des Themas).
|
||||
stopp_gliederung: der Lauf hält nach der Gliederung an (günstiger Testlauf), „Fortsetzen“ schreibt weiter."""
|
||||
vs = versionen(name)
|
||||
alt = hinweise_von(f"{name}/v{vs[-1]}") if vs else (thema(name) or {}).get("hinweise", "")
|
||||
key = f"{name}/v{(vs or [0])[-1] + 1}"
|
||||
v = verzeichnis(key)
|
||||
for u in ("quellen", "buch", "berichte", "arbeit"):
|
||||
(v / u).mkdir(parents=True)
|
||||
_schreiben(v / "state.json", {**leerer_zustand(), "hinweise": (alt if hinweise is None else hinweise).strip()})
|
||||
_schreiben(v / "state.json", {**leerer_zustand(), "hinweise": (alt if hinweise is None else hinweise).strip(),
|
||||
"stopp_gliederung": stopp_gliederung})
|
||||
return key
|
||||
|
||||
|
||||
@@ -137,7 +139,7 @@ def themen() -> list[dict]:
|
||||
return aus
|
||||
|
||||
|
||||
def anlegen(name: str, hinweise: str, spezialisierung: str = "") -> dict:
|
||||
def anlegen(name: str, hinweise: str, spezialisierung: str = "", stopp_gliederung: bool = False) -> dict:
|
||||
"""name ist das Hauptthema („Game Design“), die Spezialisierung grenzt es ein; beides zusammen bildet die Bezeichnung."""
|
||||
spezialisierung = spezialisierung.strip()
|
||||
bez = bezeichnung(name, spezialisierung)
|
||||
@@ -148,7 +150,7 @@ def anlegen(name: str, hinweise: str, spezialisierung: str = "") -> dict:
|
||||
t = {"name": bez, "thema": name, "spezialisierung": spezialisierung, "slug": slug_frei(bez), "titel": bez,
|
||||
"hinweise": hinweise.strip(), "angelegt": jetzt()}
|
||||
_schreiben(d / "thema.json", t)
|
||||
version_anlegen(bez)
|
||||
version_anlegen(bez, stopp_gliederung=stopp_gliederung)
|
||||
return t
|
||||
|
||||
|
||||
@@ -160,14 +162,14 @@ def loeschen(name: str) -> None:
|
||||
|
||||
def zuruecksetzen(key: str) -> None:
|
||||
v = verzeichnis(key)
|
||||
h = hinweise_von(key)
|
||||
h, stopp = hinweise_von(key), bool(zustand(key).get("stopp_gliederung"))
|
||||
_cache.pop(key, None)
|
||||
for u in ("quellen", "buch", "berichte", "arbeit"):
|
||||
shutil.rmtree(v / u, ignore_errors=True)
|
||||
(v / u).mkdir()
|
||||
for f in ("deutung.json", "log.jsonl", "state.json", "position.json"):
|
||||
(v / f).unlink(missing_ok=True)
|
||||
_schreiben(v / "state.json", {**leerer_zustand(), "hinweise": h})
|
||||
_schreiben(v / "state.json", {**leerer_zustand(), "hinweise": h, "stopp_gliederung": stopp})
|
||||
|
||||
|
||||
def thema(key: str) -> dict | None:
|
||||
|
||||
Reference in New Issue
Block a user