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.
This commit is contained in:
Guido van Rossum 1999-01-26 19:29:25 +00:00
parent 9f253dc3ff
commit e6506e753b
1 changed files with 17 additions and 6 deletions

View File

@ -173,12 +173,14 @@ class ConfigParser:
except IOError: except IOError:
pass 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. """Get an option value for a given section.
All % interpolations are expanded in the return values, based All % interpolations are expanded in the return values, based
on the defaults passed into the constructor, unless the optional 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. The section DEFAULT is special.
""" """
@ -191,6 +193,9 @@ class ConfigParser:
raise NoSectionError(section) raise NoSectionError(section)
d = self.__defaults.copy() d = self.__defaults.copy()
d.update(sectdict) d.update(sectdict)
# Update with the entry specific variables
if vars:
d.update(vars)
option = string.lower(option) option = string.lower(option)
try: try:
rawval = d[option] rawval = d[option]
@ -199,10 +204,16 @@ class ConfigParser:
# do the string interpolation # do the string interpolation
if raw: if raw:
return rawval return rawval
value = rawval # Make it a pretty variable name
while 1: # Loop through this until it's done
if not string.find(value, "%("):
try: try:
return rawval % d value = value % d
except KeyError, key: except KeyError, key:
raise InterpolationError(key, option, section, rawval) raise InterpolationError(key, option, section, rawval)
else:
return value
def __get(self, section, conv, option): def __get(self, section, conv, option):
return conv(self.get(section, option)) return conv(self.get(section, option))