mirror of
https://github.com/python/cpython.git
synced 2025-08-13 21:38:57 +00:00

In 2.5 the email version was bumped to 4.0.2 just before release but after the maintenance branch was set up. The bump was not backported to trunk, and 2.6 went out the door with a version number of 4.0.1. I bumped this to 4.0.2 because of a behavior change, but that makes it look the same as 2.5. So bump it again to 4.0.3.
123 lines
2.8 KiB
Python
123 lines
2.8 KiB
Python
# Copyright (C) 2001-2006 Python Software Foundation
|
||
# Author: Barry Warsaw
|
||
# Contact: email-sig@python.org
|
||
|
||
"""A package for parsing, handling, and generating email messages."""
|
||
|
||
__version__ = '4.0.3'
|
||
|
||
__all__ = [
|
||
# Old names
|
||
'base64MIME',
|
||
'Charset',
|
||
'Encoders',
|
||
'Errors',
|
||
'Generator',
|
||
'Header',
|
||
'Iterators',
|
||
'Message',
|
||
'MIMEAudio',
|
||
'MIMEBase',
|
||
'MIMEImage',
|
||
'MIMEMessage',
|
||
'MIMEMultipart',
|
||
'MIMENonMultipart',
|
||
'MIMEText',
|
||
'Parser',
|
||
'quopriMIME',
|
||
'Utils',
|
||
'message_from_string',
|
||
'message_from_file',
|
||
# new names
|
||
'base64mime',
|
||
'charset',
|
||
'encoders',
|
||
'errors',
|
||
'generator',
|
||
'header',
|
||
'iterators',
|
||
'message',
|
||
'mime',
|
||
'parser',
|
||
'quoprimime',
|
||
'utils',
|
||
]
|
||
|
||
|
||
|
||
# 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.
|
||
def message_from_string(s, *args, **kws):
|
||
"""Parse a string into a Message object model.
|
||
|
||
Optional _class and strict are passed to the Parser constructor.
|
||
"""
|
||
from email.parser import Parser
|
||
return Parser(*args, **kws).parsestr(s)
|
||
|
||
|
||
def message_from_file(fp, *args, **kws):
|
||
"""Read a file and parse its contents into a Message object model.
|
||
|
||
Optional _class and strict are passed to the Parser constructor.
|
||
"""
|
||
from email.parser import Parser
|
||
return Parser(*args, **kws).parse(fp)
|
||
|
||
|
||
|
||
# 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):
|
||
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)
|
||
|
||
|
||
_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)
|