Mention Giampolo R's new FTP TLS support in the what's new file
[python.git] / Lib / email / __init__.py
blob8d230fdeb7d0300d7e331b2c58eb54910fd28837
1 # Copyright (C) 2001-2006 Python Software Foundation
2 # Author: Barry Warsaw
3 # Contact: email-sig@python.org
5 """A package for parsing, handling, and generating email messages."""
7 __version__ = '4.0.1'
9 __all__ = [
10 # Old names
11 'base64MIME',
12 'Charset',
13 'Encoders',
14 'Errors',
15 'Generator',
16 'Header',
17 'Iterators',
18 'Message',
19 'MIMEAudio',
20 'MIMEBase',
21 'MIMEImage',
22 'MIMEMessage',
23 'MIMEMultipart',
24 'MIMENonMultipart',
25 'MIMEText',
26 'Parser',
27 'quopriMIME',
28 'Utils',
29 'message_from_string',
30 'message_from_file',
31 # new names
32 'base64mime',
33 'charset',
34 'encoders',
35 'errors',
36 'generator',
37 'header',
38 'iterators',
39 'message',
40 'mime',
41 'parser',
42 'quoprimime',
43 'utils',
48 # Some convenience routines. Don't import Parser and Message as side-effects
49 # of importing email since those cascadingly import most of the rest of the
50 # email package.
51 def message_from_string(s, *args, **kws):
52 """Parse a string into a Message object model.
54 Optional _class and strict are passed to the Parser constructor.
55 """
56 from email.parser import Parser
57 return Parser(*args, **kws).parsestr(s)
60 def message_from_file(fp, *args, **kws):
61 """Read a file and parse its contents into a Message object model.
63 Optional _class and strict are passed to the Parser constructor.
64 """
65 from email.parser import Parser
66 return Parser(*args, **kws).parse(fp)
70 # Lazy loading to provide name mapping from new-style names (PEP 8 compatible
71 # email 4.0 module names), to old-style names (email 3.0 module names).
72 import sys
74 class LazyImporter(object):
75 def __init__(self, module_name):
76 self.__name__ = 'email.' + module_name
78 def __getattr__(self, name):
79 __import__(self.__name__)
80 mod = sys.modules[self.__name__]
81 self.__dict__.update(mod.__dict__)
82 return getattr(mod, name)
85 _LOWERNAMES = [
86 # email.<old name> -> email.<new name is lowercased old name>
87 'Charset',
88 'Encoders',
89 'Errors',
90 'FeedParser',
91 'Generator',
92 'Header',
93 'Iterators',
94 'Message',
95 'Parser',
96 'Utils',
97 'base64MIME',
98 'quopriMIME',
101 _MIMENAMES = [
102 # email.MIME<old name> -> email.mime.<new name is lowercased old name>
103 'Audio',
104 'Base',
105 'Image',
106 'Message',
107 'Multipart',
108 'NonMultipart',
109 'Text',
112 for _name in _LOWERNAMES:
113 importer = LazyImporter(_name.lower())
114 sys.modules['email.' + _name] = importer
115 setattr(sys.modules['email'], _name, importer)
118 import email.mime
119 for _name in _MIMENAMES:
120 importer = LazyImporter('mime.' + _name.lower())
121 sys.modules['email.MIME' + _name] = importer
122 setattr(sys.modules['email'], 'MIME' + _name, importer)
123 setattr(sys.modules['email.mime'], _name, importer)