diff options
Diffstat (limited to 'service')
| -rw-r--r-- | service/pixelated/adapter/mail_service.py | 4 | ||||
| -rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 36 | ||||
| -rw-r--r-- | service/pixelated/bitmask_libraries/smtp.py | 1 | ||||
| -rw-r--r-- | 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')  | 
