Simple hierarchic configuration manager for apps
Project description
modconfig – Simple hierarchic configuration manager for apps
Motivation
Applications (especially web services) often require certain configuration options to depend on the environment an application runs in (development, testing, production, etc.). For instance, a database address config option may default to a local database server during development, a mock database server during testing, and yet another database server during production. It may also need to be customizable via an environment variable. modconfig approaches scenarios like this and, allows to specify default configuration options for various environments and optionally override them by custom environment variables.
modconfig uses python modules for keep the configuration options. You are not locked by format (json, yaml, ini) restrictions and able to use any python statements/modules to tune your configuration as a pro. It keeps the flexability and make your configuration very declarative without any magic.
Requirements
python >= 3.4
Installation
modconfig should be installed using pip:
pip install modconfig
Usage
For example you have the structure in your app:
|- myapp/
| |- __init__.py
| |- config/
| | |- __init__.py
| | |- defaults.py
| | |- production.py
| | |- stage.py
| | |- tests.py
| | ...
See https://github.com/klen/modconfig/tree/develop/example as a simple reference.
Initialize the config in your app and use it anywhere:
from modconfig import Config
cfg = Config('myapp.config.production', ANY_OPTION1="VALUE", ANY_OPTION2="VALUE") # instead an import path it could be the module itself
assert cfg.DATABASE
assert cfg.ANY_OPTION1
Fallbacks
If you provide a several modules, modconfig will be using the first available:
from modconfig import Config
cfg = Config('myapp.config.local', 'myapp.config.production', ANY_OPTION1="VALUE")
assert cfg.DATABASE
assert cfg.ANY_OPTION1
Enviroments
The module path may be set as ENV variable:
import os
from modconfig import Config
# Let's define an env var
os.environ['MODCONFIG'] = 'myapp.config.production'
cfg = Config('env:MODCONFIG', 'myapp.config.local')
assert cfg.DATABASE
Custom Environment Variables
Any option may be redifened with ENV variables. By default the modconfig tries to parse value as a JSON which allows us to set complex values (dict, list, etc). If value is not JSON it would be parsed as str.
Any ENV variables which names are not contained in source module would be ignored.
See https://github.com/klen/modconfig/tree/develop/tests.py for more examples.
Bug tracker
If you have any suggestions, bug reports or annoyances please report them to the issue tracker at https://github.com/klen/modconfig/issues
Contributing
Development of the project happens at: https://github.com/klen/modconfig
License
Licensed under a MIT license.
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 Distributions
Built Distribution
File details
Details for the file modconfig-0.10.0-py3-none-any.whl
.
File metadata
- Download URL: modconfig-0.10.0-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.3.0 pkginfo/1.6.1 requests/2.25.1 setuptools/49.2.1 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.8.6
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2c8e9bd4a05fd3c86508bce722a8298ad6c281e684aeba442cc5fa8e21838368 |
|
MD5 | e2b240e61e2c27851559a4eb3ed8b10b |
|
BLAKE2b-256 | bba7dd98c1da9b95b00d51abcd2a773ea27ce023c9dfe8654dc10886a6f1ec30 |