import logging from pathlib import Path from pydantic import BaseModel, PostgresDsn from pydantic_settings import BaseSettings, SettingsConfigDict BASE_DIR = Path(__file__).parent.parent class RunConfig(BaseModel): host: str = "0.0.0.0" port: int = 8080 reload: bool = True class DatabaseConfig(BaseModel): url: str echo: bool = False echo_pool: bool = False pool_size: int = 50 max_overflow: int = 10 class ApiPrefix(BaseModel): ip: str = "/api/ip" class WebPrefix(BaseModel): pass class LogConfig(BaseModel): date_format: str = "%Y-%m-%d %H:%M:%S" log_format: str = ( "[%(asctime)s.%(msecs)03d] %(module)-15s:%(lineno)4d | %(funcName)-20s| %(levelname)-8s | %(message)s" ) log_level: str = "INFO" class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=(BASE_DIR / ".env-template", BASE_DIR / ".env"), case_sensitive=False, env_nested_delimiter="__", env_prefix="BLOCKING_IP__", ) run: RunConfig = RunConfig() api: ApiPrefix = ApiPrefix() web: WebPrefix = WebPrefix() log: LogConfig = LogConfig() db: DatabaseConfig settings = Settings() def config_logging(level: str) -> None: logging.basicConfig( level=settings.log.log_level, datefmt=settings.log.date_format, format=settings.log.log_format, ) config_logging(level=settings.log.log_level) log = logging.getLogger() log.info("Logging initialized")