From cf3ea5411adb12dd1bdc12ec01a17b37d974c7c3 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Tue, 26 Aug 2014 19:11:01 -0300 Subject: refactoring pixelatedMail constructor so we can have 'two' (from_dict and from_leap_mail) --- service/pixelated/adapter/mail_service.py | 4 ++-- service/pixelated/adapter/pixelated_mail.py | 36 ++++++++++++++++++---------- service/pixelated/bitmask_libraries/smtp.py | 1 + service/test/adapter/pixelated_mail_test.py | 37 +++++++++++++++++++++++------ 4 files changed, 56 insertions(+), 22 deletions(-) diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py index 54deb488..82925870 100644 --- a/service/pixelated/adapter/mail_service.py +++ b/service/pixelated/adapter/mail_service.py @@ -52,7 +52,7 @@ class MailService: def mails(self, query): mails = self.mailbox.messages or [] - mails = [PixelatedMail(mail) for mail in mails] + mails = [PixelatedMail.from_leap_mail(mail) for mail in mails] return mails def update_tags(self, mail_id, new_tags): @@ -77,7 +77,7 @@ class MailService: def mail(self, mail_id): for message in self.mailbox.messages: if message.getUID() == int(mail_id): - return PixelatedMail(message) + return PixelatedMail.from_leap_mail(message) def all_tags(self): return self.tags diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index 081eb846..4169bb23 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -39,21 +39,27 @@ class PixelatedMail: '\\Recent': 'inbox' } - def __init__(self, leap_mail): - self.leap_mail = leap_mail - self.body = leap_mail.bdoc.content['raw'] - self.headers = self.extract_headers() - self.date = dateparser.parse(self.headers['date']) - self.ident = leap_mail.getUID() - self.status = self.extract_status() - self.security_casing = {} - self.tags = self.extract_tags() - - def extract_status(self): + def __init__(self): + pass + + @staticmethod + def from_leap_mail(leap_mail): + mail = PixelatedMail() + mail.leap_mail = leap_mail + mail.body = leap_mail.bdoc.content['raw'] + mail.headers = mail._extract_headers() + mail.date = dateparser.parse(mail.headers['date']) + mail.ident = leap_mail.getUID() + mail.status = mail._extract_status() + mail.security_casing = {} + mail.tags = mail._extract_tags() + return mail + + def _extract_status(self): flags = self.leap_mail.getFlags() return [converted for flag, converted in self.LEAP_FLAGS_STATUSES.items() if flag in flags] - def extract_headers(self): + def _extract_headers(self): temporary_headers = {} for header, value in self.leap_mail.hdoc.content['headers'].items(): temporary_headers[header.lower()] = value @@ -61,7 +67,7 @@ class PixelatedMail: temporary_headers['to'] = [temporary_headers['to']] return temporary_headers - def extract_tags(self): + def _extract_tags(self): flags = self.leap_mail.getFlags() tag_names = self._converted_tags(flags) + self._custom_tags(flags) tags = [] @@ -95,3 +101,7 @@ class PixelatedMail: 'security_casing': self.security_casing, 'body': self.body } + + @staticmethod + def from_dict(mail_dict): + return PixelatedMail() diff --git a/service/pixelated/bitmask_libraries/smtp.py b/service/pixelated/bitmask_libraries/smtp.py index d82c7603..94214e4c 100644 --- a/service/pixelated/bitmask_libraries/smtp.py +++ b/service/pixelated/bitmask_libraries/smtp.py @@ -32,6 +32,7 @@ class LeapSmtp(object): self._smtp_port = None self._smtp_service = None self._twisted_port = 10000 + int(random.random() * 5000) + print "## SMTP port: " + str(self._twisted_port) def smtp_info(self): return ('localhost', LeapSmtp.SMTP_PORT) diff --git a/service/test/adapter/pixelated_mail_test.py b/service/test/adapter/pixelated_mail_test.py index b0e2f9d2..308424e0 100644 --- a/service/test/adapter/pixelated_mail_test.py +++ b/service/test/adapter/pixelated_mail_test.py @@ -24,29 +24,52 @@ import test_helper class TestPixelatedMail(unittest.TestCase): def test_leap_recent_flag_is_translated_to_inbox_tag(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Recent'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(leap_flags=['\\Recent'])) self.assertIn(Tag('inbox'), pixelated_mail.tags) def test_leap_deleted_flag_is_translated_to_trash_tag(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Deleted'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(leap_flags=['\\Deleted'])) self.assertIn(Tag('trash'), pixelated_mail.tags) def test_leap_draft_flag_is_translated_to_draft_tag(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Draft'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(leap_flags=['\\Draft'])) self.assertIn(Tag('drafts'), pixelated_mail.tags) def test_leap_seen_flag_is_translated_to_read_status(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Seen'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(leap_flags=['\\Seen'])) self.assertIn('read', pixelated_mail.status) def test_leap_answered_flag_is_translated_to_replied_status(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(leap_flags=['\\Answered'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(leap_flags=['\\Answered'])) self.assertIn('replied', pixelated_mail.status) def test_leap_flags_that_are_custom_tags_are_handled(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(extra_flags=['tag_work'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(extra_flags=['tag_work'])) self.assertIn(Tag('work'), pixelated_mail.tags) def test_custom_tags_containing_our_prefix_are_handled(self): - pixelated_mail = PixelatedMail(test_helper.leap_mail(extra_flags=['tag_tag_work_tag_'])) + pixelated_mail = PixelatedMail.from_leap_mail(test_helper.leap_mail(extra_flags=['tag_tag_work_tag_'])) self.assertIn(Tag('tag_work_tag_'), pixelated_mail.tags) + + def from_dict(self): + mail_dict = { + 'body': 'Este \xe9 o corpo', + 'header': { + 'cc': ['cc@pixelated.com'], + 'to': ['to@pixelated.com'], + 'subject': 'Oi', + 'bcc': ['bcc@pixelated.com'] + }, + 'ident': '', + 'tags': ['sent'] + } + + mail = PixelatedMail.from_dict(mail_dict) + + self.assertEqual(mail.headers.cc, ['cc@pixelated.com']) + self.assertEqual(mail.headers.to, ['to@pixelated.com']) + self.assertEqual(mail.headers.bcc, ['bcc@pixelated.com']) + self.assertEqual(mail.headers.subject, 'Oi') + self.assertEqual(mail.ident, '') + self.assertEqual(mail.tags, ['sent']) + self.assertEqual(mail.body, 'Este \xe9 o corpo') -- cgit v1.2.3