feat: allow configuration of root paths via CLI

This commit is contained in:
Tim Grelka
2026-02-14 20:37:52 +01:00
parent ea87661ec4
commit a21931b890
2 changed files with 7 additions and 29 deletions
+3 -26
View File
@@ -2,10 +2,8 @@ from typing import Annotated
import typer import typer
import api.directus as directus
import src.build as build import src.build as build
import src.config as config import src.config as config
import src.download as download
from src.edition import Edition from src.edition import Edition
app = typer.Typer() app = typer.Typer()
@@ -21,33 +19,12 @@ def main(
Edition.ea, Edition.ea,
Edition.nea, Edition.nea,
], ],
skip_download_editions: Annotated[ source: Annotated[str | None, typer.Option(help="Content source directory.")] = None,
bool, typer.Option(help="Skip download for editions, will use cached files or fail.") destination: Annotated[str | None, typer.Option(help="Destination directory to build to.")] = None,
] = False,
skip_download_assets: Annotated[
bool, typer.Option(help="Skip download for assets, will use cached assets or paceholders.")
] = False,
) -> None: ) -> None:
conf = config.Config() conf = config.Config(content_path=source, build_path=destination)
api = directus.DirectusAPI(conf.question_base_url, conf.question_access_token)
content_api = directus.DirectusAPI(conf.content_base_url, conf.content_access_token)
dl = download.Download(api, content_api, conf)
bd = build.Build(conf) bd = build.Build(conf)
if not skip_download_editions:
# Download the text files
for e in edition:
dl.download_edition(e)
if not skip_download_assets:
# Download additional files
# dl.download_question_metadata() # (now constant file metadata3b.json)
dl.download_photos()
dl.download_pictures()
dl.download_includes()
dl.download_snippets()
dl.download_content()
# Build surrounding website # Build surrounding website
bd.build_website() bd.build_website()
# Build individual editions # Build individual editions
+4 -3
View File
@@ -6,14 +6,14 @@ from pathlib import Path
class Config: class Config:
__env_prefix = "OHM" __env_prefix = "OHM"
def __init__(self): def __init__(self, content_path: str = None, build_path: str = None):
if os.path.isfile("config/config.json"): if os.path.isfile("config/config.json"):
with open("config/config.json") as file: with open("config/config.json") as file:
self.config = json.load(file) self.config = json.load(file)
else: else:
self.config = {} self.config = {}
self.p_data = Path(self.get_config_value("content_path", "/var/www/content")) self.p_data = Path(self.get_config_value("content") if content_path is None else content_path)
self.p_data_toc = self.p_data / "toc" self.p_data_toc = self.p_data / "toc"
@@ -30,12 +30,13 @@ class Config:
self.p_data_fragenkatalog = self.p_data_questions / "fragenkatalog3b.json" self.p_data_fragenkatalog = self.p_data_questions / "fragenkatalog3b.json"
self.p_data_metadata = self.p_data_questions / "metadata3b.json" self.p_data_metadata = self.p_data_questions / "metadata3b.json"
self.p_build = Path("./build") self.p_build = Path(self.get_config_value("build_path", "./build") if build_path is None else build_path)
self.p_build_photos = self.p_build / "photos" self.p_build_photos = self.p_build / "photos"
self.p_build_pictures = self.p_build / "pictures" self.p_build_pictures = self.p_build / "pictures"
self.p_build_assets = self.p_build / "assets" self.p_build_assets = self.p_build / "assets"
self.p_assets = Path("./assets") self.p_assets = Path("./assets")
self.p_templates = Path("./templates")
def get_config_value(self, key: str, default=None): def get_config_value(self, key: str, default=None):
if key in self.config: if key in self.config: