mirror of https://github.com/python/cpython
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:
parent
9f253dc3ff
commit
e6506e753b
|
@ -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,10 +204,16 @@ class ConfigParser:
|
|||
# do the string interpolation
|
||||
if raw:
|
||||
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:
|
||||
return rawval % d
|
||||
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))
|
||||
|
|
Loading…
Reference in New Issue