[Patchew-devel] [PATCH v2] Text to json convertor for mbox
Shubham Jain
shubhamjain7495 at gmail.com
Fri Apr 27 11:53:54 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"
Message-Id: <20180424160400.29938-1-shubhamjain7495 at gmail.com>
POST endpoint for messages
- Added test for text to json converter of Mbox
- Removed extra field from the dictionary object
---
api/rest.py | 21 +++++++++++----------
mbox.py | 18 ++++++++++++++++++
tests/test_mbox.py | 19 +++++++++++++++++++
3 files changed, 48 insertions(+), 10 deletions(-)
diff --git a/api/rest.py b/api/rest.py
index 381b569..917ed22 100644
--- a/api/rest.py
+++ b/api/rest.py
@@ -125,8 +125,8 @@ class BaseMessageSerializer(serializers.ModelSerializer):
resource_uri = HyperlinkedMessageField(view_name='messages-detail')
- recipients = SerializerMethodField()
- sender = SerializerMethodField()
+ # recipients = SerializerMethodField()
+ # sender = SerializerMethodField()
def format_name_addr(self, name, addr):
d = {}
@@ -135,12 +135,12 @@ class BaseMessageSerializer(serializers.ModelSerializer):
d['address'] = addr
return d
- def get_recipients(self, obj):
- return [self.format_name_addr(*x) for x in obj.get_recipients()]
+ # def get_recipients(self, obj):
+ # return [self.format_name_addr(*x) for x in obj.get_recipients()]
- def get_sender(self, obj):
- name, addr = obj.get_sender()
- return self.format_name_addr(*obj.get_sender())
+ # def get_sender(self, obj):
+ # name, addr = obj.get_sender()
+ # return self.format_name_addr(*obj.get_sender())
# a message_id is *not* unique, so we can only list
class BaseMessageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
@@ -285,7 +285,8 @@ class ProjectSeriesViewSet(ProjectMessagesViewSetMixin,
class MessageSerializer(BaseMessageSerializer):
class Meta:
model = Message
- fields = BaseMessageSerializer.Meta.fields + ('mbox', )
+ # fields = BaseMessageSerializer.Meta.fields + ('mbox', )
+ fields = '__all__'
def get_mbox(self, obj):
return obj.get_mbox()
@@ -311,9 +312,9 @@ class StaticTextRenderer(renderers.BaseRenderer):
return data
class MessagesViewSet(ProjectMessagesViewSetMixin,
- BaseMessageViewSet):
+ BaseMessageViewSet, mixins.CreateModelMixin):
serializer_class = MessageSerializer
-
+
@detail_route(renderer_classes=[StaticTextRenderer])
def mbox(self, request, *args, **kwargs):
message = self.get_object()
diff --git a/mbox.py b/mbox.py
index fe108f3..00336ba 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 = ''
@@ -269,3 +270,20 @@ class MboxMessage(object):
if c == 0:
return True
return False
+
+ def get_json(self):
+ """Return the JSON format of the mbox """
+ 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]
+ return msg
diff --git a/tests/test_mbox.py b/tests/test_mbox.py
index 8493df7..e4d69d2 100755
--- a/tests/test_mbox.py
+++ b/tests/test_mbox.py
@@ -13,6 +13,7 @@ import sys
import mbox
sys.path.append(os.path.dirname(__file__))
from patchewtest import PatchewTestCase, main
+import datetime
class MboxTest(PatchewTestCase):
@@ -52,5 +53,23 @@ Virtualization: qemu.org | libvirt.org
msg = mbox.MboxMessage(f.read())
self.assertTrue(msg.is_patch())
+ def test_get_json(self):
+ expected = {'message_id': '20160628014747.20971-1-famz at redhat.com',
+ 'in_reply_to': '',
+ 'date': datetime.datetime(2016, 6, 28, 1, 47, 47),
+ 'subject': '[Qemu-devel] [PATCH] quorum: Only compile when supported',
+ 'stripped_subject': 'quorum: Only compile when supported',
+ 'version': 1,
+ 'sender': '["Fam Zheng", "famz at redhat.com"]',
+ 'recipients': '[["qemu-devel at nongnu.org", "qemu-devel at nongnu.org"], ["Kevin Wolf", "kwolf at redhat.com"], ["Alberto Garcia", "berto at igalia.com"], ["qemu-block at nongnu.org", "qemu-block at nongnu.org"], ["Max Reitz", "mreitz at redhat.com"]]',
+ 'prefixes': '["Qemu-devel", "PATCH"]',
+ 'is_series_head': True,
+ 'is_patch': True,
+ 'patch_num': None }
+ dp = self.get_data_path("0001-simple-patch.mbox.gz")
+ with open(dp, "r") as f:
+ msg = mbox.MboxMessage(f.read()).get_json()
+ self.assertEqual(msg, expected)
+
if __name__ == '__main__':
main()
--
2.14.3 (Apple Git-98)
More information about the Patchew-devel
mailing list