<div dir="ltr">Sure. At what time?</div><br><div class="gmail_quote"><div dir="ltr">On Wed, May 9, 2018 at 7:21 PM Paolo Bonzini <<a href="mailto:pbonzini@redhat.com">pbonzini@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 08/05/2018 21:32, Shubham Jain wrote:<br>
> Add text/plain support to ProjectMessageSerializer's create (POST) action and add corresponding test to it.<br>
> ---<br>
>  api/rest.py        | 13 ++++++++++++-<br>
>  tests/test_rest.py |  9 +++++++++<br>
>  2 files changed, 21 insertions(+), 1 deletion(-)<br>
> <br>
> diff --git a/api/rest.py b/api/rest.py<br>
> index 06faf57..4bd064d 100644<br>
> --- a/api/rest.py<br>
> +++ b/api/rest.py<br>
> @@ -23,7 +23,8 @@ from rest_framework.fields import SerializerMethodField, CharField, JSONField, E<br>
>  from rest_framework.relations import HyperlinkedIdentityField<br>
>  from rest_framework.response import Response<br>
>  import rest_framework<br>
> -from mbox import addr_db_to_rest<br>
> +from mbox import addr_db_to_rest, MboxMessage<br>
> +from rest_framework.parsers import JSONParser, BaseParser<br>
>  <br>
>  SEARCH_PARAM = 'q'<br>
>  <br>
> @@ -316,9 +317,19 @@ class StaticTextRenderer(renderers.BaseRenderer):<br>
>          else:<br>
>              return data<br>
>  <br>
> +class MessagePlainTextParser(BaseParser):<br>
> +    media_type = 'text/plain'<br>
<br>
Thinking more about it, 'message/rfc822' is a better content type.<br>
<br>
> +    def parse(self, stream, media_type=None, parser_context=None):<br>
> +       <br>
> +        data = stream.read().decode("utf-8")<br>
> +        return MboxMessage(data).get_json()<br>
<br>
Beautiful. :)<br>
<br>
Technically, the decode here is wrong, MboxMessage should use the raw<br>
bytes.  But that is a preexisting problem, we can fix it later.  I'll<br>
create an issue on GitHub.<br>
<br>
I'll apply the two patches after a little bit of testing.  Ok to meet on<br>
IRC tomorrow (morning European time) and discuss the next part?<br>
<br>
Paolo<br>
<br>
<br>
>  class MessagesViewSet(ProjectMessagesViewSetMixin,<br>
>                        BaseMessageViewSet, mixins.CreateModelMixin):<br>
>      serializer_class = MessageSerializer<br>
> +    parser_classes = (JSONParser, MessagePlainTextParser, )<br>
> +<br>
>      @detail_route(renderer_classes=[StaticTextRenderer])<br>
>      def mbox(self, request, *args, **kwargs):<br>
>          message = self.get_object()<br>
> diff --git a/tests/test_rest.py b/tests/test_rest.py<br>
> index 3baadd5..1911800 100755<br>
> --- a/tests/test_rest.py<br>
> +++ b/tests/test_rest.py<br>
> @@ -268,6 +268,15 @@ class RestTest(PatchewTestCase):<br>
>          self.assertEqual(resp.data['subject'], "[Qemu-devel] [PATCH v2 10/27] imx_fec: Reserve full 4K "<br>
>                           "page for the register file")<br>
>  <br>
> +    def test_create_text_message(self):<br>
> +        dp = self.get_data_path("0004-multiple-patch-reviewed.mbox.gz")<br>
> +        with open(dp, "r") as f:<br>
> +            data = f.read()<br>
> +        resp = self.api_client.post(self.PROJECT_BASE + "messages/", data, content_type='text/plain')<br>
> +        self.assertEqual(resp.status_code, 201)<br>
> +        resp_get = self.api_client.get(self.PROJECT_BASE + "messages/<a href="http://1469192015-16487-1-git-send-email-berrange@redhat.com/" rel="noreferrer" target="_blank">1469192015-16487-1-git-send-email-berrange@redhat.com/</a>")<br>
> +        self.assertEqual(resp_get.status_code, 200)<br>
> +        self.assertEqual(resp.data['subject'], "[Qemu-devel] [PATCH v4 0/2] Report format specific info for LUKS block driver")<br>
>  <br>
>      def test_message(self):<br>
>          series = self.apply_and_retrieve('0001-simple-patch.mbox.gz',<br>
> <br>
<br>
</blockquote></div>