summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorNavaL <ayoyo@thoughtworks.com>2016-02-12 14:53:41 -0200
committerNavaL <ayoyo@thoughtworks.com>2016-02-12 14:53:41 -0200
commit077e4100160ba58ee2abf91c0572ca1c0962277e (patch)
tree336ba2bc1484d423f5f807247f13482915c91140 /service
parent78925e0332bbc41ed37e27d506be192abdb7124e (diff)
Revert "Revert "Issue #549 - Implemented remove attachment""
This reverts commit 3c6b905d7e5b78e521b2e7692e5e32b7b0c226bc.
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/mailstore/leap_attachment_store.py6
-rw-r--r--service/pixelated/adapter/services/mail_service.py10
-rw-r--r--service/pixelated/resources/attachments_resource.py3
-rw-r--r--service/test/unit/adapter/mailstore/test_leap_attachment_store.py15
4 files changed, 31 insertions, 3 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_attachment_store.py b/service/pixelated/adapter/mailstore/leap_attachment_store.py
index 982d9222..2c004abf 100644
--- a/service/pixelated/adapter/mailstore/leap_attachment_store.py
+++ b/service/pixelated/adapter/mailstore/leap_attachment_store.py
@@ -63,3 +63,9 @@ class LeapAttachmentStore(object):
def _calc_attachment_id_(self, content, content_type, encoder=encoders.encode_base64):
cdoc = self._attachment_to_cdoc(content, content_type, encoder)
return cdoc.phash
+
+ @defer.inlineCallbacks
+ def delete_attachment(self, attachment_id):
+ doc = yield self.soledad.get_from_index('by-type-and-payloadhash', 'cnt', attachment_id)
+ doc = doc[0]
+ yield self.soledad.delete_doc(doc)
diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py
index 2da2cca6..5ec3a298 100644
--- a/service/pixelated/adapter/services/mail_service.py
+++ b/service/pixelated/adapter/services/mail_service.py
@@ -35,7 +35,7 @@ class MailService(object):
self.search_engine = search_engine
self.mail_sender = mail_sender
self.account_email = account_email
- self.attchment_store = attachment_store
+ self.attachment_store = attachment_store
@defer.inlineCallbacks
def all_mails(self):
@@ -43,7 +43,7 @@ class MailService(object):
defer.returnValue(mails)
def save_attachment(self, content, content_type):
- return self.attchment_store.add_attachment(content, content_type)
+ return self.attachment_store.add_attachment(content, content_type)
@log_time_deferred
@defer.inlineCallbacks
@@ -87,7 +87,7 @@ class MailService(object):
return self.mail_store.get_mail(mail_id, include_body=True)
def attachment(self, attachment_id):
- return self.attchment_store.get_mail_attachment(attachment_id)
+ return self.attachment_store.get_mail_attachment(attachment_id)
@defer.inlineCallbacks
def mail_exists(self, mail_id):
@@ -151,3 +151,7 @@ class MailService(object):
@defer.inlineCallbacks
def delete_permanent(self, mail_id):
yield self.mail_store.delete_mail(mail_id)
+
+ @defer.inlineCallbacks
+ def delete_attachment(self, attachment_id):
+ yield self.attachment_store.delete_attachment(attachment_id)
diff --git a/service/pixelated/resources/attachments_resource.py b/service/pixelated/resources/attachments_resource.py
index 086f6e4e..db8b4df1 100644
--- a/service/pixelated/resources/attachments_resource.py
+++ b/service/pixelated/resources/attachments_resource.py
@@ -72,6 +72,9 @@ class AttachmentResource(Resource):
match = re.compile('([A-Za-z-]+\/[A-Za-z-]+)').search(content_type)
return match.group(1)
+ def render_DELETE(self, request):
+ self.mail_service.delete_attachment(self.attachment_id)
+
class AttachmentsResource(BaseResource):
BASE_URL = 'attachment'
diff --git a/service/test/unit/adapter/mailstore/test_leap_attachment_store.py b/service/test/unit/adapter/mailstore/test_leap_attachment_store.py
index 4e9b56b1..f1bd8528 100644
--- a/service/test/unit/adapter/mailstore/test_leap_attachment_store.py
+++ b/service/test/unit/adapter/mailstore/test_leap_attachment_store.py
@@ -116,6 +116,21 @@ class TestLeapAttachmentStore(TestCase):
except ValueError:
pass
+ @defer.inlineCallbacks
+ def test_soledad_delete_doc_is_called_when_deleting_an_attachment(self):
+ attachment_id = '1B0A9AAD9E153D24265395203C53884506ABA276394B9FEC02B214BF9E77E48E'
+ doc = SoledadDocument(json=json.dumps({'content_type': 'foo/bar', 'raw': 'quoted-printable',
+ 'phash': attachment_id,
+ 'content_transfer_encoding': ''}))
+
+ when(self.soledad).get_from_index('by-type-and-payloadhash', 'cnt', attachment_id).thenReturn(defer.succeed([doc]))
+ when(self.soledad).delete_doc(doc).thenReturn(defer.succeed(None))
+
+ store = LeapAttachmentStore(self.soledad)
+ yield store.delete_attachment(attachment_id)
+
+ verify(self.soledad).delete_doc(doc)
+
def _mock_get_mailbox(self, mailbox_name, create_new_uuid=False):
mbox_uuid = self.mbox_uuid if not create_new_uuid else str(uuid4())
when(self.soledad).list_indexes().thenReturn(defer.succeed(MAIL_INDEXES)).thenReturn(