Skip to content

Commit

Permalink
rest: POST for message endpoint (plain text payload)
Browse files Browse the repository at this point in the history
Add message/rfc822 support to ProjectMessageSerializer's create (POST)
action and add corresponding test to it.

Message-Id: <20180508193207.7663-3-shubhamjain7495@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
shubhamdotjain authored and bonzini committed May 9, 2018
1 parent 32e038c commit 0cb897d
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
13 changes: 12 additions & 1 deletion api/rest.py
Expand Up @@ -23,7 +23,8 @@
from rest_framework.relations import HyperlinkedIdentityField
from rest_framework.response import Response
import rest_framework
from mbox import addr_db_to_rest
from mbox import addr_db_to_rest, MboxMessage
from rest_framework.parsers import JSONParser, BaseParser

SEARCH_PARAM = 'q'

Expand Down Expand Up @@ -316,9 +317,19 @@ def render(self, data, accepted_media_type=None, renderer_context=None):
else:
return data

class MessagePlainTextParser(BaseParser):
media_type = 'message/rfc822'

def parse(self, stream, media_type=None, parser_context=None):

data = stream.read().decode("utf-8")
return MboxMessage(data).get_json()

class MessagesViewSet(ProjectMessagesViewSetMixin,
BaseMessageViewSet, mixins.CreateModelMixin):
serializer_class = MessageSerializer
parser_classes = (JSONParser, MessagePlainTextParser, )

@detail_route(renderer_classes=[StaticTextRenderer])
def mbox(self, request, *args, **kwargs):
message = self.get_object()
Expand Down
9 changes: 9 additions & 0 deletions tests/test_rest.py
Expand Up @@ -268,6 +268,15 @@ def test_create_message(self):
self.assertEqual(resp.data['subject'], "[Qemu-devel] [PATCH v2 10/27] imx_fec: Reserve full 4K "
"page for the register file")

def test_create_text_message(self):
dp = self.get_data_path("0004-multiple-patch-reviewed.mbox.gz")
with open(dp, "r") as f:
data = f.read()
resp = self.api_client.post(self.PROJECT_BASE + "messages/", data, content_type='message/rfc822')
self.assertEqual(resp.status_code, 201)
resp_get = self.api_client.get(self.PROJECT_BASE + "messages/1469192015-16487-1-git-send-email-berrange@redhat.com/")
self.assertEqual(resp_get.status_code, 200)
self.assertEqual(resp.data['subject'], "[Qemu-devel] [PATCH v4 0/2] Report format specific info for LUKS block driver")

def test_message(self):
series = self.apply_and_retrieve('0001-simple-patch.mbox.gz',
Expand Down

0 comments on commit 0cb897d

Please sign in to comment.