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.3' 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. 51def 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 60def 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). 72import sys 73 74class 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 112for _name in _LOWERNAMES: 113 importer = LazyImporter(_name.lower()) 114 sys.modules['email.' + _name] = importer 115 setattr(sys.modules['email'], _name, importer) 116 117 118import email.mime 119for _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) 124