[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