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