mirror of
https://github.com/python/cpython.git
synced 2025-07-28 13:44:43 +00:00

Specifically, instead of raising a ValueError when there is a single tick in the parameter, simply return that the entire string unquoted, with None for both the charset and the language. Also, if there are more than 2 ticks in the parameter, interpret the first three parts as the standard RFC 2231 parts, then the rest of the parts as the encoded string. Test cases added. Original fewer-than-3-parts fix by Tokio Kikuchi. Resolves SF bug # 1218081. I will back port the fix and tests to Python 2.4 (email 3.0) and Python 2.3 (email 2.5). Also, bump the version number to email 4.0.1, removing the 'alpha' moniker.
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.1'
|
||
|
||
__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)
|