From 23f0aafe4490b4126af6c8e12aaa340170f042c6 Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Thu, 23 Jul 2015 13:31:50 +0200 Subject: Started work on MailStore abstraction. --- service/pixelated/adapter/mailstore/__init__.py | 38 ++++++++++++++++ .../pixelated/adapter/mailstore/leap_mailstore.py | 52 ++++++++++++++++++++++ service/pixelated/adapter/model/mail.py | 8 ++++ 3 files changed, 98 insertions(+) create mode 100644 service/pixelated/adapter/mailstore/__init__.py create mode 100644 service/pixelated/adapter/mailstore/leap_mailstore.py (limited to 'service/pixelated/adapter') diff --git a/service/pixelated/adapter/mailstore/__init__.py b/service/pixelated/adapter/mailstore/__init__.py new file mode 100644 index 00000000..2e7f132a --- /dev/null +++ b/service/pixelated/adapter/mailstore/__init__.py @@ -0,0 +1,38 @@ +# +# Copyright (c) 2015 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 . + + +class MailStore(object): + def get_mail(self, mail_id): + pass + + def get_mails(self, mail_ids): + pass + + def delete_mail(self, mail_id): + pass + + def update_mail(self, mail): + pass + + def add_mail(self, mailbox_name, mail): + pass + + def get_mailbox_names(self): + pass + + def get_mailbox_mail_ids(self, mailbox_name): + pass diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py new file mode 100644 index 00000000..9d41c988 --- /dev/null +++ b/service/pixelated/adapter/mailstore/leap_mailstore.py @@ -0,0 +1,52 @@ +# +# Copyright (c) 2015 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 . +from leap.mail.adaptors.soledad import SoledadMailAdaptor +from twisted.internet import defer +from pixelated.adapter.mailstore import MailStore + +from leap.mail.mail import Message +from pixelated.adapter.model.mail import Mail + + +class LeapMail(Mail): + + def __init__(self, headers, body=None): + self.headers = headers + self._body = body + + @property + def body(self): + return self._body + +class LeapMailStore(MailStore): + __slots__ = ('account', 'soledad') + + def __init__(self, imapAccount, soledad): + self.account = imapAccount + self.soledad = soledad + + @defer.inlineCallbacks + def get_mail(self, mail_id): + try: + message = yield SoledadMailAdaptor().get_msg_from_mdoc_id(Message, self.soledad, mail_id) + + defer.returnValue(self._leap_message_to_leap_mail(message)) + except AttributeError: + defer.returnValue(None) + + def _leap_message_to_leap_mail(self, message): + return LeapMail(message.get_headers()) + diff --git a/service/pixelated/adapter/model/mail.py b/service/pixelated/adapter/model/mail.py index 5002974f..498ef079 100644 --- a/service/pixelated/adapter/model/mail.py +++ b/service/pixelated/adapter/model/mail.py @@ -48,6 +48,10 @@ SIZE_KEY = 'size' class Mail(object): + @property + def from_sender(self): + return self.headers['From'] + @property def to(self): return self.headers['To'] @@ -60,6 +64,10 @@ class Mail(object): def bcc(self): return self.headers['Bcc'] + @property + def subject(self): + return self.headers['Subject'] + @property def date(self): return self.headers['Date'] -- cgit v1.2.3