diff --git a/Doc/lib/libcfgparser.tex b/Doc/lib/libcfgparser.tex index c50b456aa05..956de1532a8 100644 --- a/Doc/lib/libcfgparser.tex +++ b/Doc/lib/libcfgparser.tex @@ -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}. diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py index 327f9ea86ff..47243fbcf39 100644 --- a/Lib/ConfigParser.py +++ b/Lib/ConfigParser.py @@ -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