from __future__ import annotations {% if database_dialect == "postgresql" -%} import os {% endif -%} from pathlib import Path from iti.config import ( DevConfig as BaseDevConfig, TestConfig as BaseTestConfig, ProdConfig as BaseProdConfig, ) BASE_DIR = Path(__file__).resolve().parent APP_NAME = "{{ project_name }}" def runtime_path(name: str) -> str: return str(BASE_DIR / "runtime" / name) def apply_project_config(config) -> None: config.app_name = APP_NAME config.base_dir = BASE_DIR config.file_storage["LOCAL"]["base_path"] = runtime_path("uploads") config.log_dir = runtime_path("logs") {% if database_dialect == "postgresql" %} apply_database_config(config) def apply_database_config(config) -> None: if os.getenv("DATABASE_URL"): return database = os.getenv("POSTGRES_DB", default_database_name(config.app_env)) config.database_url = default_postgresql_url(database) def default_postgresql_url(database: str) -> str: return ( f"postgresql+psycopg://{os.getenv('POSTGRES_USER', 'postgres')}:" f"{os.getenv('POSTGRES_PASSWORD', 'password')}@" f"{os.getenv('POSTGRES_HOST', '127.0.0.1')}:" f"{os.getenv('POSTGRES_PORT', '5432')}/{database}" ) def default_database_name(app_env: str) -> str: if app_env == "test": return "{{ project_slug | lower | replace('-', '_') }}_test" if app_env == "prod": return "{{ project_slug | lower | replace('-', '_') }}" return "{{ project_slug | lower | replace('-', '_') }}_dev" {% endif %} class DevConfig(BaseDevConfig): def __init__(self) -> None: super().__init__() apply_project_config(self) class TestConfig(BaseTestConfig): def __init__(self) -> None: super().__init__() apply_project_config(self) class ProdConfig(BaseProdConfig): def __init__(self) -> None: super().__init__() apply_project_config(self) config = { "dev": DevConfig, "test": TestConfig, "prod": ProdConfig, "default": DevConfig, }