Add your description here
Project description
Sane Settings
Simply Sane Settings
Born of the desire of having app config behaving in an explicit way, to zero in and fix missing config very quickly
Design Goals
- Having an extremely explicit settings library that minimise the time spent fighting with settings
- For attributes without defaults, if SaneSettings does not find a env var, it will fail loading and tell you EXACTLY what env var it was expecting.
- Any attributes with default that does NOT get replaced with an env var will be highlighted in logs (use DEBUG log level) which helps you quickly find typos in your Env Vars
- Only supports environment variables to override the defaults
Non goals
- Loading from config files
Getting started
pip install sane_settings
from sane_settings import (
EnvConfigBase,
env_field,
prefix_field,
)
@dataclass
class DatabaseSettings(EnvConfigBase):
"""Database connection settings."""
# Database connection parameters
host: str = env_field("HOST", default="localhost") # Database host
port: int = env_field("PORT", default=5432) # Database port
user: str = env_field("USER", default="postgres") # Database user
password: str = env_field("PASSWORD", default="postgres") # Database password
@dataclass
class Settings(EnvConfigBase):
"""Main application settings."""
# Nested Settings objects
database: DatabaseSettings = prefix_field("DB") # Any nested attribute will be EXAMPLE__DB__{attribute}
# defaults at the end
SERVICE_NAME: str = "my-service"
settings = Settings.load_from_env(app_prefix="EXAMPLE", pretty_check=True)
Example
from sane_settings import (
EnvConfigBase,
Environments,
SecretStr,
env_field,
prefix_field,
)
@dataclass
class DatabaseSettings(EnvConfigBase):
"""Database connection settings."""
# Database connection parameters
host: str = env_field("HOST", default="localhost") # APP_DB_HOST
port: int = env_field("PORT", default=5432) # APP_DB_PORT
user: str = env_field("USER", default="postgres") # APP_DB_USER
password: SecretStr = env_field("PASSWORD", default="postgres") # APP_DB_PASSWORD, will NOT show in logs unless you use DatabaseSettings().password.get_secret_value()
name: str = env_field("NAME", default="queue_service") # APP_DB_NAME
@property
def uri(self) -> str:
"""Get the PostgreSQL connection URI."""
return f"postgresql://{self.user}:{self.password.get_secret_value()}@{self.host}:{self.port}/{self.name}?sslmode=allow"
@dataclass
class Settings(EnvConfigBase):
"""Main application settings."""
# Nested Settings objects
database: DatabaseSettings = prefix_field("DB") # Any nested attribute will use APP_DB_{atribute}
# Basic settings
TRACING_BACKEND: TracingBackends | None = env_field("TRACING_BACKEND")
ENVIRONMENT: Environments = env_field("ENVIRONMENT") # a default enum for your environments
# defaults at the end
SERVICE_NAME: str = "my-service"
settings = Settings.load_from_env(app_prefix="APP", pretty_check=True)
DEv
Release
just bump-patch|minor|major just push-all
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sane_settings-0.2.4.tar.gz
(6.3 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sane_settings-0.2.4.tar.gz.
File metadata
- Download URL: sane_settings-0.2.4.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37b463ca6237aba5e864f0aa81eb791422ab6db8ea34a96ddb4d81aae9d7b33e
|
|
| MD5 |
916caa5a053e326d9283805e6c27a8ec
|
|
| BLAKE2b-256 |
59646807da4928d33ddedaac42bab6c52bb521ab62fc088fec9dcf16be8d7be2
|
File details
Details for the file sane_settings-0.2.4-py3-none-any.whl.
File metadata
- Download URL: sane_settings-0.2.4-py3-none-any.whl
- Upload date:
- Size: 5.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25eaa1fe04e06dc7d5a31cd0842017a517bacdc4845916a0b1a38af12da67d9e
|
|
| MD5 |
d0399d3f7ae04122ba584af3bfff710a
|
|
| BLAKE2b-256 |
26ec0a9836b10c833ccb2b9ccd595121e2c61553fa72d13dfd3c6a4193a22003
|