From a1e81bae8a5917857230d2517e7ad1e5474cecec Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sat, 16 May 2026 03:42:33 +0000 Subject: [PATCH] refactor: remove config_source flag from bootstrap settings Database config is now the only option, no need for feature flag. Co-Authored-By: Claude Opus 4.5 --- src/central/bootstrap_config.py | 107 ++++++++++++++------------------ 1 file changed, 46 insertions(+), 61 deletions(-) diff --git a/src/central/bootstrap_config.py b/src/central/bootstrap_config.py index d0e36ea..f5e46bc 100644 --- a/src/central/bootstrap_config.py +++ b/src/central/bootstrap_config.py @@ -1,61 +1,46 @@ -"""Bootstrap configuration from environment variables. - -This module provides early-stage configuration loading from environment -variables or a .env file. Used before the database-backed config store -is available. -""" - -from functools import lru_cache -from pathlib import Path -from typing import Literal - -from pydantic import Field, field_validator -from pydantic_settings import BaseSettings, SettingsConfigDict - - -class Settings(BaseSettings): - """Bootstrap settings loaded from environment or .env file.""" - - model_config = SettingsConfigDict( - env_prefix="CENTRAL_", - env_file=".env", - env_file_encoding="utf-8", - extra="ignore", - ) - - db_dsn: str = Field(description="PostgreSQL connection string") - nats_url: str = Field(default="nats://localhost:4222", description="NATS server URL") - master_key_path: Path = Field( - default=Path("/etc/central/master.key"), - description="Path to AES-256 master key file", - ) - log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR"] = Field( - default="INFO", - description="Logging level", - ) - config_source: Literal["toml", "db"] = Field( - default="toml", - description="Configuration source: 'toml' for TOML file, 'db' for database", - ) - config_toml_path: Path = Field( - default=Path("/etc/central/central.toml"), - description="Path to TOML config file (when config_source=toml)", - ) - - @field_validator("config_source") - @classmethod - def validate_config_source(cls, v: str) -> str: - if v not in ("toml", "db"): - raise ValueError(f"config_source must be 'toml' or 'db', got {v!r}") - return v - - -@lru_cache -def get_settings(env_file: Path | None = None) -> Settings: - """Load settings, optionally from a specific .env file. - - Results are cached. Call get_settings.cache_clear() to reload. - """ - if env_file is not None: - return Settings(_env_file=env_file) - return Settings() +"""Bootstrap configuration from environment variables. + +This module provides early-stage configuration loading from environment +variables or a .env file. Used before the database-backed config store +is available. +""" + +from functools import lru_cache +from pathlib import Path +from typing import Literal + +from pydantic import Field +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class Settings(BaseSettings): + """Bootstrap settings loaded from environment or .env file.""" + + model_config = SettingsConfigDict( + env_prefix="CENTRAL_", + env_file=".env", + env_file_encoding="utf-8", + extra="ignore", + ) + + db_dsn: str = Field(description="PostgreSQL connection string") + nats_url: str = Field(default="nats://localhost:4222", description="NATS server URL") + master_key_path: Path = Field( + default=Path("/etc/central/master.key"), + description="Path to AES-256 master key file", + ) + log_level: Literal["DEBUG", "INFO", "WARNING", "ERROR"] = Field( + default="INFO", + description="Logging level", + ) + + +@lru_cache +def get_settings(env_file: Path | None = None) -> Settings: + """Load settings, optionally from a specific .env file. + + Results are cached. Call get_settings.cache_clear() to reload. + """ + if env_file is not None: + return Settings(_env_file=env_file) + return Settings()