From b73185d27fe5d59d64b0759c1efbbcdf89086d11 Mon Sep 17 00:00:00 2001 From: mnandri Date: Fri, 18 Dec 2015 11:21:48 +0100 Subject: ensuring the same file is not saved twice Issue #548 --- service/pixelated/adapter/mailstore/leap_attachment_store.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'service/pixelated/adapter/mailstore/leap_attachment_store.py') diff --git a/service/pixelated/adapter/mailstore/leap_attachment_store.py b/service/pixelated/adapter/mailstore/leap_attachment_store.py index 86121db9..982d9222 100644 --- a/service/pixelated/adapter/mailstore/leap_attachment_store.py +++ b/service/pixelated/adapter/mailstore/leap_attachment_store.py @@ -17,7 +17,7 @@ class LeapAttachmentStore(object): @defer.inlineCallbacks def get_mail_attachment(self, attachment_id): results = yield self.soledad.get_from_index('by-type-and-payloadhash', 'cnt', attachment_id) if attachment_id else [] - if len(results): + if results: content = ContentDocWrapper(**results[0].content) defer.returnValue({'content-type': content.content_type, 'content': self._try_decode( content.raw, content.content_transfer_encoding)}) @@ -27,8 +27,12 @@ class LeapAttachmentStore(object): @defer.inlineCallbacks def add_attachment(self, content, content_type): cdoc = self._attachment_to_cdoc(content, content_type) - yield self.soledad.create_doc(cdoc.serialize(), doc_id=cdoc.phash) - defer.returnValue(cdoc.phash) + attachment_id = cdoc.phash + try: + yield self.get_mail_attachment(attachment_id) + except ValueError: + yield self.soledad.create_doc(cdoc.serialize(), doc_id=attachment_id) + defer.returnValue(attachment_id) def _try_decode(self, raw, encoding): encoding = encoding.lower() -- cgit v1.2.3