Skip to main content

Comfortable python app configuration

Project description

Comfortable python configs from environment variables.
* Validated at **import time**. If you forgot a configuration variable you find out at startup.
* One source of configuration for all application code. No more `flask_conf.cfg`, `myconfig.ini`, `.env`, hardcoded constants and variables from `docker-compose.yml`.
* Type casting and validation at load time. Do it once and forget.

# Quickstart
```
>>> from confy import BaseEnvironConfig
>>> class Config(BaseEnvironConfig):
... DEBUG = ConfigField(processor=strtobool, default=True)
...
>>> Config.DEBUG
True
```

Loads variable `DEBUG` __at import time__ from environment, applies function `string_to_bool` to the value,

If variable is not provided uses the default of `True`.

# Config field options
* `default` - default value, can be anything
* `required` - boolean, default `False`. Throws `ConfigError` if value is required, but not provided.
* `processor` - callable. Can be used to validate the value
* `from_var` - specify environment variable to take value from. If none uses config class property name, __case is important__.

# Mocking in tests
Since its a global class that can't be instanced it's __very important__ to import it like this:

```
from package import module
print(module.ConfigClass.as_text())
```

and __not__ like this:

```
from package.module import ConfigClass
print(ConfigClass.as_text())
```

The first option allows you to monkey patch the config during testing.
Pytest example:

```
from package.module import ConfigClass

class TestConfig(ConfigClass):
pass

TestConfig.TEST = True

monkeypatch.setattr('package.module.ConfigClass', TestConfig)
```

All code accesing `module.ConfigClass` will get `TestConfig`.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Filename, size & hash SHA256 hash help File type Python version Upload date
confi-0.0.4.1.tar.gz (3.2 kB) Copy SHA256 hash SHA256 Source None

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page