mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
#27331: add policy keyword argument to all MIME subclasses.
Patch by Berker Peksag.
This commit is contained in:
parent
3788b85628
commit
56b1f1b4d5
11 changed files with 117 additions and 20 deletions
|
@ -14,7 +14,7 @@ class MIMEApplication(MIMENonMultipart):
|
|||
"""Class for generating application/* MIME documents."""
|
||||
|
||||
def __init__(self, _data, _subtype='octet-stream',
|
||||
_encoder=encoders.encode_base64, **_params):
|
||||
_encoder=encoders.encode_base64, *, policy=None, **_params):
|
||||
"""Create an application/* type MIME document.
|
||||
|
||||
_data is a string containing the raw application data.
|
||||
|
@ -31,6 +31,7 @@ class MIMEApplication(MIMENonMultipart):
|
|||
"""
|
||||
if _subtype is None:
|
||||
raise TypeError('Invalid application MIME subtype')
|
||||
MIMENonMultipart.__init__(self, 'application', _subtype, **_params)
|
||||
MIMENonMultipart.__init__(self, 'application', _subtype, policy=policy,
|
||||
**_params)
|
||||
self.set_payload(_data)
|
||||
_encoder(self)
|
||||
|
|
|
@ -43,7 +43,7 @@ class MIMEAudio(MIMENonMultipart):
|
|||
"""Class for generating audio/* MIME documents."""
|
||||
|
||||
def __init__(self, _audiodata, _subtype=None,
|
||||
_encoder=encoders.encode_base64, **_params):
|
||||
_encoder=encoders.encode_base64, *, policy=None, **_params):
|
||||
"""Create an audio/* type MIME document.
|
||||
|
||||
_audiodata is a string containing the raw audio data. If this data
|
||||
|
@ -68,6 +68,7 @@ class MIMEAudio(MIMENonMultipart):
|
|||
_subtype = _whatsnd(_audiodata)
|
||||
if _subtype is None:
|
||||
raise TypeError('Could not find audio MIME subtype')
|
||||
MIMENonMultipart.__init__(self, 'audio', _subtype, **_params)
|
||||
MIMENonMultipart.__init__(self, 'audio', _subtype, policy=policy,
|
||||
**_params)
|
||||
self.set_payload(_audiodata)
|
||||
_encoder(self)
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
|
||||
__all__ = ['MIMEBase']
|
||||
|
||||
import email.policy
|
||||
|
||||
from email import message
|
||||
|
||||
|
||||
|
@ -13,14 +15,16 @@ from email import message
|
|||
class MIMEBase(message.Message):
|
||||
"""Base class for MIME specializations."""
|
||||
|
||||
def __init__(self, _maintype, _subtype, **_params):
|
||||
def __init__(self, _maintype, _subtype, *, policy=None, **_params):
|
||||
"""This constructor adds a Content-Type: and a MIME-Version: header.
|
||||
|
||||
The Content-Type: header is taken from the _maintype and _subtype
|
||||
arguments. Additional parameters for this header are taken from the
|
||||
keyword arguments.
|
||||
"""
|
||||
message.Message.__init__(self)
|
||||
if policy is None:
|
||||
policy = email.policy.compat32
|
||||
message.Message.__init__(self, policy=policy)
|
||||
ctype = '%s/%s' % (_maintype, _subtype)
|
||||
self.add_header('Content-Type', ctype, **_params)
|
||||
self['MIME-Version'] = '1.0'
|
||||
|
|
|
@ -17,7 +17,7 @@ class MIMEImage(MIMENonMultipart):
|
|||
"""Class for generating image/* type MIME documents."""
|
||||
|
||||
def __init__(self, _imagedata, _subtype=None,
|
||||
_encoder=encoders.encode_base64, **_params):
|
||||
_encoder=encoders.encode_base64, *, policy=None, **_params):
|
||||
"""Create an image/* type MIME document.
|
||||
|
||||
_imagedata is a string containing the raw image data. If this data
|
||||
|
@ -41,6 +41,7 @@ class MIMEImage(MIMENonMultipart):
|
|||
_subtype = imghdr.what(None, _imagedata)
|
||||
if _subtype is None:
|
||||
raise TypeError('Could not guess image MIME subtype')
|
||||
MIMENonMultipart.__init__(self, 'image', _subtype, **_params)
|
||||
MIMENonMultipart.__init__(self, 'image', _subtype, policy=policy,
|
||||
**_params)
|
||||
self.set_payload(_imagedata)
|
||||
_encoder(self)
|
||||
|
|
|
@ -14,7 +14,7 @@ from email.mime.nonmultipart import MIMENonMultipart
|
|||
class MIMEMessage(MIMENonMultipart):
|
||||
"""Class representing message/* MIME documents."""
|
||||
|
||||
def __init__(self, _msg, _subtype='rfc822'):
|
||||
def __init__(self, _msg, _subtype='rfc822', *, policy=None):
|
||||
"""Create a message/* type MIME document.
|
||||
|
||||
_msg is a message object and must be an instance of Message, or a
|
||||
|
@ -24,7 +24,7 @@ class MIMEMessage(MIMENonMultipart):
|
|||
default is "rfc822" (this is defined by the MIME standard, even though
|
||||
the term "rfc822" is technically outdated by RFC 2822).
|
||||
"""
|
||||
MIMENonMultipart.__init__(self, 'message', _subtype)
|
||||
MIMENonMultipart.__init__(self, 'message', _subtype, policy=policy)
|
||||
if not isinstance(_msg, message.Message):
|
||||
raise TypeError('Argument is not an instance of Message')
|
||||
# It's convenient to use this base class method. We need to do it
|
||||
|
|
|
@ -14,6 +14,7 @@ class MIMEMultipart(MIMEBase):
|
|||
"""Base class for MIME multipart/* type messages."""
|
||||
|
||||
def __init__(self, _subtype='mixed', boundary=None, _subparts=None,
|
||||
*, policy=None,
|
||||
**_params):
|
||||
"""Creates a multipart/* type message.
|
||||
|
||||
|
@ -33,7 +34,7 @@ class MIMEMultipart(MIMEBase):
|
|||
Additional parameters for the Content-Type header are taken from the
|
||||
keyword arguments (or passed into the _params argument).
|
||||
"""
|
||||
MIMEBase.__init__(self, 'multipart', _subtype, **_params)
|
||||
MIMEBase.__init__(self, 'multipart', _subtype, policy=policy, **_params)
|
||||
|
||||
# Initialise _payload to an empty list as the Message superclass's
|
||||
# implementation of is_multipart assumes that _payload is a list for
|
||||
|
|
|
@ -14,7 +14,7 @@ from email.mime.nonmultipart import MIMENonMultipart
|
|||
class MIMEText(MIMENonMultipart):
|
||||
"""Class for generating text/* type MIME documents."""
|
||||
|
||||
def __init__(self, _text, _subtype='plain', _charset=None):
|
||||
def __init__(self, _text, _subtype='plain', _charset=None, *, policy=None):
|
||||
"""Create a text/* type MIME document.
|
||||
|
||||
_text is the string for this message object.
|
||||
|
@ -38,7 +38,7 @@ class MIMEText(MIMENonMultipart):
|
|||
if isinstance(_charset, Charset):
|
||||
_charset = str(_charset)
|
||||
|
||||
MIMENonMultipart.__init__(self, 'text', _subtype,
|
||||
MIMENonMultipart.__init__(self, 'text', _subtype, policy=policy,
|
||||
**{'charset': _charset})
|
||||
|
||||
self.set_payload(_text, _charset)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue