]> granicus.if.org Git - python/commitdiff
Bug 1277: make Maildir use the user-provided factory instead of hard-wiring MaildirMe...
authorAndrew M. Kuchling <amk@amk.ca>
Sat, 19 Jan 2008 20:12:04 +0000 (20:12 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Sat, 19 Jan 2008 20:12:04 +0000 (20:12 +0000)
2.5.2 bugfix candidate.

Lib/mailbox.py
Lib/test/test_mailbox.py

index 3f7a12a6e67318773671daf38db1c0ad2ef3f7fb..e3e9cbb3422707d5f313634b8393182c0d666828 100755 (executable)
@@ -315,7 +315,10 @@ class Maildir(Mailbox):
         subpath = self._lookup(key)
         f = open(os.path.join(self._path, subpath), 'r')
         try:
-            msg = MaildirMessage(f)
+            if self._factory:
+                msg = self._factory(f)
+            else:
+                msg = MaildirMessage(f)
         finally:
             f.close()
         subdir, name = os.path.split(subpath)
index 684aeb21c316664546c90af7f07622e7845ce30b..ff214cef9814bb9d9b284c0ae42198697f2f8be0 100644 (file)
@@ -509,6 +509,20 @@ class TestMaildir(TestMailbox):
         self.assert_(msg_returned.get_flags() == 'S')
         self.assert_(msg_returned.get_payload() == '3')
 
+    def test_consistent_factory(self):
+        # Add a message.
+        msg = mailbox.MaildirMessage(self._template % 0)
+        msg.set_subdir('cur')
+        msg.set_flags('RF')
+        key = self._box.add(msg)
+
+        # Create new mailbox with
+        class FakeMessage(mailbox.MaildirMessage):
+            pass
+        box = mailbox.Maildir(self._path, factory=FakeMessage)
+        msg2 = box.get_message(key)
+        self.assert_(isinstance(msg2, FakeMessage))
+
     def test_initialize_new(self):
         # Initialize a non-existent mailbox
         self.tearDown()