Commit fe21e4d4 authored by Berker Peksag's avatar Berker Peksag

Issue #16324: _charset parameter of MIMEText now also accepts email.charset.Charset instances.

Initial patch by Claude Paroz.
parent 081bbf6b
...@@ -195,7 +195,8 @@ Here are the classes: ...@@ -195,7 +195,8 @@ Here are the classes:
set of the text and is passed as an argument to the set of the text and is passed as an argument to the
:class:`~email.mime.nonmultipart.MIMENonMultipart` constructor; it defaults :class:`~email.mime.nonmultipart.MIMENonMultipart` constructor; it defaults
to ``us-ascii`` if the string contains only ``ascii`` codepoints, and to ``us-ascii`` if the string contains only ``ascii`` codepoints, and
``utf-8`` otherwise. ``utf-8`` otherwise. The *_charset* parameter accepts either a string or a
:class:`~email.charset.Charset` instance.
Unless the *_charset* argument is explicitly set to ``None``, the Unless the *_charset* argument is explicitly set to ``None``, the
MIMEText object created will have both a :mailheader:`Content-Type` header MIMEText object created will have both a :mailheader:`Content-Type` header
...@@ -206,3 +207,6 @@ Here are the classes: ...@@ -206,3 +207,6 @@ Here are the classes:
``Content-Transfer-Encoding`` header, after which a ``set_payload`` call ``Content-Transfer-Encoding`` header, after which a ``set_payload`` call
will automatically encode the new payload (and add a new will automatically encode the new payload (and add a new
:mailheader:`Content-Transfer-Encoding` header). :mailheader:`Content-Transfer-Encoding` header).
.. versionchanged:: 3.5
*_charset* also accepts :class:`~email.charset.Charset` instances.
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
__all__ = ['MIMEText'] __all__ = ['MIMEText']
from email.charset import Charset
from email.mime.nonmultipart import MIMENonMultipart from email.mime.nonmultipart import MIMENonMultipart
...@@ -34,6 +35,8 @@ class MIMEText(MIMENonMultipart): ...@@ -34,6 +35,8 @@ class MIMEText(MIMENonMultipart):
_charset = 'us-ascii' _charset = 'us-ascii'
except UnicodeEncodeError: except UnicodeEncodeError:
_charset = 'utf-8' _charset = 'utf-8'
if isinstance(_charset, Charset):
_charset = str(_charset)
MIMENonMultipart.__init__(self, 'text', _subtype, MIMENonMultipart.__init__(self, 'text', _subtype,
**{'charset': _charset}) **{'charset': _charset})
......
...@@ -1636,6 +1636,10 @@ class TestMIMEText(unittest.TestCase): ...@@ -1636,6 +1636,10 @@ class TestMIMEText(unittest.TestCase):
msg = MIMEText('hello there', _charset='us-ascii') msg = MIMEText('hello there', _charset='us-ascii')
eq(msg.get_charset().input_charset, 'us-ascii') eq(msg.get_charset().input_charset, 'us-ascii')
eq(msg['content-type'], 'text/plain; charset="us-ascii"') eq(msg['content-type'], 'text/plain; charset="us-ascii"')
# Also accept a Charset instance
msg = MIMEText('hello there', _charset=Charset('utf-8'))
eq(msg.get_charset().input_charset, 'utf-8')
eq(msg['content-type'], 'text/plain; charset="utf-8"')
def test_7bit_input(self): def test_7bit_input(self):
eq = self.assertEqual eq = self.assertEqual
......
...@@ -1024,6 +1024,7 @@ Peter Parente ...@@ -1024,6 +1024,7 @@ Peter Parente
Alexandre Parenteau Alexandre Parenteau
Dan Parisien Dan Parisien
William Park William Park
Claude Paroz
Heikki Partanen Heikki Partanen
Harri Pasanen Harri Pasanen
Gaël Pasgrimaud Gaël Pasgrimaud
......
...@@ -10,6 +10,9 @@ Release date: TBA ...@@ -10,6 +10,9 @@ Release date: TBA
Core and Builtins Core and Builtins
----------------- -----------------
- Issue #16324: _charset parameter of MIMEText now also accepts
email.charset.Charset instances. Initial patch by Claude Paroz.
- Issue #1764286: Fix inspect.getsource() to support decorated functions. - Issue #1764286: Fix inspect.getsource() to support decorated functions.
Patch by Claudiu Popa. Patch by Claudiu Popa.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment