diff options
author | Duda Dornelles <ddornell@thoughtworks.com> | 2014-09-11 10:26:18 -0300 |
---|---|---|
committer | Duda Dornelles <ddornell@thoughtworks.com> | 2014-09-11 10:36:19 -0300 |
commit | 6b62849aa40023fd9eba666560984e0edfedc55d (patch) | |
tree | 32521cffb815aceeca47a4812cc833e3eff323e1 /service | |
parent | cf9b7a1292e9d2ec8c5326f91803f489a8251d14 (diff) |
generating unique ident for PixelatedMail
Diffstat (limited to 'service')
-rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 3 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mailbox.py | 3 | ||||
-rw-r--r-- | service/pixelated/support/id_gen.py | 20 | ||||
-rw-r--r-- | service/test/adapter/pixelated_mailbox_test.py | 5 | ||||
-rw-r--r-- | service/test/adapter/test_helper.py | 3 |
5 files changed, 29 insertions, 5 deletions
diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index e8aab1eb..d39cf81e 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. from pixelated.adapter.status import Status +from pixelated.support.id_gen import gen_pixelated_uid import pixelated.support.date import dateutil.parser as dateparser from email.MIMEMultipart import MIMEMultipart @@ -32,7 +33,7 @@ class PixelatedMail: mail.body = leap_mail.bdoc.content['raw'] mail.headers = mail._extract_headers() mail.date = PixelatedMail._get_date(mail.headers) - mail.ident = leap_mail.getUID() + mail.ident = gen_pixelated_uid(leap_mail._mbox, leap_mail.getUID()) mail.status = set(mail._extract_status()) mail.security_casing = {} mail.tags = mail._extract_tags() diff --git a/service/pixelated/adapter/pixelated_mailbox.py b/service/pixelated/adapter/pixelated_mailbox.py index 1a17926a..6323d3c3 100644 --- a/service/pixelated/adapter/pixelated_mailbox.py +++ b/service/pixelated/adapter/pixelated_mailbox.py @@ -19,6 +19,7 @@ import os from pixelated.adapter.pixelated_mail import PixelatedMail from pixelated.adapter.tag import Tag from pixelated.adapter.tag_index import TagIndex +from pixelated.support.id_gen import gen_pixelated_uid class PixelatedMailbox: @@ -59,7 +60,7 @@ class PixelatedMailbox: def mail(self, mail_id): for message in self.leap_mailbox.messages: - if message.getUID() == int(mail_id): + if gen_pixelated_uid(self.leap_mailbox.mbox, message.getUID()) == mail_id: return PixelatedMail.from_leap_mail(message) def all_tags(self): diff --git a/service/pixelated/support/id_gen.py b/service/pixelated/support/id_gen.py new file mode 100644 index 00000000..6cac7523 --- /dev/null +++ b/service/pixelated/support/id_gen.py @@ -0,0 +1,20 @@ +# +# Copyright (c) 2014 ThoughtWorks, Inc. +# +# Pixelated is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Pixelated is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Pixelated. If not, see <http://www.gnu.org/licenses/>. +import hashlib + + +def gen_pixelated_uid(mbox, leap_message_uid): + return hashlib.md5(mbox + str(leap_message_uid)).hexdigest() diff --git a/service/test/adapter/pixelated_mailbox_test.py b/service/test/adapter/pixelated_mailbox_test.py index 9bc65de0..6b84616f 100644 --- a/service/test/adapter/pixelated_mailbox_test.py +++ b/service/test/adapter/pixelated_mailbox_test.py @@ -58,12 +58,13 @@ class TestPixelatedMailbox(unittest.TestCase): self.assertIsNone(mailbox.tag_index.get('one_tag')) def test_mailbox_tag_is_added_when_new_mail_arrives(self): - mail_one = test_helper.leap_mail(uid=0) + mail_one = test_helper.leap_mail(uid=0, mbox='SENT') leap_mailbox = test_helper.leap_mailbox(messages=[mail_one], mailbox_name='SENT') mailbox = PixelatedMailbox(leap_mailbox, self.db_file_path) - mail = mailbox.mail(0) + from pixelated.support.id_gen import gen_pixelated_uid + mail = mailbox.mail(gen_pixelated_uid('SENT', 0)) self.assertIn('sent', mail.tags) def test_index_is_initialized_with_mail_tags_if_empty(self): diff --git a/service/test/adapter/test_helper.py b/service/test/adapter/test_helper.py index a904a041..ad39f343 100644 --- a/service/test/adapter/test_helper.py +++ b/service/test/adapter/test_helper.py @@ -41,9 +41,10 @@ def mail_dict(): } -def leap_mail(uid=0, flags=LEAP_FLAGS, headers=DEFAULT_HEADERS, extra_headers={}): +def leap_mail(uid=0, flags=LEAP_FLAGS, headers=DEFAULT_HEADERS, extra_headers={}, mbox='INBOX'): headers = dict(headers.items() + extra_headers.items()) return Mock(getUID=Mock(return_value=uid), + _mbox=mbox, getFlags=Mock(return_value=flags), bdoc=Mock(content={'raw': 'test'}), hdoc=Mock(content={'headers': headers})) |