summaryrefslogtreecommitdiff
path: root/service/pixelated/resources/mail_resource.py
diff options
context:
space:
mode:
authorDuda Dornelles <dudassdornelles@gmail.com>2015-01-21 18:12:25 -0200
committerPixpoa pairing <pixpoapairing@pixelated-project.org>2015-01-21 18:12:25 -0200
commit8abb94a88e40fde249b562a841a5b0398582717e (patch)
treec2cc4c7a00e80fb85423cd3a0b7a25c076a710c4 /service/pixelated/resources/mail_resource.py
parent8310db57c7f1829497ebadddff65682392a60a27 (diff)
#224 App is working without klein - migration to twisted "complete"
Diffstat (limited to 'service/pixelated/resources/mail_resource.py')
-rw-r--r--service/pixelated/resources/mail_resource.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/service/pixelated/resources/mail_resource.py b/service/pixelated/resources/mail_resource.py
new file mode 100644
index 00000000..03873ffb
--- /dev/null
+++ b/service/pixelated/resources/mail_resource.py
@@ -0,0 +1,64 @@
+import json
+from pixelated.resources import respond_json
+from twisted.web.resource import Resource
+
+
+class MailTags(Resource):
+
+ isLeaf = True
+
+ def __init__(self, mail_id, mail_service, search_engine):
+ Resource.__init__(self)
+ self._search_engine = search_engine
+ self._mail_service = mail_service
+ self._mail_id = mail_id
+
+ def render_POST(self, request):
+ content_dict = json.loads(request.content.read())
+ new_tags = map(lambda tag: tag.lower(), content_dict['newtags'])
+ try:
+ self._mail_service.update_tags(self._mail_id, new_tags)
+ mail = self._mail_service.mail(self._mail_id)
+ self._search_engine.index_mail(mail)
+ except ValueError as ve:
+ return respond_json(ve.message, request, 403)
+ return respond_json(mail.as_dict(), request)
+
+
+class Mail(Resource):
+
+ def __init__(self, mail_id, mail_service, search_engine):
+ Resource.__init__(self)
+ self.putChild('tags', MailTags(mail_id, mail_service, search_engine))
+
+ self._search_engine = search_engine
+ self._mail_id = mail_id
+ self._mail_service = mail_service
+
+ def render_GET(self, request):
+ mail = self._mail_service.mail(self._mail_id)
+ return respond_json(mail.as_dict(), request)
+
+ def render_DELETE(self, request):
+ self._delete_mail(self._mail_id)
+ return respond_json(None, request)
+
+ def _delete_mail(self, mail_id):
+ mail = self._mail_service.mail(mail_id)
+ if mail.mailbox_name == 'TRASH':
+ self._mail_service.delete_permanent(mail_id)
+ self._search_engine.remove_from_index(mail_id)
+ else:
+ trashed_mail = self._mail_service.delete_mail(mail_id)
+ self._search_engine.index_mail(trashed_mail)
+
+
+class MailResource(Resource):
+
+ def __init__(self, mail_service, search_engine):
+ Resource.__init__(self)
+ self._mail_service = mail_service
+ self._search_engine = search_engine
+
+ def getChild(self, mail_id, request):
+ return Mail(mail_id, self._mail_service, self._search_engine)