summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-04-07 15:15:55 +0300
committerLars Wirzenius <liw@liw.fi>2017-04-07 15:15:55 +0300
commit4a459519f2f841d1283dca347c28cc5e6a4009ea (patch)
tree72b01154a4746f887275259b68f16e40cd38e4b3
parent9a6dd537c7baeb3f62f26b974f9dcdf9010cb5e2 (diff)
downloaddistix-4a459519f2f841d1283dca347c28cc5e6a4009ea.tar.gz
Add another msg id extractor test
-rw-r--r--distixlib/msg_id_extractor.py18
-rw-r--r--distixlib/msg_id_extractor_tests.py16
2 files changed, 32 insertions, 2 deletions
diff --git a/distixlib/msg_id_extractor.py b/distixlib/msg_id_extractor.py
index cbe985d..d789e90 100644
--- a/distixlib/msg_id_extractor.py
+++ b/distixlib/msg_id_extractor.py
@@ -16,6 +16,22 @@
# =*= License: GPL-3+ =*=
+import email
+
def get_ids_from_message(msg):
- return []
+ return set(_yield_ids(msg))
+
+
+def _yield_ids(msg):
+ header_names = ('Message-Id', 'In-Reply-To', 'References')
+ for header_name in header_names:
+ for msg_id in _yield_ids_from_header(msg, header_name):
+ yield msg_id
+
+
+def _yield_ids_from_header(msg, header_name):
+ values = msg.get_all(header_name)
+ if values:
+ for _, msg_id in email.utils.getaddresses(values):
+ yield msg_id
diff --git a/distixlib/msg_id_extractor_tests.py b/distixlib/msg_id_extractor_tests.py
index 6a7e259..b47b0f3 100644
--- a/distixlib/msg_id_extractor_tests.py
+++ b/distixlib/msg_id_extractor_tests.py
@@ -33,4 +33,18 @@ Subject: O, Romeo
Wherefore art thou?
''')
- self.assertEqual(distixlib.get_ids_from_message(msg), [])
+ self.assertEqual(distixlib.get_ids_from_message(msg), set())
+
+ def test_returns_id_from_message_id(self):
+ msg_text = '''\
+From: user@example.com
+To: other@example.com
+Subject: O, Romeo
+Message-Id: <capulet123@verona>
+
+Wherefore art thou?
+'''
+
+ msg = email.message_from_string(msg_text)
+ self.assertEqual(
+ distixlib.get_ids_from_message(msg), set(['capulet123@verona']))