"""Legt den projektspezifischen Ordner projekte/fortna/ an. Erzeugt das Projekt-Repo-Geruest gemaess doc/Kernkonzepte.md: projekte/fortna/ anlage.json # Projektmetadaten (Platzhalter, manuell zu schaerfen) overrides/.gitkeep # projektspezifische Ueberschreibungen (leer) images/.gitkeep # projektspezifische Bilder (leer) README.md # kurze Erlaeuterung Einmaliger Generator, kein Datei-Scan. Bestehende Dateien werden per Default NICHT ueberschrieben (--force zum Erzwingen). Verwendung: python fortna_init_project.py python fortna_init_project.py --force """ from __future__ import annotations import argparse import json import logging import os from pathlib import Path log = logging.getLogger(__name__) ANLAGE_JSON = { "projekt": { "nummer": "500592", "ka_nummer": "KA 135776", "kunde": "Fortna / H&M", "standort": "Cheb (Eger), CZ", "sprachen": ["de"], "_kommentar_sprachen": "EN/CZ vorhanden im Rohmaterial, aktuell nur DE gebaut", "normen_region": "EU", "_todo_rechtsgrundlage": "MRL 2006/42/EG (Altprojekt) vs. VO (EU) 2023/1230 - klaeren", "base_version": ">=0.1.0", }, "quelle": { "_kommentar": "Rohmaterial-Verzeichnis (ausserhalb des Repos), Basis der Verzeichnislisten", "rohmaterial": "c:/10-Develop/projekte/Fortna", }, "maschinen": [ {"_kommentar": "Modul-Liste noch zu befuellen (03_anlagenbeschreibung via meta.yaml)"}, ], "zusatz_kapitel": [], } README = """\ # Projekt Fortna (500592 / KA 135776) Projektspezifischer Ordner fuer die Fortna/H&M-Anlage in Cheb (CZ). Struktur gemaess `doc/Kernkonzepte.md` (Zwei-Repo-Architektur): - `anlage.json` - Projektmetadaten, Sprachen, Normenregion, Maschinenliste (ERP-Export-Platzhalter). - `overrides/` - projektspezifische Ueberschreibungen von Base-Modulen/Kapiteln. - `images/` - projektspezifische Bilder (Aufstellplan, Abnahmefotos, Kundenlogo). ## Herkunft der Inhalte Die eigentliche Dokumentation wird aus dem Fortna-Rohmaterial (`c:/10-Develop/projekte/Fortna`) erzeugt: 1. `lib/fortna_inventory.py` - inventarisiert das Rohmaterial (`results/fortna_inventory.json`). 2. `lib/fortna_convert_chapters.py --apply` - befuellt `chapters/`: - Volltext + Bilder fuer die 5 Hauptanleitungen (Betriebs-/Wartungsanleitung, Funktionsbeschreibung ILS/OMNIFLO/LoadingLoop). - Verzeichnislisten (`index.de.rst`) fuer alle uebrigen Kapitel (Zertifikate, Layouts, Schaltplaene, Lieferantendoku, Ersatzteile, Pruefberichte). Hinweis: Die Verzeichnislisten referenzieren Pfade im Rohmaterial und kopieren keine PDFs. Fuer einen produktiven PDF-Build mit eingebundenen Downloads muss das Rohmaterial zugaenglich gemacht bzw. die referenzierten Dokumente ins Projekt uebernommen werden. """ def write_if_absent(path: Path, content: str, force: bool) -> None: if path.exists() and not force: log.info(" vorhanden (uebersprungen): %s", path.name) return path.parent.mkdir(parents=True, exist_ok=True) path.write_text(content, encoding="utf-8") log.info(" geschrieben: %s", path.name) def main() -> None: parser = argparse.ArgumentParser(description="Legt projekte/fortna/ an.") parser.add_argument("--project-dir", default=None, help="Zielordner (default: PROJECT/projekte/fortna)") parser.add_argument("--force", action="store_true", help="Bestehende Dateien ueberschreiben") parser.add_argument("--verbose", "-v", action="store_true") args = parser.parse_args() logging.basicConfig( level=logging.DEBUG if args.verbose else logging.INFO, format="%(levelname)-7s %(message)s", ) project_root = Path(os.environ.get("PROJECT", Path(__file__).resolve().parent.parent)) target = Path(args.project_dir) if args.project_dir else project_root / "projekte" / "fortna" log.info("Projektordner: %s", target) target.mkdir(parents=True, exist_ok=True) write_if_absent(target / "anlage.json", json.dumps(ANLAGE_JSON, ensure_ascii=False, indent=2) + "\n", args.force) write_if_absent(target / "README.md", README, args.force) write_if_absent(target / "overrides" / ".gitkeep", "", args.force) write_if_absent(target / "images" / ".gitkeep", "", args.force) log.info("Fertig.") if __name__ == "__main__": main()