Mercurial > cpython-lru_cache-weakref
diff Lib/ConfigParser.py @ 63221:eecc018aac3e 2.7
Fix #7113. Patch by Ćukasz Langa.
Changes include using a list of lines instead of patching together using
string interpolation, and a multi-line value test cases.
| author | Brian Curtin <brian.curtin@gmail.com> |
|---|---|
| date | Mon, 26 Jul 2010 02:30:15 +0000 |
| parents | 6e74d3e51d33 |
| children | 473a8068f6c5 |
line wrap: on
line diff
--- a/Lib/ConfigParser.py Sun Jul 25 23:49:57 2010 +0000 +++ b/Lib/ConfigParser.py Mon Jul 26 02:30:15 2010 +0000 @@ -398,12 +398,11 @@ for section in self._sections: fp.write("[%s]\n" % section) for (key, value) in self._sections[section].items(): - if key != "__name__": - if value is None: - fp.write("%s\n" % (key)) - else: - fp.write("%s = %s\n" % - (key, str(value).replace('\n', '\n\t'))) + if key == "__name__": + continue + if value is not None: + key = " = ".join((key, str(value).replace('\n', '\n\t'))) + fp.write("%s\n" % (key)) fp.write("\n") def remove_option(self, section, option): @@ -464,10 +463,10 @@ leading whitespace. Blank lines, lines beginning with a '#', and just about everything else are ignored. """ - cursect = None # None, or a dictionary + cursect = None # None, or a dictionary optname = None lineno = 0 - e = None # None, or an exception + e = None # None, or an exception while True: line = fp.readline() if not line: @@ -483,7 +482,7 @@ if line[0].isspace() and cursect is not None and optname: value = line.strip() if value: - cursect[optname] = "%s\n%s" % (cursect[optname], value) + cursect[optname].append(value) # a section header or option header? else: # is it a section header? @@ -508,6 +507,7 @@ mo = self._optcre.match(line) if mo: optname, vi, optval = mo.group('option', 'vi', 'value') + optname = self.optionxform(optname.rstrip()) # This check is fine because the OPTCRE cannot # match if it would set optval to None if optval is not None: @@ -518,11 +518,13 @@ if pos != -1 and optval[pos-1].isspace(): optval = optval[:pos] optval = optval.strip() - # allow empty values - if optval == '""': - optval = '' - optname = self.optionxform(optname.rstrip()) - cursect[optname] = optval + # allow empty values + if optval == '""': + optval = '' + cursect[optname] = [optval] + else: + # valueless option handling + cursect[optname] = optval else: # a non-fatal parsing error occurred. set up the # exception but keep going. the exception will be @@ -535,6 +537,13 @@ if e: raise e + # join the multi-line values collected while reading + all_sections = [self._defaults] + all_sections.extend(self._sections.values()) + for options in all_sections: + for name, val in options.items(): + if isinstance(val, list): + options[name] = '\n'.join(val) class ConfigParser(RawConfigParser):
