diff options
author | Mark McClain <mark.mcclain@shootq.com> | 2011-02-16 13:31:54 -0500 |
---|---|---|
committer | Mark McClain <mark.mcclain@shootq.com> | 2011-02-16 13:31:54 -0500 |
commit | f607528ffc8604ab9f24cef007441a508a710deb (patch) | |
tree | bdda33a68e47cad8e4d22da381a93aecde0805eb /pecan/configuration.py | |
parent | c1ef8315455d92f1420546a9f29d94eb612571a6 (diff) | |
download | pecan-f607528ffc8604ab9f24cef007441a508a710deb.tar.gz |
removing variable replacement feature... cause more problems than it
solved
Diffstat (limited to 'pecan/configuration.py')
-rw-r--r-- | pecan/configuration.py | 66 |
1 files changed, 9 insertions, 57 deletions
diff --git a/pecan/configuration.py b/pecan/configuration.py index 170d92a..7cd97f0 100644 --- a/pecan/configuration.py +++ b/pecan/configuration.py @@ -5,51 +5,16 @@ import string IDENTIFIER = re.compile(r'[a-z_](\w)*$', re.IGNORECASE) -STRING_FORMAT = re.compile(r'{pecan\.conf(?P<var>([.][a-z_][\w]*)+)+?}', re.IGNORECASE) - class ConfigDict(dict): pass - -class ConfigString(object): - def __init__(self, format_string): - self.raw_string = format_string - - def __call__(self): - retval = self.raw_string - - for candidate in STRING_FORMAT.finditer(self.raw_string): - var = candidate.groupdict().get('var','') - - try: - obj = _runtime_conf - for dotted_part in var.split('.'): - if dotted_part == '': - continue - obj = getattr(obj, dotted_part) - - retval = retval.replace(candidate.group(), str(obj)) - - except AttributeError, e: - raise AttributeError, 'Cannot substitute \'%s\' using the current configuration' % candidate.group() - - return retval - - def __str__(self): - return self.raw_string - - @staticmethod - def contains_formatting(value): - return STRING_FORMAT.match(value) - - class Config(object): - def __init__(self, conf_dict={}): + def __init__(self, conf_dict={}, dirname=None): + self.dirname = dirname or os.getcwd() self.update(conf_dict) def update(self, conf_dict): - if isinstance(conf_dict, dict): iterator = conf_dict.iteritems() else: @@ -78,9 +43,9 @@ class Config(object): del value['__force_dict__'] self.__dict__[key] = ConfigDict(value) else: - self.__dict__[key] = Config(value) - elif isinstance(value, str) and ConfigString.contains_formatting(value): - self.__dict__[key] = ConfigString(value) + self.__dict__[key] = Config(value, dirname=self.dirname) + elif isinstance(value, basestring) and '%(confdir)s' in value: + self.__dict__[key] = value.replace('%(confdir)s', self.dirname) else: self.__dict__[key] = value @@ -93,15 +58,6 @@ class Config(object): def __repr__(self): return 'Config(%s)' % str(self.__dict__) - def __call__(self): - for k,v in self: - if isinstance(v, Config): - v() - elif hasattr(v, '__call__'): - self.__dict__[k] = v() - return self - - def conf_from_module(module): if isinstance(module, str): module = import_module(module) @@ -122,15 +78,13 @@ def conf_from_file(filepath): def conf_from_dict(conf_dict): - conf = Config() # set the configdir - conf_dir = os.path.dirname(conf_dict.get('__file__', '')) - if conf_dir == '': - conf_dir = os.getcwd() + dirname = os.path.dirname(conf_dict.get('__file__', '')) + if dirname == '': + dirname = os.getcwd() - conf['__conffile__'] = conf_dict.get('__file__') - conf['__confdir__'] = conf_dir + '/' + conf = Config(dirname=dirname) for k,v in conf_dict.iteritems(): if k.startswith('__'): @@ -139,7 +93,6 @@ def conf_from_dict(conf_dict): continue conf[k] = v - conf() return conf @@ -173,7 +126,6 @@ def import_module(conf): def initconf(): import default_config conf = conf_from_module(default_config) - conf() return conf |