diff --git a/.DS_Store b/.DS_Store index 2ca674b..c1e0b7f 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Readme.md b/Readme.md index 54f7b18..1857730 100644 --- a/Readme.md +++ b/Readme.md @@ -35,12 +35,12 @@ Den Ordner `generator/` musst du im normalen Alltag nicht anfassen. 2. Schreibe deine Startseite in `havelseite/index.md`. 3. Lege weitere Seiten als Markdown-Dateien in `havelseite/` an. 4. Lege Bilder in `havelseite/medien/`. -5. Baue die Website mit `python3 generator/havelseiten.py`. +5. Baue die Website mit `python3 havelseiten build`. ## Seite bauen ```sh -python3 generator/havelseiten.py +python3 havelseiten build ``` Vor dem Bauen wird `havelseite/einstellungen.md` automatisch formatiert und danach geprueft. Aus `- [] Wald` wird zum Beispiel `- [ ] Wald`. @@ -52,11 +52,19 @@ Die fertigen Seiten liegen danach in `ausgabe/`. ## Vorher pruefen ```sh -python3 generator/validate.py +python3 havelseiten validate ``` Der Validator sagt in normalen Worten, wenn zum Beispiel ein Bild fehlt, ein Galerieordner falsch geschrieben ist oder ein unbekannter Block wie `@galry` benutzt wurde. +## Einstellungen formatieren + +```sh +python3 havelseiten format +``` + +Der Formatter bringt `havelseite/einstellungen.md` in eine saubere Form. Aus `- [] Wald` wird zum Beispiel `- [ ] Wald`. + ## Projektstruktur ```text diff --git a/generator/__pycache__/cli.cpython-311.pyc b/generator/__pycache__/cli.cpython-311.pyc new file mode 100644 index 0000000..e85375f Binary files /dev/null and b/generator/__pycache__/cli.cpython-311.pyc differ diff --git a/generator/__pycache__/cli.cpython-38.pyc b/generator/__pycache__/cli.cpython-38.pyc new file mode 100644 index 0000000..abd77d0 Binary files /dev/null and b/generator/__pycache__/cli.cpython-38.pyc differ diff --git a/generator/__pycache__/havelseiten.cpython-311.pyc b/generator/__pycache__/havelseiten.cpython-311.pyc index 7b4510f..f9e10fe 100644 Binary files a/generator/__pycache__/havelseiten.cpython-311.pyc and b/generator/__pycache__/havelseiten.cpython-311.pyc differ diff --git a/generator/__pycache__/havelseiten.cpython-38.pyc b/generator/__pycache__/havelseiten.cpython-38.pyc index bfe892e..4bc1abe 100644 Binary files a/generator/__pycache__/havelseiten.cpython-38.pyc and b/generator/__pycache__/havelseiten.cpython-38.pyc differ diff --git a/generator/__pycache__/settings_config.cpython-38.pyc b/generator/__pycache__/settings_config.cpython-38.pyc index e283c1b..95ec11d 100644 Binary files a/generator/__pycache__/settings_config.cpython-38.pyc and b/generator/__pycache__/settings_config.cpython-38.pyc differ diff --git a/generator/__pycache__/validate.cpython-311.pyc b/generator/__pycache__/validate.cpython-311.pyc index 0ea933a..06bf8d1 100644 Binary files a/generator/__pycache__/validate.cpython-311.pyc and b/generator/__pycache__/validate.cpython-311.pyc differ diff --git a/generator/__pycache__/validate.cpython-38.pyc b/generator/__pycache__/validate.cpython-38.pyc index 6bee729..c41a7c9 100644 Binary files a/generator/__pycache__/validate.cpython-38.pyc and b/generator/__pycache__/validate.cpython-38.pyc differ diff --git a/generator/cli.py b/generator/cli.py new file mode 100644 index 0000000..91c26d9 --- /dev/null +++ b/generator/cli.py @@ -0,0 +1,78 @@ +from __future__ import annotations + +import argparse +from pathlib import Path +import sys + +import havelseiten as builder +import settings_config +import validate + + +ROOT_DIR = Path(__file__).resolve().parent.parent + + +def format_command() -> int: + changed = settings_config.format_settings_file() + settings_file = settings_config.active_settings_file() + + if not settings_file: + print("Keine Einstellungsdatei gefunden.") + return 1 + + path = settings_file.relative_to(ROOT_DIR) + + if changed: + print(f"formatiert: {path}") + else: + print(f"bereits formatiert: {path}") + + return 0 + + +def validate_command() -> int: + return validate.main() + + +def build_command() -> int: + builder.build_site(format_settings=True) + return 0 + + +def main(argv: list[str] | None = None) -> int: + parser = argparse.ArgumentParser( + prog="havelseiten", + description="Havelseiten formatieren, pruefen und bauen." + ) + subparsers = parser.add_subparsers(dest="command", required=True) + + subparsers.add_parser( + "format", + help="havelseite/einstellungen.md formatieren" + ) + subparsers.add_parser( + "validate", + help="Einstellungen und Markdown-Dateien pruefen" + ) + subparsers.add_parser( + "build", + help="Website nach ausgabe/ bauen" + ) + + args = parser.parse_args(argv) + + if args.command == "format": + return format_command() + + if args.command == "validate": + return validate_command() + + if args.command == "build": + return build_command() + + parser.print_help() + return 1 + + +if __name__ == "__main__": + raise SystemExit(main(sys.argv[1:])) diff --git a/generator/havelseiten.py b/generator/havelseiten.py index 2ea97c4..bd30c40 100644 --- a/generator/havelseiten.py +++ b/generator/havelseiten.py @@ -94,9 +94,8 @@ def load_settings() -> dict: SETTINGS = DEFAULT_SETTINGS -def run_validation(): - settings_config.format_settings_file() - messages, language = validate.collect_messages() +def run_validation(format_settings: bool = True): + messages, language = validate.collect_messages(format_settings=format_settings) if not messages: print(validate.tr(language, "ok")) @@ -1643,10 +1642,10 @@ def copy_content_media(): ) -def build_site(): +def build_site(format_settings: bool = True): global SETTINGS - run_validation() + run_validation(format_settings=format_settings) SETTINGS = load_settings() if OUTPUT_DIR.exists(): diff --git a/generator/validate.py b/generator/validate.py index c77f747..2f94997 100644 --- a/generator/validate.py +++ b/generator/validate.py @@ -793,9 +793,12 @@ def validate_media_parameter( )) -def collect_messages() -> tuple[list[str], str]: +def collect_messages(format_settings: bool = True) -> tuple[list[str], str]: messages: list[str] = [] - settings_config.format_settings_file() + + if format_settings: + settings_config.format_settings_file() + language = language_from_settings() validate_settings(messages, language) diff --git a/havelseite/einstellungen.md b/havelseite/einstellungen.md index 4bda757..a15aa3d 100644 --- a/havelseite/einstellungen.md +++ b/havelseite/einstellungen.md @@ -8,10 +8,10 @@ Titel: Havelseiten - [ ] Englisch @einstellung:farbpalette -- [] Havel +- [x] Havel - [ ] Wasser - [ ] Wald -- [x ] Sonnenuntergang +- [ ] Sonnenuntergang - [ ] Dunkel - [ ] Küste - [ ] Segel diff --git a/havelseiten b/havelseiten new file mode 100755 index 0000000..3a3dd72 --- /dev/null +++ b/havelseiten @@ -0,0 +1,17 @@ +#!/usr/bin/env python3 +from __future__ import annotations + +from pathlib import Path +import sys + + +ROOT_DIR = Path(__file__).resolve().parent +GENERATOR_DIR = ROOT_DIR / "generator" + +sys.path.insert(0, str(GENERATOR_DIR)) + +from cli import main + + +if __name__ == "__main__": + raise SystemExit(main(sys.argv[1:]))