Skip to main content

Like dataclasses but for config.

Project description

configclasses

PyPI codecov Downloads Downloads

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 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

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


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-2.0.1.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

12factor_configclasses-2.0.1-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

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

Hashes for 12factor_configclasses-2.0.1.tar.gz
Algorithm Hash digest
SHA256 5d0c2a74dcda4e59b268dce7885e223836aa7f29c34a0966574620c7900072c9
MD5 3fce9359d57ab40c143880925b9af106
BLAKE2b-256 1abc1af5af8dd131e00ab79faefaf7c32392f8385dba8420b3f20b19e77bf2a6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for 12factor_configclasses-2.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 6f7b14659c30a34fd4ef560c1e18417653230c4cc164d569e680261d06ebc8b0
MD5 7afe02cd00baeb6d6eaf4175c7c51d7b
BLAKE2b-256 0d1e16d9281e421d9a15bd71326b851170a87a9492306e09ba839ac6361e99b4

See more details on using hashes here.

Supported by

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