This guide covers the fundamental concepts of defining configurations with Coastline.
@config DecoratorThe @config decorator registers your Pydantic model with the global configuration registry. This allows the ConfigLoader to automatically instantiate your configuration classes.
from coastline import config
from pydantic import BaseModel
@config
class MyConfig(BaseModel):
key: str
The class name (MyConfig) is used as the registry key.
@config()
class AnotherConfig(BaseModel):
setting: int
Use the name parameter to specify a different registry key:
@config(name="custom-key")
class CustomConfig(BaseModel):
value: str
Since your configuration classes are Pydantic models, you get all Pydantic features:
@config
class ValidatedConfig(BaseModel):
port: int # Will be validated as integer
ratio: float # Will be validated as float
enabled: bool # Will be validated as boolean
@config
class ConfigWithDefaults(BaseModel):
host: str = "localhost"
port: int = 8080
debug: bool = False
from pydantic import Field
from coastline import config
@config
class ValidatedFields(BaseModel):
port: int = Field(ge=1, le=65535, description="Port number")
name: str = Field(min_length=1, max_length=100)
timeout: float = Field(gt=0, description="Timeout in seconds")
from coastline import config
@config
class DatabaseConfig(BaseModel):
host: str
port: int
@config
class AppConfig(BaseModel):
database: DatabaseConfig
debug: bool
AppConfig:
database:
host: localhost
port: 5432
debug: true
@config
class DevelopmentConfig(BaseModel):
debug: bool = True
log_level: str = "DEBUG"
@config
class ProductionConfig(BaseModel):
debug: bool = False
log_level: str = "WARNING"
from pydantic import BaseModel
class BaseDatabaseConfig(BaseModel):
host: str
port: int
timeout: int = 30
from coastline import config
@config
class PostgreSQLConfig(BaseDatabaseConfig):
database: str
pool_size: int = 10
@config
class MySQLConfig(BaseDatabaseConfig):
charset: str = "utf8mb4"