Skip to main content

Like dataclasses but for config.

Project description

configclasses

PyPI codecov

Like dataclases 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 or bool.
  • 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

pip install 12factor-configclasses

Supported formats

  • .env -> pip install 12factor-configclasses[dotenv]
  • .yaml -> pip install 12factor-configclasses[yaml]
  • .toml -> pip install 12factor-configclasses[toml]
  • .ini
  • .json

Install all dependencies with:

pip install 12factor-configclasses[full]

Example

# .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
...
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)

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

12factor-configclasses-0.2.5.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

12factor_configclasses-0.2.5-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file 12factor-configclasses-0.2.5.tar.gz.

File metadata

  • Download URL: 12factor-configclasses-0.2.5.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.17 CPython/3.8.0 Windows/10

File hashes

Hashes for 12factor-configclasses-0.2.5.tar.gz
Algorithm Hash digest
SHA256 730c439415f92db1ecb5cb3c83172830866633a5b8702811b1b693f8fe461935
MD5 dff1bc7f7958bfd8632c9c132ece0d60
BLAKE2b-256 7b2f5a3c2f5bbd5a7d6220137daf9b958ec0481276447c2e1b94f9682c433450

See more details on using hashes here.

File details

Details for the file 12factor_configclasses-0.2.5-py3-none-any.whl.

File metadata

File hashes

Hashes for 12factor_configclasses-0.2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 694ce4c2ed6491fe170c494d0d7402c3f794e1de989608f968698a40dc3dccc7
MD5 078f70459bd710b650d2da6714a46fd4
BLAKE2b-256 b291a6ac5ca057542bcadf82a7a3a23039dd78c0550716e99c0292cdaf7a3a3f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page