summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Doc/library/email.contentmanager.rst8
-rw-r--r--Lib/email/message.py6
-rw-r--r--Lib/test/test_email/test_message.py10
-rw-r--r--Misc/NEWS3
4 files changed, 17 insertions, 10 deletions
diff --git a/Doc/library/email.contentmanager.rst b/Doc/library/email.contentmanager.rst
index 8f0bfdb..8f33a14 100644
--- a/Doc/library/email.contentmanager.rst
+++ b/Doc/library/email.contentmanager.rst
@@ -70,11 +70,15 @@ this module.
the following methods:
- .. attribute:: is_attachment
+ .. method:: is_attachment
- Set to ``True`` if there is a :mailheader:`Content-Disposition` header
+ Return ``True`` if there is a :mailheader:`Content-Disposition` header
and its (case insensitive) value is ``attachment``, ``False`` otherwise.
+ .. versionchanged:: 3.4.2
+ is_attachment is now a method instead of a property, for consistency
+ with :meth:`~email.message.Message.is_multipart`.
+
.. method:: get_body(preferencelist=('related', 'html', 'plain'))
diff --git a/Lib/email/message.py b/Lib/email/message.py
index 124071d..727cd1e 100644
--- a/Lib/email/message.py
+++ b/Lib/email/message.py
@@ -9,6 +9,7 @@ __all__ = ['Message']
import re
import uu
import quopri
+import warnings
from io import BytesIO, StringIO
# Intrapackage imports
@@ -938,13 +939,12 @@ class MIMEPart(Message):
policy = default
Message.__init__(self, policy)
- @property
def is_attachment(self):
c_d = self.get('content-disposition')
return False if c_d is None else c_d.content_disposition == 'attachment'
def _find_body(self, part, preferencelist):
- if part.is_attachment:
+ if part.is_attachment():
return
maintype, subtype = part.get_content_type().split('/')
if maintype == 'text':
@@ -1037,7 +1037,7 @@ class MIMEPart(Message):
for part in parts:
maintype, subtype = part.get_content_type().split('/')
if ((maintype, subtype) in self._body_types and
- not part.is_attachment and subtype not in seen):
+ not part.is_attachment() and subtype not in seen):
seen.append(subtype)
continue
yield part
diff --git a/Lib/test/test_email/test_message.py b/Lib/test/test_email/test_message.py
index 51ddf36..d78049e 100644
--- a/Lib/test/test_email/test_message.py
+++ b/Lib/test/test_email/test_message.py
@@ -722,15 +722,15 @@ class TestEmailMessageBase:
def test_is_attachment(self):
m = self._make_message()
- self.assertFalse(m.is_attachment)
+ self.assertFalse(m.is_attachment())
m['Content-Disposition'] = 'inline'
- self.assertFalse(m.is_attachment)
+ self.assertFalse(m.is_attachment())
m.replace_header('Content-Disposition', 'attachment')
- self.assertTrue(m.is_attachment)
+ self.assertTrue(m.is_attachment())
m.replace_header('Content-Disposition', 'AtTachMent')
- self.assertTrue(m.is_attachment)
+ self.assertTrue(m.is_attachment())
m.set_param('filename', 'abc.png', 'Content-Disposition')
- self.assertTrue(m.is_attachment)
+ self.assertTrue(m.is_attachment())
class TestEmailMessage(TestEmailMessageBase, TestEmailBase):
diff --git a/Misc/NEWS b/Misc/NEWS
index e4edc4c..da74650 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -137,6 +137,9 @@ Core and Builtins
Library
-------
+- Issue #21091: Fix API bug: email.message.EmailMessage.is_attachment is now
+ a method.
+
- Issue #21079: Fix email.message.EmailMessage.is_attachment to return the
correct result when the header has parameters as well as a value.