diff --git a/src/milla/config.py b/src/milla/config.py new file mode 100644 index 0000000..f656411 --- /dev/null +++ b/src/milla/config.py @@ -0,0 +1,50 @@ +try: + import configparser +except ImportError: + import ConfigParser as configparser + +def read_config(filename): + '''Parse an ini file into a nested dictionary + + :param string filename: Path to the ini file to read + :returns: A dictionary whose keys correspond to the section and + option, joined with a dot character (.) + + For example, consider the following ini file:: + + [xmen] + storm = Ororo Monroe + cyclops = Scott Summers + + [avengers] + hulk = Bruce Banner + iron_man = Tony Stark + + The resulting dictionary would look like this:: + + { + 'xmen.storm': 'Ororo Monroe', + 'xmen.cyclops': 'Scott Summers', + 'avengers.hulk': 'Bruce Banner', + 'avengers.iron_man': 'Tony Stark', + } + + Thus, the option values for any section can be obtained as follows:: + + config['xmen.storm'] + + This dictionary can be used to configure an :py:class:`~milla.Application` + instance by using the ``update`` method:: + + app = milla.Application(router) + app.config.update(config) + ''' + + cparser = configparser.SafeConfigParser() + cparser.readfp(open(filename)) + + config = {} + for section in cparser.sections(): + for option in cparser.options(section): + config['.'.join((section, option))] = cparser.get(section, option) + return config