Skip to main content

Config file sections as objects

Project description

Latest PyPI Version License

Fileconfig turns config file sections into Python objects. Create a class referring to an INI file specifying the arguments for the different instances to be created. Calling the class with the section name as parameter will return the instance with the parameters specified in the config section.


$ pip install fileconfig


Create as subclass of fileconfig.Config and set its filename attribute to your INI-file name.

If the filename is relative, it is interpreted relative to the path of the module where your class is defined.

>>> import fileconfig

>>> class Cfg(fileconfig.Config):
...     filename = 'examples/pets.ini'
...     def __init__(self, key, **kwargs):
...         self.key = key
...         self.__dict__.update(kwargs)
...     def __str__(self):
...         items = ('  %r: %r' % (k, v) for k, v in sorted(self.__dict__.iteritems()))
...         return '{\n%s\n}' % ',\n'.join(items)

On instance creation, the __init__ method will be called with the section name (key) and the keyword args from the selected section of the INI-file.

Suppose your INI-file begins like this:

species = Norwegian blue
can_talk = yes
quantity = 0
characteristics = beatiful plumage, pining for the fjords

To retrieve an instance, call the class with a section name.

>>> c = Cfg('parrot')

>>> print c
  'can_talk': 'yes',
  'characteristics': 'beatiful plumage, pining for the fjords',
  'key': 'parrot',
  'quantity': '0',
  'species': 'Norwegian blue'

Only one instance will be created for each section (a.k.a. the singleton pattern):

>>> Cfg('parrot') is c

The default __repr__ of instances is roundtripable:

>>> c

The constructor is also idempotent:

>>> Cfg(c) is c


You can specify a space-delimited list of aliases for each section:

aliases = snail special_offer
species = slug
can_talk = no
quantity = 1

Aliases map to the same instance:

>>> s = Cfg('special_offer')

>>> s

>>> s is Cfg('snail') is Cfg('slug')

Inspect instance names:

>>> s.key

>>> s.aliases
['snail', 'special_offer']

>>> s.names
['slug', 'snail', 'special_offer']

To use a different delimiter for aliases override the _split_aliases method on your class.

Make it a staticmethod or classmethod that takes a single string argument and returns the splitted list.


INI-file sections can inherit from another section:

inherits = parrot
can_talk = no
characteristics = dead, totally stiff, ceased to exist

Specified keys override inherited ones:

>>> print Cfg('polly')
  'can_talk': 'no',
  'characteristics': 'dead, totally stiff, ceased to exist',
  'inherits': 'parrot',
  'key': 'polly',
  'quantity': '0',
  'species': 'Norwegian blue'

Multiple or chained inheritance is not supported.


Use the class to iterate over the instances from all section:

>>> list(Cfg)
[__main__.Cfg('parrot'), __main__.Cfg('slug'), __main__.Cfg('polly')]

Print the string representation of all instances:

>>> Cfg.pprint_all()  # doctest: +ELLIPSIS
  'can_talk': 'yes',
  'characteristics': 'beatiful plumage, pining for the fjords',
  'key': 'parrot',


Apart from the key, aliases, and inherits parameters, the __init__ method receives the unprocessed strings from the INI-file parser.

Use the __init__ method to process the other arguments:

>>> class Pet(Cfg):
...     def __init__(self, can_talk, quantity, characteristics=None, **kwargs):
...         self.can_talk = {'yes':True, 'no': False}[can_talk]
...         self.quantity = int(quantity)
...         if characteristics is not None and characteristics.split():
...             self.characteristics = [c.strip() for c in characteristics.split(',')]
...         super(Pet, self).__init__(**kwargs)

>>> print Pet('polly')
  'can_talk': False,
  'characteristics': ['dead', 'totally stiff', 'ceased to exist'],
  'inherits': 'parrot',
  'key': 'polly',
  'quantity': 0,
  'species': 'Norwegian blue'

By default, this package will use ConfigParser.SafeConfigParser from the standard library to parse the INI-file.

To use a different parser, override the _parser attribute in your fileconfig.Config subclass.


Fileconfig is distributed under the MIT license.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for fileconfig, version 0.1
Filename, size File type Python version Upload date Hashes
Filename, size (11.3 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page