1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
PyStaticConfiguration
=====================
A python library for loading, validating and reading configuration from many
heterogeneous formats. Configuration is split into two phases.
Configuration Loading
---------------------
Configuration is read from files or python objects, flattened, and merged
into a container called a `namespace`. Namespaces are used to separate
unrelated configuration groups.
If configuration is changed frequently, it can also be reloaded easily
with very little change to the existing code.
Configuration Reading
---------------------
A configuration value is looked up in the `namespace`. It is validating and
converted to the requested type.
.. contents:: Contents
:local:
:depth: 1
:backlinks: none
Build Status
------------
.. image:: https://github.com/dnephin/PyStaticConfiguration/actions/workflows/build.yaml/badge.svg
:target: https://github.com/dnephin/PyStaticConfiguration/actions
:alt: Build status
.. image:: https://img.shields.io/pypi/v/PyStaticConfiguration.svg
:target: https://pypi.python.org/pypi/PyStaticConfiguration
:alt: Latest PyPI version
Install
-------
* PyStaticConfiguration is available on pypi: https://pypi.python.org/pypi/PyStaticConfiguration
* The source is hosted on github: https://github.com/dnephin/PyStaticConfiguration
.. code-block:: bash
$ pip install PyStaticConfiguration
Also see the
`release notes <http://pythonhosted.org/PyStaticConfiguration/release_notes.html>`_.
Documentation
-------------
http://pythonhosted.org/PyStaticConfiguration/
Examples
--------
A common minimal use of staticconf would be to use a single yaml configuration
file and read some values from it.
.. code-block:: python
import staticconf
filename = 'hosts.yaml'
namespace = 'hosts'
# Load configuration from the file into namespace `hosts`
staticconf.YamlConfiguration(filename, namespace=namespace)
...
# Some time later on, read values from that namespace
print staticconf.read('database.slave', namespace=namespace)
print staticconf.read('database.master', namespace=namespace)
`hosts.yaml` might look something like this:
.. code-block:: yaml
database:
slave: dbslave_1
master: dbmaster_1
A more involved example would load configuration from multiple files, create
a watcher for reloading, and read some config values.
.. code-block:: python
from functools import partial
import os
import staticconf
def load_config(config_path, defaults='~/.myapp.yaml`)
# First load global defaults if the file exists
staticconf.INIConfiguration('/etc/myapp.ini', optional=True)
# Next load user defaults
staticconf.YamlConfiguration(defaults, optional=True)
# Next load the specified configuration file
staticconf.YamlConfiguration(config_path)
# Now let's override it with some environment settings
staticconf.DictConfiguration(
(k[6:].lower(), v) for k, v in os.environ.items() if k.startswith('MYAPP_'))
def build_watcher(filename):
return staticconf.ConfigFacade.load(
filenames, 'DEFAULT', partial(load_config, filename))
def run(config_path):
watcher = build_watcher(config_path)
while is_work():
watcher.reload_if_changed()
current_threshold = staticconf.read_float('current_threshold')
do_some_work(current_thresold)
|