Skip to main content

configurator

CircleCI Docs

This is a Python library for building a configuration store from one or more layered configuration sources. These are most commonly files, with YAML, TOML and JSON support included and other formats easily added. The sources don’t have to be files, and support is included for both environment variables and command line options.

In addition to an easy to use interface, configuration information is also made available as nested, simple python data types so that you can validate the schema of your configuration using the tool of your choice.

Quickstart

To install the library, go for:

pip install configurator[yaml,toml]

Here’s how you would handle a layered set of defaults, system-wide config and then optional per-user config:

from configurator import Config

defaults = Config({
    'cache': {
        'location': '/tmp/my_app',
        'max_files': 100,
    },
    'banner': 'default banner',
    'threads': 1,
})
system = Config.from_path('/etc/my_app/config.yaml')
user = Config.from_path('~/.my_app.yaml', optional=True)
config = defaults + system + user

Now, if we wanted configuration from the environment and command line arguments to override those provided in configuration files, we could do so as follows:

import os
from argparse import ArgumentParser
from configurator import convert, target, required

config.merge(os.environ, {
    convert('MYAPP_THREADS', int): 'threads',
    required('MYAPP_CACHE_DIRECTORY'): 'cache.location',
})

parser = ArgumentParser()
parser.add_argument('--threads', type=int)
parser.add_argument('--max-files', type=int)
args = parser.parse_args()

config.merge(args, {
    'threads': 'threads',
    'max_files': 'cache.max_files',
})

To check the configuration we’ve accumulated is sensible we can use a data validation library such as Voluptuous:

from os.path import exists
from voluptuous import Schema, All, Required, PathExists

schema = Schema({
    'cache': {'location': All(str, PathExists()), 'max_files': int},
    'banner': Required(str),
    'threads': Required(int),
    })

schema(config.data)

So, with all of the above, we could use the following sources of configuration:

>>> import os, sys
>>> print(open('/etc/my_app/config.yaml').read())
cache:
  location: /var/my_app/
<BLANKLINE>
>>> os.environ['MYAPP_THREADS']
'2'
>>> os.environ['MYAPP_CACHE_DIRECTORY']
'/var/logs/myapp/'
>>> sys.argv
['myapp.py', '--threads', '3', '--max-files', '200']

With the above sources of configuration, we’d end up with a configuration store that we can use as follows:

>>> config.cache.location
'/var/logs/myapp/'
>>> config.cache.max_files
200
>>> config.banner
'default banner'
>>> config.threads
3

Release files for configurator 3.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for configurator 3.2.0
File Size Uploaded
configurator-3.2.0.tar.gz 35.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for configurator 3.2.0
File Interpreter ABI Platform
configurator-3.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 48.1 kB

Release files / configurator-3.2.0.tar.gz

Download URL configurator-3.2.0.tar.gz
Size 35.5 kB
Tags Source
SHA-256 checksum
How to use checksums
42650ea55e7df5e4601c1c3d137d1b0ea0bec332448947627c368e0254a36043
BLAKE2b-256 checksum
How to use checksums
62067c27b07622df52e2591ea581485afb84bbc3386493bb47a2f6992fe7b78c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release files / configurator-3.2.0-py3-none-any.whl

Download URL configurator-3.2.0-py3-none-any.whl
Size 12.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
be39c84f9a9aafd09b3c34acdc267ca4a5804e51975bfdd01cb2d433e9856766
BLAKE2b-256 checksum
How to use checksums
99f8dbc0d0b77eb72fbcfc94446d3b67049575d963a99280a3a41079cbce3cd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.9.18

Release history Release notifications | RSS feed

This release

3.2.0 This release

2 release files

3.1.0

2 release files

3.0.0

2 release files

2.6.0

2 release files

2.5.1

2 release files

2.5.0

2 release files

2.4.0

2 release files

2.3.0

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.5.0

2 release files

0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page