view README.txt @ 74:0516a9e0566b

more README hacking
author Jeff Hammel <jhammel@mozilla.com>
date Wed, 28 Mar 2012 12:42:58 -0700
parents 79f2d70ed5e5
children 6667e79ffcb3
line wrap: on
line source

configuration
=============

multi-level unified configuration for python consumption

- you have a (python) program that wants to read configuration from
  configuration files (I currently support JSON and YAML) and also
  from the command line
- you want to be able to serialize and deserialize configuration


Basic Usage
-----------

The ``configuration.Configuration`` class implements an abstract base
class that extends ``optparse.OptionParser``.  The form of the
configuration is dictated by setting the ``options`` attribute on your
subclass.  ``options`` is a dictionary of the form::

  {'name': {<value>}}

``name`` is the name of the configuration option, and ``value`` is a
``dict`` that gives the form of the option.

``Configuration`` transforms these options into ``OptionParser`` options.

Options for ``value`` include:

 * help : what the option is about (translated to command line help)
 * default: default value for the option
 * required: if a true value, this option must be present in the
   configuration. If ``required`` is a string, it will be displayed if
   the option is not present. If the default is defined, you won't
   need required as the default value will be used
 * type: type of the option. Used to control the parsing of the option
 * flags: a list that, if present, will be used for the command line
   flags. Othwise, the option name prepended by ``--`` will be used.
   To disable as a command line option, use an empty list ``[]``

In addition, you may extend ``Configuration`` and have additional
useful items in the ``value`` dict for ``options``.

For an example, see
http://k0s.org/mozilla/hg/configuration/file/c831eb58fb52/tests/example.py#l7


Configuration Files
-------------------

Config files are useful for (IMHO) A. complicated setup;
B. reproducibility; C. being able to share run time configurations
The latter is only useful if the configuration contains nothing
machine-specific (e.g. the path to an executable might vary from
machine to machine) or if the configuration is overridable from the
command line.

``configuration`` features the ability to serialize (dump) and deserialize
(load) configuration from a pluggable set of formats.  By default,
``--dump <filename>`` will dump the resultant configuration (that
gathered from the command line options and loaded configuration files)
to a file of format dictate by the file extension (Example:
``--dump mydumpfile.json`` will use JSON format).  The flag for the
option, e.g. ``--dump``, may be set via the ``dump`` parameter to
``Configuration``'s constructor.

``Configuration`` instances can also deserialize data.  The normal case of
using configuration is when you want to be able to read from
configuration files.  By default, ``Configuration`` instances read
positional arguments for configuration files to be loaded.

The `configuration package <http://pypi.python.org/pypi/configuration>`_
requires ``json``(``simplejson`` on older python) and ``PyYAML`` so
these serializers/deserializers are available if you install the package.


Extending Configuration
-----------------------

----

Jeff Hammel

http://k0s.org/mozilla/hg/configuration