Configuration handling for developers
Project description
PURPOSE
- to provide unified way to configure
python2
andpython3
application - to be handy for developers, devops, QA and users with technical background
READINGS
- yaml tutorial
- http://yaml.org/spec/1.1/
- YAML IS NOT A JSON AND NOT A DATA SERIALIZATION FORMAT. ITS A OBJECT SERIALIZATION FORMAT
REQUIREMENTS
- MUST support yaml out of the box
- MUST configure program (standalone module or python package) by recursive merge developer defined configuration (defaults) and runtime provided configuration.
- each configuration layer (e.g. defaults, runtime config, etc.) MUST be a nested mapping
- number of merged layers is unlimited and MAY be redefined by developer
- layer merge order MAY be redefined by developer
- MUST contain set of yaml constructors
!url
!date
!datetime
!timedelta
!strjoin
!envvar
!regexp
!filecontent
- SHOULD contain set of dangerous yaml constructors
!file
!socket
!yamlfile
- includes yaml by file path or url
- MAY process constructors with recursion detection (see REQUIREMENT NOTES)
- MAY contain cli arg mapping constructors
- SHOULD provide a way to extend set of constructors before configuration loaded
- MUST provide a way to configure logging using
logging.dictConfig
and values from merged configuration - runtime configuration path MAY be redefined with envvar (like
$ CONFIG=./some-config.yml program.py
) - runtime configuration path MAY be redefined with cli arg (like
$ program.py --config=./some-config.yml
) - SHOULD enable sharing of anchors between layers
- SHOULD NOT allow to redefine anchors that alredy defined in previous layers
- MUST support filesystem path as configuration path
- MUST support
file://
,http(s)://
urls as configuration path - MAY support
ftp://
urls as configuration path - MAY support
git://
urls as configuration path
REQUIREMENT NOTES
!class
,!object
, and!yamlfile
are considered dangerous since class or object creation may require existing configuration that is not exists during constructor call.!yamlfile
can refer!class
or!object
inside and/or cause infinte yaml load recursion or module load recursion.!file
and!socket
are considered dangerous since they are not serializable
IMPLEMENTATION
- provides
<module>.<config>
submodule that contains resulting configuration as mapping
???
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 Distribution
devconfig-0.4.8.tar.gz
(19.1 kB
view hashes)