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.
import httpx from configclasses import configclass class UserAPIClient(httpx.AsyncClient): def __init__(self, config: ClientConfig, *args, **kwargs): self.config = config super().__init__(*args, **kwargs) async def get_users(self, headers: Optional[Headers] = None) -> Dict[str, Any]: response = await self.get(f"{self.path}/users", auth=headers) response.raise_for_status() return response.json() @configclass class ClientConfig: host: str port: int config = ClientConfig.from_path(".env") async with UserAPIClient(config) as client: users = await client.get_users(auth_headers)
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size 12factor_configclasses-0.3.0-py3-none-any.whl (6.8 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size 12factor-configclasses-0.3.0.tar.gz (6.7 kB) | File type Source | Python version None | Upload date | Hashes View |
Close
Hashes for 12factor_configclasses-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e24debe9524e2ab8dc1aa55459c6934c651f187bb3fe66dbf0c3d1fafb6ab49c |
|
MD5 | b1b3b4a533e379edf05592597294bcdc |
|
BLAKE2-256 | cc90c5216bce23c9f4e9977c1edbedc0ccf77bf156e67cb5ebb232c75e1485f9 |
Close
Hashes for 12factor-configclasses-0.3.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 159d5c0785121551a56ed88b2d05eb9cae965545f5a3bff05d8852137d15a027 |
|
MD5 | e502b3fb2c02920e12ed99222f7d8846 |
|
BLAKE2-256 | 115f120b9696c827bc466f1c776706239ec8077b63fb7c773a64a8332903a429 |