]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Patch by Chris Petrilli (not really tested since I don't know this
authorGuido van Rossum <guido@python.org>
Tue, 26 Jan 1999 19:29:25 +0000 (19:29 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 26 Jan 1999 19:29:25 +0000 (19:29 +0000)
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

index 89e2d851f1b44a2b999e31977c4dea83198d2685..6d8f9565358a0e4a4d1931b2997327ba39942fd0 100644 (file)
@@ -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))