summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorPatrick Maia <patrickjourdanmaia@gmail.com>2014-08-14 11:52:52 -0300
committerPatrick Maia <patrickjourdanmaia@gmail.com>2014-08-14 11:53:23 -0300
commit50049e17edff98762839d55650b6516f2d5e81ab (patch)
treec42b7ad365744e6e3435ff7067098b441c1ae30c /service
parent62bc10abee02c4312e5e9c77b134d6f70d45ad37 (diff)
You can now list all tags and creating an email identify the tags
Diffstat (limited to 'service')
-rw-r--r--service/app/adapter/mail_service.py6
-rw-r--r--service/app/adapter/pixelated_mail.py38
-rw-r--r--service/app/tags.py12
-rw-r--r--service/test/adapter/pixelated_mail_test.py29
-rw-r--r--service/test/adapter/test_helper.py16
5 files changed, 67 insertions, 34 deletions
diff --git a/service/app/adapter/mail_service.py b/service/app/adapter/mail_service.py
index 25fb5188..b5ae09f2 100644
--- a/service/app/adapter/mail_service.py
+++ b/service/app/adapter/mail_service.py
@@ -5,6 +5,8 @@ from app.bitmask_libraries.config import LeapConfig
from app.bitmask_libraries.provider import LeapProvider
from app.bitmask_libraries.session import LeapSessionFactory
from app.bitmask_libraries.auth import LeapCredentials
+from app.adapter.pixelated_mail import PixelatedMail
+from app.tags import Tags
import logging
@@ -36,7 +38,7 @@ class MailService:
self.server_name = 'example.wazokazi.is'
self.mailbox_name = 'INBOX'
self.leapdir = os.path.join(os.path.abspath("."), "leap")
-
+ self.tags = Tags()
self._open_leap_session()
except:
traceback.print_exc(file=sys.stdout)
@@ -108,7 +110,7 @@ class MailService:
raise NotImplementedError()
def all_tags(self):
- raise NotImplementedError()
+ return self.tags
def all_contacts(self, query):
raise NotImplementedError()
diff --git a/service/app/adapter/pixelated_mail.py b/service/app/adapter/pixelated_mail.py
index 412414ed..cdfd9a29 100644
--- a/service/app/adapter/pixelated_mail.py
+++ b/service/app/adapter/pixelated_mail.py
@@ -1,4 +1,5 @@
from app.tags import Tag
+from app.tags import Tags
class PixelatedMail:
@@ -25,28 +26,43 @@ class PixelatedMail:
def __init__(self, leap_mail):
self.leap_mail = leap_mail
self.body = leap_mail.bdoc.content['raw']
- self.headers = self.extract_headers(leap_mail)
+ self.headers = self.extract_headers()
self.ident = leap_mail.getUID()
- self.status = self.extract_status(leap_mail)
+ self.status = self.extract_status()
self.security_casing = {}
- self.tags = self.extract_tags(leap_mail)
+ self.tags = self.extract_tags()
- def extract_status(self, leap_mail):
- flags = leap_mail.getFlags()
+ 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, leap_mail):
+ def extract_headers(self):
temporary_headers = {}
- for header, value in leap_mail.hdoc.content['headers'].items():
+ for header, value in self.leap_mail.hdoc.content['headers'].items():
temporary_headers[header.lower()] = value
return temporary_headers
- def extract_tags(self, leap_mail):
- flags = leap_mail.getFlags()
- converted_tags = [Tag(converted) for flag, converted in self.LEAP_FLAGS_TAGS.items() if flag in flags]
- tags = converted_tags + [Tag(flag) for flag in leap_mail.getFlags() if flag not in self.LEAP_FLAGS]
+ def extract_tags(self):
+ flags = self.leap_mail.getFlags()
+ tag_names = self._converted_tags(flags) + self._custom_tags(flags)
+ tags = []
+ for tag in tag_names:
+ tags.append(Tag(tag))
return tags
+ def _converted_tags(self, flags):
+ return [converted for flag, converted in self.LEAP_FLAGS_TAGS.items() if flag in flags]
+
+ def _custom_tags(self, flags):
+ return [self._remove_prefix(flag) for flag in self.leap_mail.getFlags() if flag.startswith('tag_')]
+
+ def _remove_prefix(self, flag_name):
+ return flag_name.replace('tag_', '', 1)
+
+ def update_tags(self, tags):
+ self.tags = [Tag(tag) for tag in tags]
+ return self.tags
+
def has_tag(self, tag):
return Tag(tag) in self.tags
diff --git a/service/app/tags.py b/service/app/tags.py
index 0f874850..302e046c 100644
--- a/service/app/tags.py
+++ b/service/app/tags.py
@@ -40,10 +40,14 @@ class Tags:
for name in self.SPECIAL_TAGS:
self.tags[name] = self.add(name)
- def add(self, name):
- tag = Tag(name, name in self.SPECIAL_TAGS)
- self.tags[name] = tag
- return tag
+ def add(self, tag_input):
+ if tag_input.__class__.__name__ == 'str':
+ tag = Tag(tag_input, tag_input in self.SPECIAL_TAGS)
+ self.tags[tag_input] = tag
+ return tag
+ elif tag_input.__class__.__name__ == 'Tag':
+ self.tags[tag_input.name] = tag_input
+ return tag_input
def find(self, name):
return self.tags[name]
diff --git a/service/test/adapter/pixelated_mail_test.py b/service/test/adapter/pixelated_mail_test.py
index 9193464b..72ac06b4 100644
--- a/service/test/adapter/pixelated_mail_test.py
+++ b/service/test/adapter/pixelated_mail_test.py
@@ -1,33 +1,28 @@
import unittest
from app.adapter.pixelated_mail import PixelatedMail
-from mock import Mock
from app.tags import Tag
+from app.tags import Tags
+import test_helper
class TestPixelatedMail(unittest.TestCase):
- LEAP_FLAGS = ['\\Seen',
- '\\Answered',
- '\\Flagged',
- '\\Deleted',
- '\\Draft',
- '\\Recent',
- 'List']
-
- def setUp(self):
- self.leap_mail = Mock(getUID=Mock(return_value=0),
- getFlags=Mock(return_value=self.LEAP_FLAGS),
- bdoc=Mock(content={'raw': 'test'}),
- hdoc=Mock(content={'headers': {}}))
-
def test_leap_flags_that_are_tags_are_handled(self):
- pixelated_mail = PixelatedMail(self.leap_mail)
+ pixelated_mail = PixelatedMail(test_helper.leap_mail())
self.assertIn(Tag('inbox'), pixelated_mail.tags)
self.assertIn(Tag('trash'), pixelated_mail.tags)
self.assertIn(Tag('drafts'), pixelated_mail.tags)
def test_leap_flags_that_are_status_are_handled(self):
- pixelated_mail = PixelatedMail(self.leap_mail)
+ pixelated_mail = PixelatedMail(test_helper.leap_mail())
self.assertIn('read', pixelated_mail.status)
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']))
+ 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_']))
+ self.assertIn(Tag('tag_work_tag_'), pixelated_mail.tags)
diff --git a/service/test/adapter/test_helper.py b/service/test/adapter/test_helper.py
new file mode 100644
index 00000000..94158f1c
--- /dev/null
+++ b/service/test/adapter/test_helper.py
@@ -0,0 +1,16 @@
+from mock import Mock
+
+LEAP_FLAGS = ['\\Seen',
+ '\\Answered',
+ '\\Flagged',
+ '\\Deleted',
+ '\\Draft',
+ '\\Recent',
+ 'List']
+
+def leap_mail(uid=0, extra_flags=[], headers={}):
+ flags = LEAP_FLAGS + extra_flags
+ return Mock(getUID=Mock(return_value=uid),
+ getFlags=Mock(return_value=flags),
+ bdoc=Mock(content={'raw': 'test'}),
+ hdoc=Mock(content={'headers': headers}))