diff options
author | Jelmer Vernooij <jelmer@samba.org> | 2015-05-23 17:26:24 +0000 |
---|---|---|
committer | Jelmer Vernooij <jelmer@jelmer.uk> | 2015-12-20 01:21:55 +0000 |
commit | b4d10b102d54b8c8e429ac3025f857bb067b02d4 (patch) | |
tree | 8f0320cfbec22f5e48845c627060f67d9eaf5122 | |
parent | 1133ad56b96174e2b9e467d83925a2a1ad72af01 (diff) | |
download | python-fastimport-git-b4d10b102d54b8c8e429ac3025f857bb067b02d4.tar.gz |
Simplify handling of errors.
-rw-r--r-- | fastimport/errors.py | 88 |
1 files changed, 16 insertions, 72 deletions
diff --git a/fastimport/errors.py b/fastimport/errors.py index afb78bc..7555628 100644 --- a/fastimport/errors.py +++ b/fastimport/errors.py @@ -20,67 +20,11 @@ _LOCATION_FMT = "line %(lineno)d: " # ImportError is heavily based on BzrError -class ImportError(StandardError): +class ImportError(Exception): """The base exception class for all import processing exceptions.""" - _fmt = "Unknown Import Error" - - def __init__(self, msg=None, **kwds): - StandardError.__init__(self) - if msg is not None: - self._preformatted_string = msg - else: - self._preformatted_string = None - for key, value in kwds.items(): - setattr(self, key, value) - - def _format(self): - s = getattr(self, '_preformatted_string', None) - if s is not None: - # contains a preformatted message - return s - try: - fmt = self._fmt - if fmt: - d = dict(self.__dict__) - s = fmt % d - # __str__() should always return a 'str' object - # never a 'unicode' object. - return s - except (AttributeError, TypeError, NameError, ValueError, KeyError), e: - return 'Unprintable exception %s: dict=%r, fmt=%r, error=%r' \ - % (self.__class__.__name__, - self.__dict__, - getattr(self, '_fmt', None), - e) - - def __unicode__(self): - u = self._format() - if isinstance(u, str): - # Try decoding the str using the default encoding. - u = unicode(u) - elif not isinstance(u, unicode): - # Try to make a unicode object from it, because __unicode__ must - # return a unicode object. - u = unicode(u) - return u - - def __str__(self): - s = self._format() - if isinstance(s, unicode): - s = s.encode('utf8') - else: - # __str__ must return a str. - s = str(s) - return s - - def __repr__(self): - return '%s(%s)' % (self.__class__.__name__, str(self)) - - def __eq__(self, other): - if self.__class__ is not other.__class__: - return NotImplemented - return self.__dict__ == other.__dict__ + def __init__(self): + super(ImportError, self).__init__(self._fmt % self.__dict__) class ParsingError(ImportError): @@ -89,8 +33,8 @@ class ParsingError(ImportError): _fmt = _LOCATION_FMT + "Unknown Import Parsing Error" def __init__(self, lineno): - ImportError.__init__(self) self.lineno = lineno + ImportError.__init__(self) class MissingBytes(ParsingError): @@ -100,9 +44,9 @@ class MissingBytes(ParsingError): " found %(found)d") def __init__(self, lineno, expected, found): - ParsingError.__init__(self, lineno) self.expected = expected self.found = found + ParsingError.__init__(self, lineno) class MissingTerminator(ParsingError): @@ -112,8 +56,8 @@ class MissingTerminator(ParsingError): "Unexpected EOF - expected '%(terminator)s' terminator") def __init__(self, lineno, terminator): - ParsingError.__init__(self, lineno) self.terminator = terminator + ParsingError.__init__(self, lineno) class InvalidCommand(ParsingError): @@ -122,8 +66,8 @@ class InvalidCommand(ParsingError): _fmt = (_LOCATION_FMT + "Invalid command '%(cmd)s'") def __init__(self, lineno, cmd): - ParsingError.__init__(self, lineno) self.cmd = cmd + ParsingError.__init__(self, lineno) class MissingSection(ParsingError): @@ -132,9 +76,9 @@ class MissingSection(ParsingError): _fmt = (_LOCATION_FMT + "Command %(cmd)s is missing section %(section)s") def __init__(self, lineno, cmd, section): - ParsingError.__init__(self, lineno) self.cmd = cmd self.section = section + ParsingError.__init__(self, lineno) class BadFormat(ParsingError): @@ -144,10 +88,10 @@ class BadFormat(ParsingError): "command %(cmd)s: found '%(text)s'") def __init__(self, lineno, cmd, section, text): - ParsingError.__init__(self, lineno) self.cmd = cmd self.section = section self.text = text + ParsingError.__init__(self, lineno) class InvalidTimezone(ParsingError): @@ -157,12 +101,12 @@ class InvalidTimezone(ParsingError): "Timezone %(timezone)r could not be converted.%(reason)s") def __init__(self, lineno, timezone, reason=None): - ParsingError.__init__(self, lineno) self.timezone = timezone if reason: self.reason = ' ' + reason else: self.reason = '' + ParsingError.__init__(self, lineno) class PrematureEndOfStream(ParsingError): @@ -180,8 +124,8 @@ class UnknownDateFormat(ImportError): _fmt = ("Unknown date format '%(format)s'") def __init__(self, format): - ImportError.__init__(self) self.format = format + ImportError.__init__(self) class MissingHandler(ImportError): @@ -190,8 +134,8 @@ class MissingHandler(ImportError): _fmt = ("Missing handler for command %(cmd)s") def __init__(self, cmd): - ImportError.__init__(self) self.cmd = cmd + ImportError.__init__(self) class UnknownParameter(ImportError): @@ -200,9 +144,9 @@ class UnknownParameter(ImportError): _fmt = ("Unknown parameter - '%(param)s' not in %(knowns)s") def __init__(self, param, knowns): - ImportError.__init__(self) self.param = param self.knowns = knowns + ImportError.__init__(self) class BadRepositorySize(ImportError): @@ -212,9 +156,9 @@ class BadRepositorySize(ImportError): "%(expected)d expected") def __init__(self, expected, found): - ImportError.__init__(self) self.expected = expected self.found = found + ImportError.__init__(self) class BadRestart(ImportError): @@ -224,8 +168,8 @@ class BadRestart(ImportError): "but matching revision-id is unknown") def __init__(self, commit_id): - ImportError.__init__(self) self.commit_id = commit_id + ImportError.__init__(self) class UnknownFeature(ImportError): @@ -235,5 +179,5 @@ class UnknownFeature(ImportError): "an earlier data format") def __init__(self, feature): - ImportError.__init__(self) self.feature = feature + ImportError.__init__(self) |