summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-09-11 10:26:18 -0300
committerDuda Dornelles <ddornell@thoughtworks.com>2014-09-11 10:36:19 -0300
commit6b62849aa40023fd9eba666560984e0edfedc55d (patch)
tree32521cffb815aceeca47a4812cc833e3eff323e1 /service
parentcf9b7a1292e9d2ec8c5326f91803f489a8251d14 (diff)
generating unique ident for PixelatedMail
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/pixelated_mail.py3
-rw-r--r--service/pixelated/adapter/pixelated_mailbox.py3
-rw-r--r--service/pixelated/support/id_gen.py20
-rw-r--r--service/test/adapter/pixelated_mailbox_test.py5
-rw-r--r--service/test/adapter/test_helper.py3
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}))