Settings Management¶
Configuration Management
Unchained provides a flexible settings management system that allows you to configure your application using Python classes.
Basic Usage¶
Environment Variables¶
Type Safety¶
Best Practices¶
- Type Safety: Always use type hints for settings
- Default Values: Provide sensible defaults for optional settings
- Environment Variables: Use environment variables for sensitive data
- Validation: Use Pydantic's validation features
Common Patterns¶
Database Configuration¶
class DatabaseSettings(UnchainedSettings):
URL: str
PORT: int = 5432
USER: str
PASSWORD: str
NAME: str
class Config:
env_prefix = "DB_"
API Configuration¶
class APISettings(UnchainedSettings):
HOST: str = "0.0.0.0"
PORT: int = 8000
DEBUG: bool = False
SECRET_KEY: str
ALLOWED_HOSTS: list[str] = ["*"]
class Config:
env_prefix = "API_"
Feature Flags¶
class FeatureSettings(UnchainedSettings):
ENABLE_NEW_UI: bool = False
ENABLE_EXPERIMENTAL: bool = False
MAX_CONNECTIONS: int = 100
CACHE_TIMEOUT: int = 300
class Config:
env_prefix = "FEATURE_"
Nested Settings¶
class DatabaseSettings(UnchainedSettings):
URL: str
PORT: int = 5432
class CacheSettings(UnchainedSettings):
URL: str
TIMEOUT: int = 300
class Settings(UnchainedSettings):
DEBUG: bool = False
DATABASE: DatabaseSettings
CACHE: CacheSettings
class Config:
env_prefix = "APP_"
env_nested_delimiter = "__"
# APP_DATABASE__URL, APP_CACHE__TIMEOUT
Validation¶
from pydantic import validator
class Settings(UnchainedSettings):
PORT: int = 8000
HOST: str = "0.0.0.0"
@validator("PORT")
def validate_port(cls, v):
if v < 1024:
raise ValueError("Port must be greater than 1024")
return v
@validator("HOST")
def validate_host(cls, v):
if v not in ["0.0.0.0", "127.0.0.1", "localhost"]:
raise ValueError("Invalid host")
return v