Mercurial > cpython-lru_cache-weakref
diff Lib/ConfigParser.py @ 74545:5ecf650ede7c 2.7
Fixes #13760: picklability of ConfigParser exceptions
| author | Łukasz Langa <lukasz@langa.pl> |
|---|---|
| date | Fri, 20 Jan 2012 17:02:08 +0100 |
| parents | 7d5a37ce42d5 |
| children | 8e091e36fc80 |
line wrap: on
line diff
--- a/Lib/ConfigParser.py Fri Jan 20 11:20:12 2012 +0000 +++ b/Lib/ConfigParser.py Fri Jan 20 17:02:08 2012 +0100 @@ -134,6 +134,9 @@ def __repr__(self): return self.message + def __reduce__(self): + return self.__class__, (self.message,) + __str__ = __repr__ class NoSectionError(Error): @@ -143,6 +146,9 @@ Error.__init__(self, 'No section: %r' % (section,)) self.section = section + def __reduce__(self): + return self.__class__, (self.section,) + class DuplicateSectionError(Error): """Raised when a section is multiply-created.""" @@ -150,6 +156,9 @@ Error.__init__(self, "Section %r already exists" % section) self.section = section + def __reduce__(self): + return self.__class__, (self.section,) + class NoOptionError(Error): """A requested option was not found.""" @@ -159,6 +168,9 @@ self.option = option self.section = section + def __reduce__(self): + return self.__class__, (self.option, self.section) + class InterpolationError(Error): """Base class for interpolation-related exceptions.""" @@ -167,6 +179,9 @@ self.option = option self.section = section + def __reduce__(self): + return self.__class__, (self.option, self.section, self.message) + class InterpolationMissingOptionError(InterpolationError): """A string substitution required a setting which was not available.""" @@ -179,6 +194,11 @@ % (section, option, reference, rawval)) InterpolationError.__init__(self, option, section, msg) self.reference = reference + self._rawval = rawval + + def __reduce__(self): + return self.__class__, (self.option, self.section, self._rawval, + self.reference) class InterpolationSyntaxError(InterpolationError): """Raised when the source text into which substitutions are made @@ -194,19 +214,28 @@ "\trawval : %s\n" % (section, option, rawval)) InterpolationError.__init__(self, option, section, msg) + self._rawval = rawval + + def __reduce__(self): + return self.__class__, (self.option, self.section, self._rawval) class ParsingError(Error): """Raised when a configuration file does not follow legal syntax.""" - def __init__(self, filename): + def __init__(self, filename, _errors=[]): Error.__init__(self, 'File contains parsing errors: %s' % filename) self.filename = filename self.errors = [] + for lineno, line in _errors: + self.append(lineno, line) def append(self, lineno, line): self.errors.append((lineno, line)) self.message += '\n\t[line %2d]: %s' % (lineno, line) + def __reduce__(self): + return self.__class__, (self.filename, self.errors) + class MissingSectionHeaderError(ParsingError): """Raised when a key-value pair is found before any section header.""" @@ -219,6 +248,9 @@ self.lineno = lineno self.line = line + def __reduce__(self): + return self.__class__, (self.filename, self.lineno, self.line) + class RawConfigParser: def __init__(self, defaults=None, dict_type=_default_dict,
