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:
|
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))
|
||||||
|
|
Loading…
Reference in New Issue