|
1 # Copyright (C) 2001-2006 Python Software Foundation |
|
2 # Author: Barry Warsaw |
|
3 # Contact: email-sig@python.org |
|
4 |
|
5 """A package for parsing, handling, and generating email messages.""" |
|
6 |
|
7 __version__ = '4.0.1' |
|
8 |
|
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', |
|
44 ] |
|
45 |
|
46 |
|
47 |
|
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. |
|
53 |
|
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) |
|
58 |
|
59 |
|
60 def message_from_file(fp, *args, **kws): |
|
61 """Read a file and parse its contents into a Message object model. |
|
62 |
|
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) |
|
67 |
|
68 |
|
69 |
|
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 |
|
73 |
|
74 class LazyImporter(object): |
|
75 def __init__(self, module_name): |
|
76 self.__name__ = 'email.' + module_name |
|
77 |
|
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) |
|
83 |
|
84 |
|
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', |
|
99 ] |
|
100 |
|
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', |
|
110 ] |
|
111 |
|
112 for _name in _LOWERNAMES: |
|
113 importer = LazyImporter(_name.lower()) |
|
114 sys.modules['email.' + _name] = importer |
|
115 setattr(sys.modules['email'], _name, importer) |
|
116 |
|
117 |
|
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) |