diff options
author | Kali Kaneko <kali@leap.se> | 2017-07-25 11:40:11 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2017-07-25 11:40:29 -0400 |
commit | 91e4481c450eb7eb928debc1cb7fa59bdb63dd7b (patch) | |
tree | 8fd7e6e77b6df669c33d96b7edad6db3cbe14dfe /service/pixelated/adapter/mailstore/leap_attachment_store.py | |
parent | e4f755309d4cf5cfb6b0bcc62ed73d6070956ab5 (diff) |
[pkg] packaging and path changes
- move all the pixelated python package under src/
- move the pixelated_www package under the leap namespace
- allow to set globally the static folder
- add hours and minutes to the timestamp in package version, to allow
for several releases a day.
Diffstat (limited to 'service/pixelated/adapter/mailstore/leap_attachment_store.py')
-rw-r--r-- | service/pixelated/adapter/mailstore/leap_attachment_store.py | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_attachment_store.py b/service/pixelated/adapter/mailstore/leap_attachment_store.py deleted file mode 100644 index b297f9e6..00000000 --- a/service/pixelated/adapter/mailstore/leap_attachment_store.py +++ /dev/null @@ -1,81 +0,0 @@ -# -# 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/>. - - -import quopri -import base64 -from email import encoders -from leap.bitmask.mail.adaptors.soledad import SoledadMailAdaptor, ContentDocWrapper -from twisted.internet import defer -from email.mime.nonmultipart import MIMENonMultipart -from email.mime.multipart import MIMEMultipart -from leap.bitmask.mail.mail import Message - - -class LeapAttachmentStore(object): - - def __init__(self, soledad): - self.soledad = soledad - - @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 results: - content = ContentDocWrapper(**results[0].content) - defer.returnValue({'content-type': content.content_type, 'content': self._try_decode( - content.raw, content.content_transfer_encoding)}) - else: - raise ValueError('No attachment with id %s found!' % attachment_id) - - @defer.inlineCallbacks - def add_attachment(self, content, content_type): - cdoc = self._attachment_to_cdoc(content, content_type) - 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() - if encoding == 'base64': - data = base64.decodestring(raw) - elif encoding == 'quoted-printable': - data = quopri.decodestring(raw) - else: - data = str(raw) - - return bytearray(data) - - def _attachment_to_cdoc(self, content, content_type, encoder=encoders.encode_base64): - major, sub = content_type.split('/') - attachment = MIMENonMultipart(major, sub) - attachment.set_payload(content) - encoder(attachment) - attachment.add_header('Content-Disposition', 'attachment', filename='does_not_matter.txt') - - pseudo_mail = MIMEMultipart() - pseudo_mail.attach(attachment) - - tmp_mail = SoledadMailAdaptor().get_msg_from_string(MessageClass=Message, raw_msg=pseudo_mail.as_string()) - - cdoc = tmp_mail.get_wrapper().cdocs[1] - return cdoc - - def _calc_attachment_id_(self, content, content_type, encoder=encoders.encode_base64): - cdoc = self._attachment_to_cdoc(content, content_type, encoder) - return cdoc.phash |