[Patchew-devel] [PATCH] Text to json convertor for mbox
Shubham Jain
shubhamjain7495 at gmail.com
Tue Apr 24 16:04:00 UTC 2018
Mbox would now return a dictionary object which would help REST API deserialize easily into model object.
[WIP] POST endpoint for messages.
It's a work in progress for creating new message which is improvement of legacy endpoint: "import"
---
api/rest.py | 19 ++++++++++++++++++-
mbox.py | 21 +++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git a/api/rest.py b/api/rest.py
index 6aa744d..ee814e8 100644
--- a/api/rest.py
+++ b/api/rest.py
@@ -303,8 +303,25 @@ class StaticTextRenderer(renderers.BaseRenderer):
return data
class MessagesViewSet(ProjectMessagesViewSetMixin,
- BaseMessageViewSet):
+ BaseMessageViewSet, mixins.CreateModelMixin):
serializer_class = MessageSerializer
+
+ def create(self, request, *args, **kwargs):
+ def find_message_projects(m):
+ return [p for p in Project.objects.all() if p.recognizes(m)]
+
+ msg = MboxMessage(request.data)
+ project = find_message_projects(msg)
+ msg.project = project
+ serializer = self.get_serializer(data=msg.get_json())
+ serializer.is_valid(raise_exception=True)
+ self.perform_create(serializer)
+ headers = self.get_success_headers(serializer.data)
+ return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
+
+
+ def perform_create(self, serializer):
+ serializer.save()
@detail_route(renderer_classes=[StaticTextRenderer])
def mbox(self, request, *args, **kwargs):
diff --git a/mbox.py b/mbox.py
index 3692cc6..6b42e8f 100644
--- a/mbox.py
+++ b/mbox.py
@@ -13,6 +13,7 @@ import email.utils
import email.header
import datetime
import re
+import json
def _parse_header(header):
r = ''
@@ -267,3 +268,23 @@ class MboxMessage(object):
if c == 0:
return True
return False
+
+ def get_json(self):
+ """
+ """
+ msg = {}
+ msg['message_id'] = self.get_message_id()
+ msg['in_reply_to'] = self.get_in_reply_to() or ""
+ msg['date'] = self.get_date()
+ msg['subject'] = self.get_subject()
+ msg['stripped_subject'] = self.get_subject(strip_tags=True)
+ msg['version'] = self.get_version()
+ msg['sender'] = json.dumps(self.get_from())
+ msg['recipients'] = json.dumps(self.get_to() + self.get_cc())
+ msg['prefixes']=json.dumps(self.get_prefixes())
+ msg['is_series_head'] = self.is_series_head()
+ msg['is_patch'] = self.is_patch()
+ msg['patch_num'] = self.get_num()[0]
+ msg['project'] = self.project
+ msg['mbox'] = self._mbox
+ return msg
--
2.14.3 (Apple Git-98)
More information about the Patchew-devel
mailing list