diff options
author | Aurélien Bompard <aurelien@bompard.org> | 2012-12-14 14:51:08 +0100 |
---|---|---|
committer | Aurélien Bompard <aurelien@bompard.org> | 2012-12-14 14:51:08 +0100 |
commit | 6a67f640f1bc4f42b116f505d741e51d1eb64680 (patch) | |
tree | 44a00ce49a846990d2f74e1d249a23f2ca94c60b | |
parent | 8ea86d9987a3142b6e83596d6a0d1df8f6d14af7 (diff) | |
download | kittystore-6a67f640f1bc4f42b116f505d741e51d1eb64680.tar.gz kittystore-6a67f640f1bc4f42b116f505d741e51d1eb64680.tar.xz kittystore-6a67f640f1bc4f42b116f505d741e51d1eb64680.zip |
Split reference detection out of get_ref_and_thread_id
-rw-r--r-- | kittystore/test/test_utils.py | 30 | ||||
-rw-r--r-- | kittystore/utils.py | 26 |
2 files changed, 25 insertions, 31 deletions
diff --git a/kittystore/test/test_utils.py b/kittystore/test/test_utils.py index 8e78d5b..4e3857f 100644 --- a/kittystore/test/test_utils.py +++ b/kittystore/test/test_utils.py @@ -18,19 +18,13 @@ class TestUtils(unittest.TestCase): def test_ref_parsing(self): with open(get_test_file("strange-in-reply-to-header.txt")) as email_file: msg = email.message_from_file(email_file, _class=Message) - store = Mock() - store.get_message_by_id_from_list.return_value = None - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, "200704070053.46646.other.person@example.com") def test_wrong_reply_to_format(self): with open(get_test_file("wrong-in-reply-to-header.txt")) as email_file: msg = email.message_from_file(email_file, _class=Message) - store = Mock() - store.get_message_by_id_from_list.return_value = None - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, None) def test_in_reply_to(self): @@ -39,9 +33,7 @@ class TestUtils(unittest.TestCase): msg["Message-ID"] = "<dummy>" msg["In-Reply-To"] = " <ref-1> " msg.set_payload("Dummy message") - store = Mock() - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, "ref-1") def test_in_reply_to_and_reference(self): @@ -52,9 +44,7 @@ class TestUtils(unittest.TestCase): msg["In-Reply-To"] = " <ref-1> " msg["References"] = " <ref-2> " msg.set_payload("Dummy message") - store = Mock() - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, "ref-1") def test_single_reference(self): @@ -63,9 +53,7 @@ class TestUtils(unittest.TestCase): msg["Message-ID"] = "<dummy>" msg["References"] = " <ref-1> " msg.set_payload("Dummy message") - store = Mock() - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, "ref-1") def test_multiple_reference(self): @@ -74,9 +62,7 @@ class TestUtils(unittest.TestCase): msg["Message-ID"] = "<dummy>" msg["References"] = " <ref-1> <ref-2> " msg.set_payload("Dummy message") - store = Mock() - ref_id = kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store)[0] + ref_id = kittystore.utils.get_ref(msg) self.assertEqual(ref_id, "ref-2") def test_empty_reference(self): @@ -85,10 +71,8 @@ class TestUtils(unittest.TestCase): msg["Message-ID"] = "<dummy>" msg["References"] = " " msg.set_payload("Dummy message") - store = Mock() try: - kittystore.utils.get_ref_and_thread_id( - msg, "example-list", store) + ref_id = kittystore.utils.get_ref(msg) except IndexError, e: self.fail("Empty 'References' tag should be handled") diff --git a/kittystore/utils.py b/kittystore/utils.py index d98537f..281209a 100644 --- a/kittystore/utils.py +++ b/kittystore/utils.py @@ -35,7 +35,7 @@ import dateutil.parser, dateutil.tz __all__ = ("get_message_id_hash", "parseaddr", "parsedate", "header_to_unicode", "payload_to_unicode", - "get_ref_and_thread_id", + "get_ref", "get_ref_and_thread_id", ) @@ -101,15 +101,14 @@ def parsedate(datestring): #timestamp = email.utils.mktime_tz(date_tuple) #return datetime.fromtimestamp(timestamp) -def get_ref_and_thread_id(message, list_name, store): + +def get_ref(message): """ - Returns the thread ID and the message-id of the reference email for a given - message. + Returns the message-id of the reference email for a given message. """ if (not message.has_key("References") and not message.has_key("In-Reply-To")): - return None, None - # It's a reply, use the thread_id from the parent email + return None ref_id = message.get("In-Reply-To") if ref_id is None or not ref_id.strip(): ref_id = message.get("References") @@ -120,8 +119,19 @@ def get_ref_and_thread_id(message, list_name, store): ref_id = IN_BRACKETS_RE.match(ref_id) if ref_id is None: # Can't parse the reference - return None, None + return None ref_id = ref_id.group(1) + return unicode(ref_id) + + +def get_ref_and_thread_id(message, list_name, store): + """ + Returns the thread ID and the message-id of the reference email for a given + message. + """ + ref_id = get_ref(message) + if ref_id is None: + return None, None # It's a reply, use the thread_id from the parent email ref_msg = store.get_message_by_id_from_list(list_name, ref_id) if ref_msg is None: @@ -129,5 +139,5 @@ def get_ref_and_thread_id(message, list_name, store): else: # re-use parent's thread-id thread_id = unicode(ref_msg.thread_id) - return unicode(ref_id), thread_id + return ref_id, thread_id |