From nobody Sat Apr 20 08:27:37 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=patchew-devel-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=patchew-devel-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1525504229698556.3558227107205; Sat, 5 May 2018 00:10:29 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1949C83F3D; Sat, 5 May 2018 07:10:29 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 076922E030; Sat, 5 May 2018 07:10:28 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 9AB2E4CAA7; Sat, 5 May 2018 07:10:28 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w457ANTZ004365 for ; Sat, 5 May 2018 03:10:23 -0400 Received: by smtp.corp.redhat.com (Postfix) id C8ACF60BEC; Sat, 5 May 2018 07:10:23 +0000 (UTC) Received: from mx1.redhat.com (ext-mx16.extmail.prod.ext.phx2.redhat.com [10.5.110.45]) by smtp.corp.redhat.com (Postfix) with ESMTPS id C09A460BE5 for ; Sat, 5 May 2018 07:10:20 +0000 (UTC) Received: from mail-pf0-f194.google.com (mail-pf0-f194.google.com [209.85.192.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id BB40130BEA4A for ; Sat, 5 May 2018 07:10:09 +0000 (UTC) Received: by mail-pf0-f194.google.com with SMTP id e9so15092181pfi.4 for ; Sat, 05 May 2018 00:10:09 -0700 (PDT) Received: from localhost.localdomain ([112.196.135.149]) by smtp.gmail.com with ESMTPSA id q8sm33000191pfh.26.2018.05.05.00.10.06 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 05 May 2018 00:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=ItY/NNGw2ufaO7yT87HwiTtTedkHtHY/kWjAbQHo9tQ=; b=YqW26lVDh6iG1XPdcZKhU8FpOwPG0QhoF/4/RzPBO8019g2tEFbccsaeGVd7w3Yhax ToLGQ4U6lk/spyHEts96tOmBOy/SCB9QhikBM1eCxMnag54fqQvkOCYVOplOMqAgOMtZ DQjU6bpBmodPHi8iAk2IZy5HL+o5rN3LhodfJCotOANmeKLnI80fyTvik0jxvMPVqjJj seBgxgaBa2QD8lV0P7YeWGX7AuQBVnjI3FBdQw7Br6TIpzrA0lqXwbeDYLJYXb0WQ5mH CUJtmRNbh9LWVsDD24uhFDVI8RM+QFo3QTWpH7RyPnVuBE2s6ok9LBs6ctNnoxVmWYCU jZ+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=ItY/NNGw2ufaO7yT87HwiTtTedkHtHY/kWjAbQHo9tQ=; b=GF7mXb8pp33QAzUJUW8MSUqFOvcDakb6LdbgDZX6aeX5rUk5U9wQExLZ7l0XC3Etru gvIhuppnEqiCIZwcNT69cCYFSfNU+QR9V0F5bc0rxFB4qk8LFfr74KT4RfLq6ysSEI5B 6dKXwWsBH5eit9LS1l3nSLyAEZEH+1+y2Piw3iIru7hkVfSmj/8SJND2wIdE69+6oOiq h9XEvhGNoayiDIpvOQonLjbxp23m/MfqIX/roR3SvOW5pdyV24w9KAcd/NAd+qVEsJjV nxTIIxmhY8Nn1WZSRAm9HKwHKGeceidi2LC0GLR/natrC3I9I6mvdWwm8ftMFVTR/t+r T50g== X-Gm-Message-State: ALQs6tDfrdO9hfMV6YVRNLg4Upqst9pdfx5MnGutfRu2A1se0XSwkLi0 zDkZWmmDJFyaPhaSWGGbh2TvMw== X-Google-Smtp-Source: AB8JxZqdxNuz/zr4a2iRCud5noHrxM1sJq55SYK5fh41DVKvMve79mTlTGGZknv/VHsJbed6os3bpg== X-Received: by 2002:a63:6742:: with SMTP id b63-v6mr10158579pgc.54.1525504208694; Sat, 05 May 2018 00:10:08 -0700 (PDT) From: Shubham Jain To: patchew-devel@redhat.com Date: Sat, 5 May 2018 12:39:56 +0530 Message-Id: <20180505070956.6665-1-shubhamjain7495@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Sat, 05 May 2018 07:10:09 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Sat, 05 May 2018 07:10:09 +0000 (UTC) for IP:'209.85.192.194' DOMAIN:'mail-pf0-f194.google.com' HELO:'mail-pf0-f194.google.com' FROM:'shubhamjain7495@gmail.com' RCPT:'' X-RedHat-Spam-Score: 1.55 * (DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, NML_ADSP_CUSTOM_MED, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_PASS, T_DKIM_INVALID) 209.85.192.194 mail-pf0-f194.google.com 209.85.192.194 mail-pf0-f194.google.com X-Scanned-By: MIMEDefang 2.84 on 10.5.110.45 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: patchew-devel@redhat.com Cc: Shubham Jain Subject: [Patchew-devel] [PATCH] rest: POST for message endpoint X-BeenThere: patchew-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Patchew development and discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: patchew-devel-bounces@redhat.com Errors-To: patchew-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.27]); Sat, 05 May 2018 07:10:29 +0000 (UTC) X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" This commit allows to create/POST message from browser - Add "create" method to MessageManager so that it calls save_mbox() - Add getter and setter for mbox - Rename the existing "mbox" field to e.g. "mbox_blob" - Fix nested writable serializer issue --- api/models.py | 39 +++++++++++++++++++++++++++++++-------- api/rest.py | 20 +++++++++++--------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/api/models.py b/api/models.py index 504f2c7..43b1037 100644 --- a/api/models.py +++ b/api/models.py @@ -247,6 +247,24 @@ class MessageManager(models.Manager): self.delete_subthread(r) msg.delete() =20 + def create(self,project, **validated_data): + mbox =3D validated_data.pop('mbox') + m =3D MboxMessage(mbox) + msg =3D Message(**validated_data) + msg.in_reply_to =3D m.get_in_reply_to() or "" + msg.stripped_subject =3D m.get_subject(strip_tags=3DTrue) + msg.version =3D m.get_version() + msg.prefixes =3D m.get_prefixes() + msg.is_series_head =3D m.is_series_head() + msg.is_patch =3D m.is_patch() + msg.patch_num =3D m.get_num()[0] + msg.project =3D project + msg.mbox =3D mbox + msg.save_mbox(mbox) + msg.save() + emit_event("MessageAdded", message=3Dmsg) + return msg + def add_message_from_mbox(self, mbox, user, project_name=3DNone): =20 def find_message_projects(m): @@ -321,20 +339,25 @@ class Message(models.Model): =20 objects =3D MessageManager() =20 - def save_mbox(self, mbox): - save_blob(mbox, self.message_id) + def save_mbox(self, mbox_blob): + save_blob(mbox_blob, self.message_id) =20 def get_mbox_obj(self): self.get_mbox() return self._mbox_obj =20 def get_mbox(self): - if hasattr(self, "mbox"): - return self.mbox - self.mbox =3D load_blob(self.message_id) - self._mbox_obj =3D MboxMessage(self.mbox) - return self.mbox - + if hasattr(self, "mbox_blob"): + return self.mbox_blob + self.mbox_blob =3D load_blob(self.message_id) + self._mbox_obj =3D MboxMessage(self.mbox_blob) + return self.mbox_blob + =20 + mbox =3D property(get_mbox) + @mbox.setter + def mbox(self,value): + self.mbox_blob =3D value + =20 def get_num(self): assert self.is_patch or self.is_series_head cur, total =3D 1, 1 diff --git a/api/rest.py b/api/rest.py index fc10b46..7c38d39 100644 --- a/api/rest.py +++ b/api/rest.py @@ -140,9 +140,13 @@ class BaseMessageSerializer(serializers.ModelSerialize= r): fields =3D ('resource_uri', 'message_id', 'subject', 'date', 'send= er', 'recipients') =20 resource_uri =3D HyperlinkedMessageField(view_name=3D'messages-detail') - recipients =3D AddressSerializer(many=3DTrue) - sender =3D AddressSerializer() + sender =3D AddressSerializer() =20 + =20 + def create(self, validated_data): + validated_data['recipients'] =3D self.fields['recipients'].create(= validated_data['recipients']) + validated_data['sender'] =3D self.fields['sender'].create(validate= d_data['sender']) + return Message.objects.create(project=3Dself.context['project'], *= *validated_data) =20 # a message_id is *not* unique, so we can only list class BaseMessageViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): @@ -156,7 +160,9 @@ class BaseMessageViewSet(mixins.ListModelMixin, viewset= s.GenericViewSet): class ProjectMessagesViewSetMixin(mixins.RetrieveModelMixin): def get_queryset(self): return self.queryset.filter(project=3Dself.kwargs['projects_pk']) - + def get_serializer_context(self): + return {'project': Project.objects.get(id=3Dself.kwargs['projects_= pk']), 'request': self.request} + =20 # Series =20 class ReplySerializer(BaseMessageSerializer): @@ -287,10 +293,7 @@ class MessageSerializer(BaseMessageSerializer): class Meta: model =3D Message fields =3D BaseMessageSerializer.Meta.fields + ('mbox', ) - - def get_mbox(self, obj): - return obj.get_mbox() - mbox =3D SerializerMethodField() + mbox =3D JSONField() =20 def get_fields(self): fields =3D super(MessageSerializer, self).get_fields() @@ -312,9 +315,8 @@ class StaticTextRenderer(renderers.BaseRenderer): return data =20 class MessagesViewSet(ProjectMessagesViewSetMixin, - BaseMessageViewSet): + BaseMessageViewSet, mixins.CreateModelMixin): serializer_class =3D MessageSerializer - @detail_route(renderer_classes=3D[StaticTextRenderer]) def mbox(self, request, *args, **kwargs): message =3D self.get_object() --=20 2.14.3 (Apple Git-98) _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel