Package: konfig
Yet another configuration object. Compatible with the updatedconfigparser.Usage>>>fromkonfigimportConfig>>>c=Config('myconfig.ini')Then readconfigparser’s documentationfor the APIs.Konfig as some extra APIs likeas_args(), which will return
the config file as argparse compatible arguments:>>> c.as_args()
['--other-stuff', '10', '--httpd', '--statsd-endpoint', 'http://ok']For automatic filtering, you can also pass an argparse parser object
toscan_args(). I will iterate over the arguments you’ve defined in the
parser and look for them in the config file, then return a list of args
likeas_args(). You can then use this list directly
withparser.parse_args()- or complete it with sys.argv or whatever.>>> import argparse
>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--log-level', dest='loglevel')
>>> parser.add_argument('--log-output', dest='logoutput')
>>> parser.add_argument('--daemon', dest='daemonize', action='store_true')>>> config = Config('myconfig.ini')
>>> args_from_config = config.scan_args(parser)>>> parser.parse_args(args=sys.argv[1:]+args_from_config)Syntax DefinitionThe configuration file is a ini-based file. (Seehttp://en.wikipedia.org/wiki/INI_filefor more details.) Variables name can be
assigned values, and grouped into sections. A line that starts with “#” is
commented out. Empty lines are also removed.Example:[section1]# commentname=valuename2="other value"[section2]foo=barIni readers in Python, PHP and other languages understand this syntax.
Although, there are subtle differences in the way they interpret values and in
particular if/how they convert them.Values conversionHere are a set of rules for converting values:If value is quoted with “ chars, it’s a string. This notation is useful to
include “=” characters in the value. In case the value contains a “ character,
it must be escaped with a “" character.When the value is composed of digits and optionally prefixed by “-”, it’s
tentatively converted to an integer or a long depending on the language. If the
number exceeds the range available in the language, it’s left as a string.If the value is “true” or “false”, it’s converted to a boolean, or 0 and 1
when the language does not have a boolean type.A value can be an environment variable : “${VAR}” is replaced by the value of
VAR if found in the environment. If the variable is not found, an error must be
raised.A value can contains multiple lines. When read, lines are converted into a
sequence of values. Each new line for a multiple lines value must start with a
least one space or tab character.Examples:[section1]# commenta_flag=Truea_number=1a_string="other=value"another_string=other valuea_list=onetwothreeuser=${USERNAME}Extending a fileAn INI file can extend another file. For this, a “DEFAULT” section must contain
an “extends” variable that can point to one or several INI files which will be
merged to the current file by adding new sections and values.If the file pointed in “extends” contains section/variable names that already
exist in the original file, they will not override existing ones.Here’s an example: you have a public config file and want to keep some database
passwords private. You can have those password in a separate file.public.ini:[database]user=tarekpassword=PUBLIC[section2]foo=bazbas=barAnd then in private.ini:[DEFAULT]extends=public.ini[database]password=secretNow if you useprivate.iniyou will get:[database]user=tarekpassword=secret[section2]foo=bazbas=barTo point several files, the multi-line notation can be used:[DEFAULT]extends=public1.inipublic2.iniWhen several files are provided, they are processed sequentially. So if the
first one has a value that is also present in the second, the second one will
be ignored. This means that the configuration goes from the most specialized to
the most common.Override modeIf you want to extend a file and have existing values overridden,
you can use “overrides” instead of “extends”.Here’s an example.  file2.ini:[section1]name2="other value"[section2]foo=bazbas=barfile1.ini:[DEFAULT]overrides=file2.ini[section2]foo=barResult if you usefile1.ini:[section1]name2="other value"[section2]foo=bazbas=barInsection2, notice thatfoois nowbaz.