__init__.py 2.79 KB
Newer Older
1
# Copyright (C) 2001-2006 Python Software Foundation
2 3
# Author: Barry Warsaw
# Contact: email-sig@python.org
4

5
"""A package for parsing, handling, and generating email messages."""
6

7
__version__ = '4.0.1'
8

Barry Warsaw's avatar
Barry Warsaw committed
9
__all__ = [
10
    # Old names
Barry Warsaw's avatar
Barry Warsaw committed
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
    'base64MIME',
    'Charset',
    'Encoders',
    'Errors',
    'Generator',
    'Header',
    'Iterators',
    'Message',
    'MIMEAudio',
    'MIMEBase',
    'MIMEImage',
    'MIMEMessage',
    'MIMEMultipart',
    'MIMENonMultipart',
    'MIMEText',
    'Parser',
    'quopriMIME',
    'Utils',
    'message_from_string',
    'message_from_file',
31 32 33 34 35 36 37 38 39 40 41 42 43
    # new names
    'base64mime',
    'charset',
    'encoders',
    'errors',
    'generator',
    'header',
    'iterators',
    'message',
    'mime',
    'parser',
    'quoprimime',
    'utils',
Barry Warsaw's avatar
Barry Warsaw committed
44
    ]
45

46

47

Barry Warsaw's avatar
Barry Warsaw committed
48 49 50
# Some convenience routines.  Don't import Parser and Message as side-effects
# of importing email since those cascadingly import most of the rest of the
# email package.
51
def message_from_string(s, *args, **kws):
52 53 54 55
    """Parse a string into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    """
56
    from email.parser import Parser
57
    return Parser(*args, **kws).parsestr(s)
58

59

60
def message_from_file(fp, *args, **kws):
61 62 63 64
    """Read a file and parse its contents into a Message object model.

    Optional _class and strict are passed to the Parser constructor.
    """
65
    from email.parser import Parser
66
    return Parser(*args, **kws).parse(fp)
67 68 69 70 71 72 73 74



# Lazy loading to provide name mapping from new-style names (PEP 8 compatible
# email 4.0 module names), to old-style names (email 3.0 module names).
import sys

class LazyImporter(object):
Anthony Baxter's avatar
Anthony Baxter committed
75 76 77 78 79 80 81 82
    def __init__(self, module_name):
        self.__name__ = 'email.' + module_name

    def __getattr__(self, name):
        __import__(self.__name__)
        mod = sys.modules[self.__name__]
        self.__dict__.update(mod.__dict__)
        return getattr(mod, name)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123


_LOWERNAMES = [
    # email.<old name> -> email.<new name is lowercased old name>
    'Charset',
    'Encoders',
    'Errors',
    'FeedParser',
    'Generator',
    'Header',
    'Iterators',
    'Message',
    'Parser',
    'Utils',
    'base64MIME',
    'quopriMIME',
    ]

_MIMENAMES = [
    # email.MIME<old name> -> email.mime.<new name is lowercased old name>
    'Audio',
    'Base',
    'Image',
    'Message',
    'Multipart',
    'NonMultipart',
    'Text',
    ]

for _name in _LOWERNAMES:
    importer = LazyImporter(_name.lower())
    sys.modules['email.' + _name] = importer
    setattr(sys.modules['email'], _name, importer)


import email.mime
for _name in _MIMENAMES:
    importer = LazyImporter('mime.' + _name.lower())
    sys.modules['email.MIME' + _name] = importer
    setattr(sys.modules['email'], 'MIME' + _name, importer)
    setattr(sys.modules['email.mime'], _name, importer)