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/src/pixelated/resources/mail_resource.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/src/pixelated/resources/mail_resource.py')
-rw-r--r-- | service/src/pixelated/resources/mail_resource.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/service/src/pixelated/resources/mail_resource.py b/service/src/pixelated/resources/mail_resource.py new file mode 100644 index 00000000..e1ba6087 --- /dev/null +++ b/service/src/pixelated/resources/mail_resource.py @@ -0,0 +1,92 @@ +# +# 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 json + +from twisted.python.log import err +from twisted.web.resource import Resource +from twisted.web.server import NOT_DONE_YET + +from pixelated.resources import respond_json_deferred, BaseResource, handle_error_deferred +from pixelated.support import replier + + +class MailTags(Resource): + + isLeaf = True + + def __init__(self, mail_id, mail_service): + Resource.__init__(self) + self._mail_service = mail_service + self._mail_id = mail_id + + def render_POST(self, request): + new_tags = json.loads(request.content.read()).get('newtags') + + d = self._mail_service.update_tags(self._mail_id, new_tags) + d.addCallback(lambda mail: respond_json_deferred(mail.as_dict(), request)) + + def handle403(failure): + failure.trap(ValueError) + return respond_json_deferred(failure.getErrorMessage(), request, 403) + d.addErrback(handle403) + return NOT_DONE_YET + + +class Mail(Resource): + + def __init__(self, mail_id, mail_service): + Resource.__init__(self) + self.putChild('tags', MailTags(mail_id, mail_service)) + self._mail_id = mail_id + self._mail_service = mail_service + + def render_GET(self, request): + def populate_reply(mail): + mail_dict = mail.as_dict() + current_user = self._mail_service.account_email + sender = mail.headers.get('Reply-to', mail.headers.get('From')) + to = mail.headers.get('To', []) + ccs = mail.headers.get('Cc', []) + mail_dict['replying'] = replier.generate_recipients(sender, to, ccs, current_user) + return mail_dict + + d = self._mail_service.mail(self._mail_id) + d.addCallback(lambda mail: populate_reply(mail)) + d.addCallback(lambda mail_dict: respond_json_deferred(mail_dict, request)) + d.addErrback(handle_error_deferred, request) + + return NOT_DONE_YET + + def render_DELETE(self, request): + def response_failed(failure): + err(failure, 'something failed') + request.finish() + + d = self._mail_service.delete_mail(self._mail_id) + d.addCallback(lambda _: respond_json_deferred(None, request)) + d.addErrback(response_failed) + return NOT_DONE_YET + + +class MailResource(BaseResource): + + def __init__(self, services_factory): + BaseResource.__init__(self, services_factory) + + def getChild(self, mail_id, request): + _mail_service = self.mail_service(request) + return Mail(mail_id, _mail_service) |