summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAurélien Bompard <aurelien@bompard.org>2012-12-14 14:51:08 +0100
committerAurélien Bompard <aurelien@bompard.org>2012-12-14 14:51:08 +0100
commit6a67f640f1bc4f42b116f505d741e51d1eb64680 (patch)
tree44a00ce49a846990d2f74e1d249a23f2ca94c60b
parent8ea86d9987a3142b6e83596d6a0d1df8f6d14af7 (diff)
downloadkittystore-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.py30
-rw-r--r--kittystore/utils.py26
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