diff options
-rw-r--r-- | distixlib/msg_id_extractor.py | 18 | ||||
-rw-r--r-- | distixlib/msg_id_extractor_tests.py | 16 |
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'])) |