summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2006-01-17 04:49:07 (GMT)
committerBarry Warsaw <barry@python.org>2006-01-17 04:49:07 (GMT)
commita0f28efcd1819d7baccd1a212a21ffb1af5558bd (patch)
treeb025f080749070ab78d6ab85e6bc5f47398e46e2
parent989b69a519b1f4a765310b705b30ab0449153591 (diff)
downloadcpython-a0f28efcd1819d7baccd1a212a21ffb1af5558bd.zip
cpython-a0f28efcd1819d7baccd1a212a21ffb1af5558bd.tar.gz
cpython-a0f28efcd1819d7baccd1a212a21ffb1af5558bd.tar.bz2
Ported 42075 from release23-maint branch.
SF bug #1403349 solution for email 3.0; some MUAs use the 'file' parameter name in the Content-Distribution header, so Message.get_filename() should fall back to using that. Will port to the Python 2.5 trunk. Also, bump the email package version to 3.0.1 for eventual release. Of course, add a test case too. XXX Need to update the documentation.
-rw-r--r--Lib/email/Message.py8
-rw-r--r--Lib/email/__init__.py4
-rw-r--r--Lib/email/test/data/msg_44.txt35
-rw-r--r--Lib/email/test/test_email.py9
4 files changed, 51 insertions, 5 deletions
diff --git a/Lib/email/Message.py b/Lib/email/Message.py
index b466f39..88fd786 100644
--- a/Lib/email/Message.py
+++ b/Lib/email/Message.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2004 Python Software Foundation
+# Copyright (C) 2001-2006 Python Software Foundation
# Author: Barry Warsaw
# Contact: email-sig@python.org
@@ -701,11 +701,15 @@ class Message:
"""Return the filename associated with the payload if present.
The filename is extracted from the Content-Disposition header's
- `filename' parameter, and it is unquoted.
+ `filename' parameter, and it is unquoted. If that header is missing
+ the `filename' parameter, this method falls back to looking for the
+ `name' parameter.
"""
missing = object()
filename = self.get_param('filename', missing, 'content-disposition')
if filename is missing:
+ filename = self.get_param('name', missing, 'content-disposition')
+ if filename is missing:
return failobj
return Utils.collapse_rfc2231_value(filename).strip()
diff --git a/Lib/email/__init__.py b/Lib/email/__init__.py
index e622b3f..e5c0e2e 100644
--- a/Lib/email/__init__.py
+++ b/Lib/email/__init__.py
@@ -1,10 +1,10 @@
-# Copyright (C) 2001-2004 Python Software Foundation
+# 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__ = '3.0+'
+__version__ = '3.0.1'
__all__ = [
'base64MIME',
diff --git a/Lib/email/test/data/msg_44.txt b/Lib/email/test/data/msg_44.txt
new file mode 100644
index 0000000..ae462a6
--- /dev/null
+++ b/Lib/email/test/data/msg_44.txt
@@ -0,0 +1,35 @@
+Return-Path: <barry@python.org>
+Delivered-To: barry@python.org
+Received: by mail.python.org (Postfix, from userid 889)
+ id C2BF0D37C6; Tue, 11 Sep 2001 00:05:05 -0400 (EDT)
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="h90VIIIKmx"
+Content-Transfer-Encoding: 7bit
+Message-ID: <15261.36209.358846.118674@anthem.python.org>
+From: barry@python.org (Barry A. Warsaw)
+To: barry@python.org
+Subject: a simple multipart
+Date: Tue, 11 Sep 2001 00:05:05 -0400
+X-Mailer: VM 6.95 under 21.4 (patch 4) "Artificial Intelligence" XEmacs Lucid
+X-Attribution: BAW
+X-Oblique-Strategy: Make a door into a window
+
+
+--h90VIIIKmx
+Content-Type: text/plain
+Content-Disposition: inline; name="msg.txt"
+Content-Transfer-Encoding: 7bit
+
+a simple kind of mirror
+to reflect upon our own
+
+--h90VIIIKmx
+Content-Type: text/plain
+Content-Disposition: inline; name="msg.txt"
+Content-Transfer-Encoding: 7bit
+
+a simple kind of mirror
+to reflect upon our own
+
+--h90VIIIKmx--
+
diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py
index 2f184fd..c78e2fd 100644
--- a/Lib/email/test/test_email.py
+++ b/Lib/email/test/test_email.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2004 Python Software Foundation
+# Copyright (C) 2001-2006 Python Software Foundation
# Contact: email-sig@python.org
# email package unit tests
@@ -147,6 +147,13 @@ class TestMessageAPI(TestEmailBase):
subpart = msg.get_payload(1)
eq(subpart.get_filename(), 'dingusfish.gif')
+ def test_get_filename_with_name_parameter(self):
+ eq = self.assertEqual
+
+ msg = self._msgobj('msg_44.txt')
+ filenames = [p.get_filename() for p in msg.get_payload()]
+ eq(filenames, ['msg.txt', 'msg.txt'])
+
def test_get_boundary(self):
eq = self.assertEqual
msg = self._msgobj('msg_07.txt')