From 2cde0de07a7cf341e04ae2b43b99117f58b01ecb Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Mon, 6 Oct 2025 23:45:30 +0200 Subject: [PATCH] Config outline --- app/__main__.py | 5 ++++- app/main.py | 28 +++++++++++++++++++++++++++- config/config.yaml | 4 ++++ pyproject.toml | 1 + 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 config/config.yaml diff --git a/app/__main__.py b/app/__main__.py index 0b3284c..0ae0fbb 100644 --- a/app/__main__.py +++ b/app/__main__.py @@ -1,4 +1,7 @@ if __name__ == '__main__': - from main import run + try: + from main import run + except ImportError: + from .main import run run() diff --git a/app/main.py b/app/main.py index 22fe12a..c299144 100644 --- a/app/main.py +++ b/app/main.py @@ -1,3 +1,6 @@ +import os + +import yaml from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from jinja2 import Environment, FileSystemLoader, select_autoescape @@ -10,7 +13,26 @@ templates_env = Environment( autoescape=select_autoescape(["html", "xml"]), ) + +def load_config() -> dict: + """ + Ładuje konfigurację z pliku YAML. + Domyślna ścieżka: config/config.yaml + Można nadpisać przez APP_CONFIG_FILE. + """ + config_path = os.getenv("APP_CONFIG_FILE", "config/config.yaml") + if not os.path.exists(config_path): + # Zwróć minimalną domyślną konfigurację, jeśli plik nie istnieje + return { + "app": {"host": "127.0.0.1", "port": 8000, "reload": True}, + } + with open(config_path, "r", encoding="utf-8") as f: + return yaml.safe_load(f) or {} + + app = FastAPI(title="Karl", version="0.1.0") +# Załaduj konfigurację do stanu aplikacji +app.state.config = load_config() # Rejestracja routera API pod /api/v1 app.include_router(api_v1_router, prefix="/api/v1", tags=["v1"]) @@ -26,4 +48,8 @@ async def index(request: Request) -> HTMLResponse: def run() -> None: import uvicorn - uvicorn.run("app.main:app", host="127.0.0.1", port=8000, reload=True) + cfg = getattr(app.state, "config", {}) + host = cfg.get("app", {}).get("host", "127.0.0.1") + port = int(cfg.get("app", {}).get("port", 8000)) + reload = bool(cfg.get("app", {}).get("reload", True)) + uvicorn.run("app.main:app", host=host, port=port, reload=reload) diff --git a/config/config.yaml b/config/config.yaml new file mode 100644 index 0000000..8afdd9a --- /dev/null +++ b/config/config.yaml @@ -0,0 +1,4 @@ +app: + host: "127.0.0.1" + port: 8000 + reload: true diff --git a/pyproject.toml b/pyproject.toml index 5185ae8..43f7787 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,7 @@ dependencies = [ "fastapi>=0.115.0", "uvicorn[standard]>=0.30.0", "jinja2>=3.1.4", + "pyyaml>=6.0.2", ] [project.optional-dependencies]