From e6506e753bd3c1fc5c32271d30db46fb41f8486f Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 26 Jan 1999 19:29:25 +0000 Subject: Patch by Chris Petrilli (not really tested since I don't know this module myself) to accept an option keyword argument (vars) that is substituted on top of the defaults that were setup in __init__. The patch also fixes the problem where you can't have recusive references inside your configuration file. --- Lib/ConfigParser.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index 89e2d85..6d8f956 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -173,12 +173,14 @@ class ConfigParser: except IOError: pass - def get(self, section, option, raw=0): + def get(self, section, option, raw=0, vars=None): """Get an option value for a given section. All % interpolations are expanded in the return values, based on the defaults passed into the constructor, unless the optional - argument `raw' is true. + argument `raw' is true. Additional substitutions may be provided + using the vars keyword argument, which override any pre-existing + defaults. The section DEFAULT is special. """ @@ -191,6 +193,9 @@ class ConfigParser: raise NoSectionError(section) d = self.__defaults.copy() d.update(sectdict) + # Update with the entry specific variables + if vars: + d.update(vars) option = string.lower(option) try: rawval = d[option] @@ -199,11 +204,17 @@ class ConfigParser: # do the string interpolation if raw: return rawval - try: - return rawval % d - except KeyError, key: - raise InterpolationError(key, option, section, rawval) + value = rawval # Make it a pretty variable name + while 1: # Loop through this until it's done + if not string.find(value, "%("): + try: + value = value % d + except KeyError, key: + raise InterpolationError(key, option, section, rawval) + else: + return value + def __get(self, section, conv, option): return conv(self.get(section, option)) -- cgit v0.12