From 209c48987c165009eb2af1bc92ce71c77001d0c8 Mon Sep 17 00:00:00 2001 From: John Lancaster <32917998+jsl12@users.noreply.github.com> Date: Fri, 31 Jul 2026 19:23:12 -0500 Subject: [PATCH] separated cli settings --- src/transcription/__main__.py | 19 +++++++++++++------ src/transcription/config.py | 13 ++++++++++--- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/transcription/__main__.py b/src/transcription/__main__.py index 68fc9d6..549b728 100644 --- a/src/transcription/__main__.py +++ b/src/transcription/__main__.py @@ -1,17 +1,24 @@ import uvicorn +from fastapi import FastAPI -from .config import LOGGING_CONFIG -from .config import get_settings +from .app import create_app +from .config import parse_cli_settings + + +def create_cli_app() -> FastAPI: + """Create an app from CLI settings for Uvicorn's reload process.""" + return create_app(settings=parse_cli_settings()) def main() -> None: - settings = get_settings() + settings = parse_cli_settings() + application = "transcription.__main__:create_cli_app" if settings.reload else create_app(settings=settings) uvicorn.run( - "transcription.app:create_app", - factory=True, + application, + factory=settings.reload, host=settings.host, port=settings.port, - log_level=LOGGING_CONFIG.get("root", {}).get("level", "info").lower(), + log_level=settings.log_level, reload=settings.reload, ) diff --git a/src/transcription/config.py b/src/transcription/config.py index 3bb6618..bf0b489 100644 --- a/src/transcription/config.py +++ b/src/transcription/config.py @@ -6,6 +6,7 @@ are resolved by the provider adapters, not here. """ import logging.config +from collections.abc import Sequence from enum import StrEnum from functools import cache from pathlib import Path @@ -51,7 +52,6 @@ class Settings(BaseSettings): env_file=".env", env_file_encoding="utf-8", extra="ignore", - cli_parse_args=True, cli_implicit_flags=True, cli_kebab_case=True, ) @@ -99,8 +99,15 @@ class Settings(BaseSettings): @cache -def get_settings(**kwargs) -> Settings: - return Settings(**kwargs) +def get_settings(**kwargs: Any) -> Settings: + """Load cached settings without reading process CLI arguments.""" + return Settings(_cli_parse_args=False, **kwargs) + + +def parse_cli_settings(args: Sequence[str] | None = None) -> Settings: + """Load settings with CLI arguments at the executable boundary.""" + cli_args = True if args is None else list(args) + return Settings(_cli_parse_args=cli_args) LOGGING_CONFIG: dict[str, Any] = {