From 2fe8d97e4e45d0fdf1369b614543f1eb46b9f8ce Mon Sep 17 00:00:00 2001 From: Yoann Roman Date: Fri, 14 Jan 2011 14:33:25 -0500 Subject: [PATCH 1/2] Minor PEP8 changes --- pecan/configuration.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pecan/configuration.py b/pecan/configuration.py index 374723b..0887612 100644 --- a/pecan/configuration.py +++ b/pecan/configuration.py @@ -3,9 +3,11 @@ import inspect import os import string + IDENTIFIER = re.compile(r'[a-z_](\w)*$', re.IGNORECASE) STRING_FORMAT = re.compile(r'{pecan\.conf(?P([.][a-z_][\w]*)+)+?}', re.IGNORECASE) + class ConfigString(object): def __init__(self, format_string): self.raw_string = format_string @@ -37,6 +39,7 @@ class ConfigString(object): def contains_formatting(value): return STRING_FORMAT.match(value) + class Config(object): def __init__(self, conf_dict={}): self.update(conf_dict) @@ -99,7 +102,6 @@ class Config(object): return self - def conf_from_module(module): if isinstance(module, str): module = import_module(module) @@ -108,6 +110,7 @@ def conf_from_module(module): return conf_from_dict(module_dict) + def conf_from_file(filepath): abspath = os.path.abspath(os.path.expanduser(filepath)) conf_dict = {} @@ -117,6 +120,7 @@ def conf_from_file(filepath): return conf_from_dict(conf_dict) + def conf_from_dict(conf_dict): conf = Config() @@ -138,6 +142,7 @@ def conf_from_dict(conf_dict): conf() return conf + def import_module(conf): if conf.endswith('.py'): conf = conf[:-3] @@ -164,17 +169,20 @@ def import_module(conf): return conf_mod + def initconf(): import default_config conf = conf_from_module(default_config) conf() return conf + def set_config(name): if '/' in name: _runtime_conf.update(conf_from_file(name)) else: _runtime_conf.update_with_module(name) + _runtime_conf = initconf() From 57f8b7cbd04a70d85e7b3a4e744a7a9cdd36b791 Mon Sep 17 00:00:00 2001 From: Yoann Roman Date: Fri, 14 Jan 2011 15:43:48 -0500 Subject: [PATCH 2/2] Fixing configuration to correctly handle forced dictionaries --- pecan/configuration.py | 16 ++++++++-------- tests/test_conf.py | 9 +++++---- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/pecan/configuration.py b/pecan/configuration.py index 0887612..170d92a 100644 --- a/pecan/configuration.py +++ b/pecan/configuration.py @@ -8,6 +8,10 @@ IDENTIFIER = re.compile(r'[a-z_](\w)*$', re.IGNORECASE) STRING_FORMAT = re.compile(r'{pecan\.conf(?P([.][a-z_][\w]*)+)+?}', re.IGNORECASE) +class ConfigDict(dict): + pass + + class ConfigString(object): def __init__(self, format_string): self.raw_string = format_string @@ -45,19 +49,14 @@ class Config(object): self.update(conf_dict) def update(self, conf_dict): - __force_dict__ = False - # first check the keys for correct if isinstance(conf_dict, dict): - if '__force_dict__' in conf_dict: - del conf_dict['__force_dict__'] - __force_dict__ = True iterator = conf_dict.iteritems() else: iterator = iter(conf_dict) for k,v in iterator: - if not IDENTIFIER.match(k) and not __force_dict__: + if not IDENTIFIER.match(k): raise ValueError('\'%s\' is not a valid indentifier' % k) cur_val = self.__dict__.get(k) @@ -74,9 +73,10 @@ class Config(object): return self.__dict__[key] def __setitem__(self, key, value): - if isinstance(value, dict): + if isinstance(value, dict) and not isinstance(value, ConfigDict): if value.get('__force_dict__'): - self.__dict__[key] = value + del value['__force_dict__'] + self.__dict__[key] = ConfigDict(value) else: self.__dict__[key] = Config(value) elif isinstance(value, str) and ConfigString.contains_formatting(value): diff --git a/tests/test_conf.py b/tests/test_conf.py index 8842364..c152633 100644 --- a/tests/test_conf.py +++ b/tests/test_conf.py @@ -33,7 +33,6 @@ class TestConf(TestCase): self.assertEqual(conf.server.host, '1.1.1.1') self.assertEqual(conf.server.port, '8081') - def test_update_set_default_config(self): """Update an empty configuration with the default values""" @@ -50,7 +49,6 @@ class TestConf(TestCase): def test_update_force_dict(self): """Update an empty configuration with the default values""" - conf = configuration.initconf() conf.update_with_module('forcedict') @@ -62,11 +60,11 @@ class TestConf(TestCase): self.assertEqual(conf.server.host, '0.0.0.0') self.assertEqual(conf.server.port, '8080') - self.assertEqual(type(conf.beaker), dict) + self.assertTrue(isinstance(conf.beaker, dict)) self.assertEqual(conf.beaker['session.key'], 'key') self.assertEqual(conf.beaker['session.type'], 'cookie') self.assertEqual(conf.beaker['session.validate_key'], '1a971a7df182df3e1dec0af7c6913ec7') - self.assertTrue(conf.beaker.get('__force_dict__'), None) + self.assertEqual(conf.beaker.get('__force_dict__'), None) def test_update_config_fail_bad_attribute(self): conf = configuration.initconf() @@ -120,6 +118,9 @@ class TestConf(TestCase): configuration.set_config('config') self.assertEqual(_runtime_conf.server.host, '1.1.1.1') + def test_config_set_from_module_with_extension(self): + configuration.set_config('config.py') + self.assertEqual(_runtime_conf.server.host, '1.1.1.1') def test_config_string(self): s = '{pecan.conf.app}'