diff options
Diffstat (limited to 'service/pixelated/adapter/services/draft_service.py')
-rw-r--r-- | service/pixelated/adapter/services/draft_service.py | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/service/pixelated/adapter/services/draft_service.py b/service/pixelated/adapter/services/draft_service.py index c8df0a05..65794f04 100644 --- a/service/pixelated/adapter/services/draft_service.py +++ b/service/pixelated/adapter/services/draft_service.py @@ -13,19 +13,36 @@ # # 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 twisted.internet import defer +from pixelated.adapter.errors import DuplicatedDraftException class DraftService(object): - __slots__ = '_mailboxes' + __slots__ = '_mail_store' - def __init__(self, mailboxes): - self._mailboxes = mailboxes + def __init__(self, mail_store): + self._mail_store = mail_store + @defer.inlineCallbacks def create_draft(self, input_mail): - pixelated_mail = self._mailboxes.drafts.add(input_mail) - return pixelated_mail + mail = yield self._mail_store.add_mail('DRAFTS', input_mail.raw) + defer.returnValue(mail) + # pixelated_mail = yield (yield self._mailboxes.drafts).add(input_mail) + # defer.returnValue(pixelated_mail) + @defer.inlineCallbacks def update_draft(self, ident, input_mail): - pixelated_mail = self.create_draft(input_mail) - self._mailboxes.drafts.remove(ident) - return pixelated_mail + new_draft = yield self.create_draft(input_mail) + try: + yield self._mail_store.delete_mail(ident) + defer.returnValue(new_draft) + except Exception as error: + errorMessage = error.args[0].getErrorMessage() + + if errorMessage == 'Need to create doc before deleting': + yield self._mail_store.delete_mail(new_draft.ident) + raise DuplicatedDraftException(errorMessage) + + # pixelated_mail = yield self.create_draft(input_mail) + # yield (yield self._mailboxes.drafts).remove(ident) + # defer.returnValue(pixelated_mail) |