from pydantic_settings import BaseSettings from functools import lru_cache class Settings(BaseSettings): # Environment env: str = "development" # "development" or "production" # Server server_host: str = "0.0.0.0" server_port: int = 8080 # Database database_host: str = "localhost" database_port: int = 5432 database_user: str = "orchard" database_password: str = "" database_dbname: str = "orchard" database_sslmode: str = "disable" # S3 s3_endpoint: str = "" s3_region: str = "us-east-1" s3_bucket: str = "orchard-artifacts" s3_access_key_id: str = "" s3_secret_access_key: str = "" s3_use_path_style: bool = True @property def database_url(self) -> str: sslmode = f"?sslmode={self.database_sslmode}" if self.database_sslmode else "" return f"postgresql://{self.database_user}:{self.database_password}@{self.database_host}:{self.database_port}/{self.database_dbname}{sslmode}" @property def is_development(self) -> bool: return self.env.lower() == "development" @property def is_production(self) -> bool: return self.env.lower() == "production" class Config: env_prefix = "ORCHARD_" case_sensitive = False @lru_cache() def get_settings() -> Settings: return Settings()