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