from typing import Annotated from pydantic import AnyUrl, BeforeValidator, Field, HttpUrl, RedisDsn from service.constants import LogLevel from service.constants.system import Environment from service.helpers.settings import ProjectBaseSettings, parse_cors class ProjectSettings(ProjectBaseSettings): # Fast API Settings root_path: str = Field("", examples=["/api/v2", ""]) project_name: str = Field("{{ cookiecutter.project_slug }}") debug: bool = Field(False) # Security Settings secret_key: str = Field("CHANGE_ME--8^&gnoqen9+&9usjpjnsw*lhfqnl45p!^hdvf*s*i--INSECURE") token_expiration_days: int = Field(1) cors_origins: Annotated[list[AnyUrl] | str, BeforeValidator(parse_cors)] = [] # Service values environment: Environment = Field(Environment.local, examples=[_ for _ in Environment]) log_level: LogLevel = Field(LogLevel.info, examples=[_ for _ in LogLevel]) # Background task config redis_url: RedisDsn = Field(RedisDsn(url="redis://redis:6379")) database_url: str = Field("asyncpg://{{ cookiecutter.project_slug }}:{{ cookiecutter.project_slug }}@postgres:5432/{{ cookiecutter.project_slug }}") # Various timezone: str = Field( "Europe/Riga", examples=["UTC", "Europe/Riga", "Europe/London", "US/Pacific"], ) sentry_url: HttpUrl | None = Field(None)