Move read_config to milla.util

master
Dustin C. Hatch 2013-01-20 14:48:23 -06:00
parent 3408919faa
commit 65ebf76b45
2 changed files with 66 additions and 69 deletions

View File

@ -1,56 +0,0 @@
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)
'''
with open(filename) as f:
# ConfigParser API changed in Python 3.2
if hasattr(configparser.ConfigParser, 'read_file'):
cparser = configparser.ConfigParser()
cparser.read_file(f)
else:
cparser = configparser.SafeConfigParser()
cparser.readfp(f)
config = {}
for section in cparser.sections():
for option in cparser.options(section):
config['.'.join((section, option))] = cparser.get(section, option)
return config

View File

@ -1,47 +1,47 @@
# Copyright 2011 Dustin C. Hatch # Copyright 2011 Dustin C. Hatch
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
# You may obtain a copy of the License at # You may obtain a copy of the License at
# #
# http://www.apache.org/licenses/LICENSE-2.0 # http://www.apache.org/licenses/LICENSE-2.0
# #
# Unless required by applicable law or agreed to in writing, software # Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, # distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
'''Module milla.uti '''Convenience utility functions
Please give me a docstring!
:Created: Mar 30, 2011 :Created: Mar 30, 2011
:Author: dustin :Author: dustin
:Updated: $Date$
:Updater: $Author$
''' '''
from wsgiref.handlers import format_date_time from wsgiref.handlers import format_date_time
import datetime import datetime
import time import time
try:
import configparser
except ImportError:
import ConfigParser as configparser
def asbool(val): def asbool(val):
'''Test a value for truth '''Test a value for truth
Returns ``False`` values evaluating as false, such as the integer Returns ``False`` values evaluating as false, such as the integer
``0`` or ``None``, and for the following strings, irrespective of ``0`` or ``None``, and for the following strings, irrespective of
letter case: letter case:
* false * false
* no * no
* f * f
* n * n
* off * off
* 0 * 0
Returns ``True`` for all other values. Returns ``True`` for all other values.
''' '''
if not val: if not val:
return False return False
try: try:
@ -57,7 +57,7 @@ def http_date(date):
'''Format a datetime object as a string in RFC 1123 format '''Format a datetime object as a string in RFC 1123 format
This function returns a string representing the date according to This function returns a string representing the date according to
RFC 1123. The string returned will always be in English, as RFC 1123. The string returned will always be in English, as
required by the specification. required by the specification.
:param date: A :py:class:`datetime.datetime` object :param date: A :py:class:`datetime.datetime` object
@ -66,3 +66,56 @@ def http_date(date):
stamp = time.mktime(date.timetuple()) stamp = time.mktime(date.timetuple())
return format_date_time(stamp) return format_date_time(stamp)
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)
'''
with open(filename) as f:
# ConfigParser API changed in Python 3.2
if hasattr(configparser.ConfigParser, 'read_file'):
cparser = configparser.ConfigParser()
cparser.read_file(f)
else:
cparser = configparser.SafeConfigParser()
cparser.readfp(f)
config = {}
for section in cparser.sections():
for option in cparser.options(section):
config['.'.join((section, option))] = cparser.get(section, option)
return config