Like dataclasses but for config.
Project description
configclasses
Like dataclasses but for config.
Specify your config with a class and load it with your env vars or env files.
# .env
HOST=0.0.0.0
PORT=8000
...
import httpx
from configclasses import configclass
@configclass
class ClientConfig:
host: str
port: int
class UserAPIClient(httpx.AsyncClient):
def __init__(self, config: ClientConfig, *args, **kwargs):
self.config = config
...
config = ClientConfig.from_path(".env")
async with UserAPIClient(config) as client:
...
Features
- Fill your configclasses with existent env vars.
- Define default values in case these variables have no value at all.
- Load your config files in env vars following 12factor apps recommendations.
- Support for .env, yaml, toml, ini and json.
- Convert your env vars with specified type in configclass:
int
,float
,str
orbool
. - Use nested configclasses to more complex configurations.
- Specify a prefix with
@configclass(prefix="<PREFIX>")
to append this prefix to your configclass' attribute names. - Config groups (TODO): https://cli.dev/docs/tutorial/config_groups/
Requirements
Python 3.8+
Installation
Depending on your chosen config file format you can install:
- .env ->
pip install 12factor-configclasses[dotenv]
- .yaml ->
pip install 12factor-configclasses[yaml]
- .toml ->
pip install 12factor-configclasses[toml]
- .ini ->
pip install 12factor-configclasses
- .json ->
pip install 12factor-configclasses
Or install all supported formats with:
pip install 12factor-configclasses[full]
Usage
There are three ways to use it.
Loading an .env file:
# .env
HOST=0.0.0.0
PORT=8000
DB_URL=sqlite://:memory:
GENERATE_SCHEMAS=True
DEBUG=True
HTTPS_ONLY=False
GZIP=True
SENTRY=False
#config.py
from configclasses import configclass
@configclass
class DB:
user: str
password: str
url: str
@configclass
class AppConfig:
host: str
port: int
db: DB
generate_schemas: bool
debug: bool
https_only: bool
gzip: bool
sentry: bool
# app.py
from api.config import AppConfig
app_config = AppConfig.from_path(".env")
app = Starlette(debug=app_config.debug)
if app_config.https_only:
app.add_middleware(
HTTPSRedirectMiddleware)
if app_config.gzip:
app.add_middleware(GZipMiddleware)
if app_config.sentry:
app.add_middleware(SentryAsgiMiddleware)
...
register_tortoise(
app,
db_url=app_config.db.url,
modules={"models": ["api.models"]},
generate_schemas=app_config.generate_schemas,
)
if __name__ == "__main__":
uvicorn.run(app, host=app_config.host, port=app_config.port)
Loading predefined environmental variables:
The same than before, but instead of:
app_config = AppConfig.from_path(".env")
You will do:
app_config = AppConfig.from_environ()
Loading a file from a string:
test_env = """HOST=0.0.0.0
PORT=8000
DB_URL=sqlite://:memory:
GENERATE_SCHEMAS=True
DEBUG=True
HTTPS_ONLY=False
GZIP=True
SENTRY=False"""
app_config = AppConfig.from_string(test_env, ".env")
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file 12factor_configclasses-2.0.1.tar.gz
.
File metadata
- Download URL: 12factor_configclasses-2.0.1.tar.gz
- Upload date:
- Size: 6.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.6 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5d0c2a74dcda4e59b268dce7885e223836aa7f29c34a0966574620c7900072c9 |
|
MD5 | 3fce9359d57ab40c143880925b9af106 |
|
BLAKE2b-256 | 1abc1af5af8dd131e00ab79faefaf7c32392f8385dba8420b3f20b19e77bf2a6 |
File details
Details for the file 12factor_configclasses-2.0.1-py3-none-any.whl
.
File metadata
- Download URL: 12factor_configclasses-2.0.1-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.6.1 CPython/3.11.6 Windows/10
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6f7b14659c30a34fd4ef560c1e18417653230c4cc164d569e680261d06ebc8b0 |
|
MD5 | 7afe02cd00baeb6d6eaf4175c7c51d7b |
|
BLAKE2b-256 | 0d1e16d9281e421d9a15bd71326b851170a87a9492306e09ba839ac6361e99b4 |