]> granicus.if.org Git - python/commitdiff
items(): New method, provided by Gustavo Niemeyer in SF bug #545096.
authorFred Drake <fdrake@acm.org>
Fri, 27 Sep 2002 15:49:56 +0000 (15:49 +0000)
committerFred Drake <fdrake@acm.org>
Fri, 27 Sep 2002 15:49:56 +0000 (15:49 +0000)
Doc/lib/libcfgparser.tex
Lib/ConfigParser.py

index c50b456aa05849f5960786c99da2d3fd79e3b8b5..956de1532a8cd30431b657e7dcbd18e24fc22e23 100644 (file)
@@ -189,6 +189,13 @@ values are checked in a case-insensitive manner.  Any other value will
 cause it to raise \exception{ValueError}.
 \end{methoddesc}
 
+\begin{methoddesc}{items}{section\optional{, raw\optional{, vars}}}
+Create a generator which will return a tuple \code{(name, value)} for
+each option in the given \var{section}. Optional arguments have the
+same meaning as for the \code{get()} method.
+\versionadded{2.3}
+\end{methoddesc}
+
 \begin{methoddesc}{set}{section, option, value}
 If the given section exists, set the given option to the specified value;
 otherwise raise \exception{NoSectionError}.
index 327f9ea86ffc1876df317b691910fe2e23f85103..47243fbcf39562660c09229c8c653fd28cc284ee 100644 (file)
@@ -70,6 +70,10 @@ ConfigParser -- responsible for for parsing a list of
         insensitively defined as 0, false, no, off for 0, and 1, true,
         yes, on for 1).  Returns 0 or 1.
 
+    items(section, raw=0, vars=None)
+        return a list of tuples with (name, value) for each option
+        in the section.
+
     remove_section(section)
         remove the given file section and all its options
 
@@ -278,6 +282,35 @@ class ConfigParser:
             return value
         return self._interpolate(section, option, value, d)
 
+    def items(self, section, raw=0, vars=None):
+        """Return a list of tuples with (name, value) for each option
+        in the section.
+
+        All % interpolations are expanded in the return values, based on the
+        defaults passed into the constructor, unless the optional argument
+        `raw' is true.  Additional substitutions may be provided using the
+        `vars' argument, which must be a dictionary whose contents overrides
+        any pre-existing defaults.
+
+        The section DEFAULT is special.
+        """
+        d = self.__defaults.copy()
+        try:
+            d.update(self.__sections[section])
+        except KeyError:
+            if section != DEFAULTSECT:
+                raise NoSectionError(section)
+        # Update with the entry specific variables
+        if vars:
+            d.update(vars)
+        if raw:
+            for option in self.options(section):
+                yield (option, d[option])
+        else:
+            for option in self.options(section):
+                yield (option,
+                       self._interpolate(section, option, d[option], d))
+
     def _interpolate(self, section, option, rawval, vars):
         # do the string interpolation
         value = rawval