blocking-ip/core/config.py

67 lines
1.5 KiB
Python

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):
pass
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
def config_logging(level: str):
logging.basicConfig(
level=level,
datefmt="%Y-%m-%d %H:%M:%S",
format="[%(asctime)s.%(msecs)03d] %(module)-15s:%(lineno)4d | %(funcName)-20s| %(levelname)-8s | %(message)s",
)
settings = Settings()
config_logging(level=settings.log.log_level)
log = logging.getLogger()
log.info("Logging initialized")