]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
SF bug #1403349 solution for email 2.5; some MUAs use the 'file' parameter
authorBarry Warsaw <barry@python.org>
Tue, 17 Jan 2006 04:34:54 +0000 (04:34 +0000)
committerBarry Warsaw <barry@python.org>
Tue, 17 Jan 2006 04:34:54 +0000 (04:34 +0000)
name in the Content-Distribution header, so Message.get_filename() should fall
back to using that.  Will port both to email 3.0 and Python 2.5 trunk.

Also, bump the email package version to 2.5.7 for eventual release.  Of
course, add a test case too.

XXX Need to update the documentation.

Lib/email/Message.py
Lib/email/__init__.py
Lib/email/test/data/msg_41.txt [new file with mode: 0644]
Lib/email/test/test_email.py

index 13963301b85be71f9e319c4533b719fae64edd0a..10c2921ea0a21cc1c05709c0e41bf132f98045f6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2005 Python Software Foundation
+# Copyright (C) 2001-2006 Python Software Foundation
 # Author: barry@python.org (Barry Warsaw)
 
 """Basic message object for the email package object model."""
@@ -718,10 +718,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 = []
         filename = self.get_param('filename', missing, 'content-disposition')
+        if filename is missing:
+            # Some MUAs use a different parameter name
+            filename = self.get_param('name', missing, 'content-disposition')
         if filename is missing:
             return failobj
         if isinstance(filename, TupleType):
index bc829c25cbca5d730fa4cacc09ef099066f66c66..6bd14870cb4285482cdd7d2c78695a0f97eb3c74 100644 (file)
@@ -1,10 +1,9 @@
-# Copyright (C) 2001-2005 Python Software Foundation
+# Copyright (C) 2001-2006 Python Software Foundation
 # Author: barry@python.org (Barry Warsaw)
 
-"""A package for parsing, handling, and generating email messages.
-"""
+"""A package for parsing, handling, and generating email messages."""
 
-__version__ = '2.5.6'
+__version__ = '2.5.7'
 
 __all__ = [
     'base64MIME',
diff --git a/Lib/email/test/data/msg_41.txt b/Lib/email/test/data/msg_41.txt
new file mode 100644 (file)
index 0000000..ae462a6
--- /dev/null
@@ -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--
+
index ad16eab91bb20d7b2771d337eba11d54e51dda85..91cd31494233d8873c8fa8c9cf9b26620bb41446 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2001-2005 Python Software Foundation
+# Copyright (C) 2001-2006 Python Software Foundation
 # email package unit tests
 
 import os
@@ -158,6 +158,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_41.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')