from typing import Optional from pydantic import PostgresDsn, computed_field from pydantic_settings import BaseSettings, SettingsConfigDict class SMTPConfig(BaseSettings): server: str port: int username: str password: str class Settings(BaseSettings): JWT_ALGORITHM: str JWT_EXPIRE: int SECRET_KEY: str POSTGRES_USER: str POSTGRES_PASSWORD: str POSTGRES_HOST: str POSTGRES_DB: str APP_NAME: str ENV: str DEBUG: bool PORT: int EMAIL_SERVER: str EMAIL_PORT: int EMAIL_USERNAME: str EMAIL_PASSWORD: str FERNET_KEY: str VERIFICATION_BASE_URL: str GOOGLE_CLIENT_ID: str GOOGLE_CLIENT_SECRET: str GOOGLE_REDIRECT_URI: str FCM_SERVER_KEY: Optional[str] = None SICK_LEAVE_LIMIT: int = 10 CASUAL_LEAVE_LIMIT: int = 10 AUTH_BASE: str = "https://accounts.google.com/o/oauth2/v2/auth" TOKEN_URL: str = "https://oauth2.googleapis.com/token" GMAIL_SEND_SCOPE: str = "https://www.googleapis.com/auth/gmail.send" FIREBASE_TYPE: str FIREBASE_PROJECT_ID: str FIREBASE_PRIVATE_KEY_ID: str FIREBASE_PRIVATE_KEY: str FIREBASE_CLIENT_EMAIL: str FIREBASE_CLIENT_ID: str FIREBASE_AUTH_URI: str FIREBASE_TOKEN_URI: str FIREBASE_AUTH_PROVIDER_X509_CERT_URL: str FIREBASE_CLIENT_X509_CERT_URL: str FIREBASE_UNIVERSE_DOMAIN: str @computed_field @property def DATABASE_URL(self) -> PostgresDsn: """Sync DB URL""" return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}/{self.POSTGRES_DB}" @computed_field @property def ASYNC_DATABASE_URL(self) -> PostgresDsn: """Async DB URL""" return f"postgresql+asyncpg://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}/{self.POSTGRES_DB}" model_config = SettingsConfigDict( env_file=".env", case_sensitive=False, env_file_encoding="utf-8" ) settings = Settings()