| 1 # Copyright (C) 2001-2006 Python Software Foundation 2 # Author: Barry Warsaw 3 # Contact: email-sig@python.org 4 5 """email package exception classes.""" 6 7 8 class MessageError(Exception): 9 """Base class for errors in the email package.""" 10 11 12 class MessageParseError(MessageError): 13 """Base class for message parsing errors.""" 14 15 16 class HeaderParseError(MessageParseError): 17 """Error while parsing headers.""" 18 19 20 class BoundaryError(MessageParseError): 21 """Couldn't find terminating boundary.""" 22 23 24 class MultipartConversionError(MessageError, TypeError): 25 """Conversion to a multipart is prohibited.""" 26 27 28 class CharsetError(MessageError): 29 """An illegal charset was given.""" 30 31 32 # These are parsing defects which the parser was able to work around. 33 class MessageDefect(ValueError): 34 """Base class for a message defect.""" 35 36 def __init__(self, line=None): 37 if line is not None: 38 super().__init__(line) 39 self.line = line 40 41 class NoBoundaryInMultipartDefect(MessageDefect): 42 """A message claimed to be a multipart but had no boundary parameter.""" 43 44 class StartBoundaryNotFoundDefect(MessageDefect): 45 """The claimed start boundary was never found.""" 46 47 class CloseBoundaryNotFoundDefect(MessageDefect): 48 """A start boundary was found, but not the corresponding close boundary.""" 49 50 class FirstHeaderLineIsContinuationDefect(MessageDefect): 51 """A message had a continuation line as its first header line.""" 52 53 class MisplacedEnvelopeHeaderDefect(MessageDefect): 54 """A 'Unix-from' header was found in the middle of a header block.""" 55 56 class MissingHeaderBodySeparatorDefect(MessageDefect): 57 """Found line with no leading whitespace and no colon before blank line.""" 58 # XXX: backward compatibility, just in case (it was never emitted). 59 MalformedHeaderDefect = MissingHeaderBodySeparatorDefect 60 61 class MultipartInvariantViolationDefect(MessageDefect): 62 """A message claimed to be a multipart but no subparts were found.""" 63 64 class InvalidMultipartContentTransferEncodingDefect(MessageDefect): 65 """An invalid content transfer encoding was set on the multipart itself.""" 66 67 class UndecodableBytesDefect(MessageDefect): 68 """Header contained bytes that could not be decoded""" 69 70 class InvalidBase64PaddingDefect(MessageDefect): 71 """base64 encoded sequence had an incorrect length""" 72 73 class InvalidBase64CharactersDefect(MessageDefect): 74 """base64 encoded sequence had characters not in base64 alphabet""" 75 76 # These errors are specific to header parsing. 77 78 class HeaderDefect(MessageDefect): 79 """Base class for a header defect.""" 80 81 def __init__(self, *args, **kw): 82 super().__init__(*args, **kw) 83 84 class InvalidHeaderDefect(HeaderDefect): 85 """Header is not valid, message gives details.""" 86 87 class HeaderMissingRequiredValue(HeaderDefect): 88 """A header that must have a value had none""" 89 90 class NonPrintableDefect(HeaderDefect): 91 """ASCII characters outside the ascii-printable range found""" 92 93 def __init__(self, non_printables): 94 super().__init__(non_printables) 95 self.non_printables = non_printables 96 97 def __str__(self): 98 return ("the following ASCII non-printables found in header: " 99 "{}".format(self.non_printables)) 100 101 class ObsoleteHeaderDefect(HeaderDefect): 102 """Header uses syntax declared obsolete by RFC 5322""" 103 104 class NonASCIILocalPartDefect(HeaderDefect): 105 """local_part contains non-ASCII characters""" 106 # This defect only occurs during unicode parsing, not when 107 # parsing messages decoded from binary. |