summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
authorBruno Wagner & Victor Shyba <bwgpro+victor.shyba@gmail.com>2015-02-27 20:14:03 -0300
committerPixpoa pairing <pixpoapairing@pixelated-project.org>2015-02-27 20:14:03 -0300
commitb39dd32f852d8ee6ed088c0d576d239194ccf6e5 (patch)
tree7aad814340f6cafc7b2e5c86be4b4373503ee67f /service/pixelated/adapter
parentb0084ec7184b2183d1ccabe1a0e017473e7a2892 (diff)
Refactored out tag service and replaced mail normalization with built-in parseaddr
Also made some minor fixes based on pylint output
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/model/mail.py2
-rw-r--r--service/pixelated/adapter/services/mail_sender.py29
-rw-r--r--service/pixelated/adapter/services/mail_service.py6
-rw-r--r--service/pixelated/adapter/services/mailbox.py2
-rw-r--r--service/pixelated/adapter/services/mailboxes.py2
-rw-r--r--service/pixelated/adapter/services/tag_service.py12
6 files changed, 18 insertions, 35 deletions
diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py
index 20cb9a88..f912680f 100644
--- a/service/pixelated/adapter/model/mail.py
+++ b/service/pixelated/adapter/model/mail.py
@@ -273,7 +273,7 @@ class PixelatedMail(Mail):
if not header_value:
continue
_headers[header] = header_value if type(header_value) is list else header_value.split(',')
- _headers[header] = map(lambda x: x.strip(), compact(_headers[header]))
+ _headers[header] = [head.strip() for head in compact(_headers[header])]
for header in ['From', 'Subject']:
_headers[header] = hdoc_headers.get(header)
diff --git a/service/pixelated/adapter/services/mail_sender.py b/service/pixelated/adapter/services/mail_sender.py
index 9f42fbbc..bbcc1721 100644
--- a/service/pixelated/adapter/services/mail_sender.py
+++ b/service/pixelated/adapter/services/mail_sender.py
@@ -14,7 +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 StringIO import StringIO
-import re
+from email.utils import parseaddr
from twisted.internet.defer import Deferred, fail
from twisted.mail.smtp import SMTPSenderFactory
@@ -28,35 +28,22 @@ class SMTPDownException(Exception):
class MailSender(object):
+
def __init__(self, account_email_address, ensure_smtp_is_running_cb):
self.ensure_smtp_is_running_cb = ensure_smtp_is_running_cb
self.account_email_address = account_email_address
- def recepients_normalizer(self, mail_list):
- return set(mail_list)
-
- def get_email_addresses(self, mail_list):
- clean_mail_list = []
- for mail_address in mail_list:
- if "<" in mail_address:
- match = re.search(r'<(.*)>', mail_address)
- clean_mail_list.append(match.group(1))
- else:
- clean_mail_list.append(mail_address)
- return self.recepients_normalizer(clean_mail_list)
-
def sendmail(self, mail):
if self.ensure_smtp_is_running_cb():
recipients = flatten([mail.to, mail.cc, mail.bcc])
- normalized_recipients = self.get_email_addresses(recipients)
- resultDeferred = Deferred()
- senderFactory = SMTPSenderFactory(
+ result_deferred = Deferred()
+ sender_factory = SMTPSenderFactory(
fromEmail=self.account_email_address,
- toEmail=normalized_recipients,
+ toEmail=set([parseaddr(recipient)[1] for recipient in recipients]),
file=StringIO(mail.to_smtp_format()),
- deferred=resultDeferred)
+ deferred=result_deferred)
- reactor.connectTCP('localhost', 4650, senderFactory)
+ reactor.connectTCP('localhost', 4650, sender_factory)
- return resultDeferred
+ return result_deferred
return fail(SMTPDownException())
diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py
index 5ef0a188..1bf29542 100644
--- a/service/pixelated/adapter/services/mail_service.py
+++ b/service/pixelated/adapter/services/mail_service.py
@@ -14,13 +14,13 @@
# 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.model.mail import InputMail
+from pixelated.adapter.services.tag_service import extract_reserved_tags
class MailService:
__slots__ = ['leap_session', 'account', 'mailbox_name']
- def __init__(self, mailboxes, mail_sender, tag_service, soledad_querier, search_engine):
- self.tag_service = tag_service
+ def __init__(self, mailboxes, mail_sender, soledad_querier, search_engine):
self.mailboxes = mailboxes
self.querier = soledad_querier
self.search_engine = search_engine
@@ -36,7 +36,7 @@ class MailService:
def update_tags(self, mail_id, new_tags):
new_tags = self._filter_white_space_tags(new_tags)
- reserved_words = self.tag_service.extract_reserved(new_tags)
+ reserved_words = extract_reserved_tags(new_tags)
if len(reserved_words):
raise ValueError('None of the following words can be used as tags: ' + ' '.join(reserved_words))
new_tags = self._favor_existing_tags_casing(new_tags)
diff --git a/service/pixelated/adapter/services/mailbox.py b/service/pixelated/adapter/services/mailbox.py
index f934abcc..e358abda 100644
--- a/service/pixelated/adapter/services/mailbox.py
+++ b/service/pixelated/adapter/services/mailbox.py
@@ -15,7 +15,7 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-class Mailbox:
+class Mailbox(object):
def __init__(self, mailbox_name, querier, search_engine):
self.mailbox_name = mailbox_name
diff --git a/service/pixelated/adapter/services/mailboxes.py b/service/pixelated/adapter/services/mailboxes.py
index c761255c..a7a3a591 100644
--- a/service/pixelated/adapter/services/mailboxes.py
+++ b/service/pixelated/adapter/services/mailboxes.py
@@ -17,7 +17,7 @@ from pixelated.adapter.services.mailbox import Mailbox
from pixelated.adapter.listeners.mailbox_indexer_listener import MailboxIndexerListener
-class Mailboxes():
+class Mailboxes(object):
def __init__(self, account, soledad_querier, search_engine):
self.account = account
diff --git a/service/pixelated/adapter/services/tag_service.py b/service/pixelated/adapter/services/tag_service.py
index 601392bb..c51da625 100644
--- a/service/pixelated/adapter/services/tag_service.py
+++ b/service/pixelated/adapter/services/tag_service.py
@@ -15,13 +15,9 @@
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
from pixelated.adapter.model.tag import Tag
+SPECIAL_TAGS = {Tag('inbox', True), Tag('sent', True), Tag('drafts', True), Tag('trash', True), Tag('ALL', True)}
-class TagService:
- instance = None
- SPECIAL_TAGS = {Tag('inbox', True), Tag('sent', True), Tag('drafts', True), Tag('trash', True), Tag('ALL', True)}
-
- @classmethod
- def extract_reserved(cls, tags):
- tags = map(lambda tag: tag.lower(), tags)
- return {tag.name for tag in cls.SPECIAL_TAGS if tag.name in tags}
+def extract_reserved_tags(tags):
+ tags = [tag.lower() for tag in tags]
+ return {tag.name for tag in SPECIAL_TAGS if tag.name in tags}