diff options
author | Folker Bernitt <fbernitt@thoughtworks.com> | 2015-07-23 13:31:50 +0200 |
---|---|---|
committer | Folker Bernitt <fbernitt@thoughtworks.com> | 2015-08-11 17:00:27 +0200 |
commit | 23f0aafe4490b4126af6c8e12aaa340170f042c6 (patch) | |
tree | c4a6ebecabfae9d2faa68baf8757df6c1fdbce51 /service/pixelated | |
parent | 0449598c74b996e718cbefe7ca291bdf0389a64f (diff) |
Started work on MailStore abstraction.
Diffstat (limited to 'service/pixelated')
-rw-r--r-- | service/pixelated/adapter/mailstore/__init__.py | 38 | ||||
-rw-r--r-- | service/pixelated/adapter/mailstore/leap_mailstore.py | 52 | ||||
-rw-r--r-- | service/pixelated/adapter/model/mail.py | 8 |
3 files changed, 98 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. + + +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 <http://www.gnu.org/licenses/>. +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 @@ -49,6 +49,10 @@ SIZE_KEY = 'size' class Mail(object): @property + def from_sender(self): + return self.headers['From'] + + @property def to(self): return self.headers['To'] @@ -61,6 +65,10 @@ class Mail(object): return self.headers['Bcc'] @property + def subject(self): + return self.headers['Subject'] + + @property def date(self): return self.headers['Date'] |