blocking-ip/core/config.py

98 lines
2.7 KiB
Python
Raw Permalink Normal View History

2024-08-10 14:52:46 +00:00
import logging
from pathlib import Path
from pydantic import BaseModel, PostgresDsn
from pydantic_settings import BaseSettings, SettingsConfigDict
BASE_DIR = Path(__file__).parent.parent
TEMPLATES_DIR = BASE_DIR / "templates"
STATIC_DIR = TEMPLATES_DIR / "static"
2024-08-10 14:52:46 +00:00
class RunConfig(BaseModel):
host: str = "0.0.0.0"
port: int = 8080
reload: bool = True
class DatabaseConfig(BaseModel):
drivername: str = "postgresql+asyncpg"
username: str = "username"
password: str = "password"
host: str = "localhost"
port: int = 5432
database: str = "dbname"
url: PostgresDsn = f"{drivername}://{username}:{password}@{host}:{port}/{database}"
2024-08-10 14:52:46 +00:00
echo: bool = False
echo_pool: bool = False
pool_size: int = 50
max_overflow: int = 10
naming_convention: dict[str, str] = {
"ix": "ix_%(column_0_label)s",
"uq": "uq_%(table_name)s_%(column_0_name)s",
"ck": "ck_%(table_name)s_%(constraint_name)s",
"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
"pk": "pk_%(table_name)s",
}
2024-08-10 14:52:46 +00:00
class PrefixConfig(BaseModel):
api: str = "/api"
ip: str = "/api/ip"
swagger: str = "/docs"
2024-08-10 14:52:46 +00:00
class SwaggerConfig(BaseModel):
openapi_url: str = "/openapi.json"
title: str = "Blocked IP API"
oauth2_redirect_url: str = "/docs/oauth2-redirect"
swagger_js_url: str = "/static/swagger/swagger-ui-bundle.js"
swagger_css_url: str = "/static/swagger/swagger-ui.css"
swagger_favicon_url: str = "/static/swagger/favicon.png"
2024-08-10 14:52:46 +00:00
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()
prefix: PrefixConfig = PrefixConfig()
2024-08-10 14:52:46 +00:00
log: LogConfig = LogConfig()
swagger: SwaggerConfig = SwaggerConfig()
2024-08-10 14:52:46 +00:00
db: DatabaseConfig
settings = Settings()
settings.db.url = (
f"{settings.db.drivername}://"
f"{settings.db.username}:"
f"{settings.db.password}@"
f"{settings.db.host}:"
f"{settings.db.port}/"
f"{settings.db.database}"
)
def config_logging(level: str) -> None:
2024-08-10 14:52:46 +00:00
logging.basicConfig(
level=settings.log.log_level,
datefmt=settings.log.date_format,
format=settings.log.log_format,
2024-08-10 14:52:46 +00:00
)
config_logging(level=settings.log.log_level)
log = logging.getLogger()
log.info("Logging initialized")