From nobody Mon Apr 29 15:18:05 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 1525714694414118.88221493098752; Mon, 7 May 2018 10:38:14 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 18FBAC065E5B; Mon, 7 May 2018 17:38:13 +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 09D5760BE0; Mon, 7 May 2018 17:38:13 +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 F2B274CAAB; Mon, 7 May 2018 17:38:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w47HcClr014550 for ; Mon, 7 May 2018 13:38:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id BEB135D756; Mon, 7 May 2018 17:38:12 +0000 (UTC) Received: from mx1.redhat.com (ext-mx08.extmail.prod.ext.phx2.redhat.com [10.5.110.32]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B7E6A5D755 for ; Mon, 7 May 2018 17:38:09 +0000 (UTC) Received: from mail-pl0-f54.google.com (mail-pl0-f54.google.com [209.85.160.54]) (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 043A2C05FFC5 for ; Mon, 7 May 2018 17:37:58 +0000 (UTC) Received: by mail-pl0-f54.google.com with SMTP id t22-v6so90222plo.7 for ; Mon, 07 May 2018 10:37:57 -0700 (PDT) Received: from localhost.localdomain ([112.196.135.149]) by smtp.gmail.com with ESMTPSA id h8-v6sm32132775pgq.56.2018.05.07.10.37.54 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 07 May 2018 10:37:55 -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=wKShPx1DmOC9TOvb3304KFdzO8tf6xyolEtFt/GWktc=; b=ru7uHD3zXS3FvBxKy8XLIV5X2SEq4vn4hr5V5s5e4NofzV5B8Y8nXT5eHkixg1lQVA hy8naCob9aL5BjEiVVoAUzZf4zb8aM2Brc3w9HU72CqeDHUKXBfU1ghYPA1720+iOufK MaST5NqJHNdnuTJbA0QUzYuuwKO/08LuDKUF+9SvqIWXZZdcSVPW1XpymHyAiiegPaaJ pHvfqk74ZvNABhhHOpb79t+wMCiAkUF28yGJo6SeoST4aHrSFKDN7eqfDgAsinLqrQkP 3uoY/+QUJJWhNx1CspTbchSAGpDWLW6pbHqNAJU638MgXz+8zQnaHDUGEErviPaukHRn mhUA== 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=wKShPx1DmOC9TOvb3304KFdzO8tf6xyolEtFt/GWktc=; b=Azi24I3wP1tfHZpODV74QT45tU2B2AtJL9/QL6siqehGx2HqH1osjSAAzSeQLKRuzw ys4u41OK9Zz+4cLRjOOXtIJLt+xf3+N4eT5PNLGpwNyac2mqPoghMeUanqn3UsoSdcO3 JX3/M+wy7ws5x7akRd+TN+O19K/BTgWF6x4+59k3ddamiLfs/WTfVIzWESgtxDsFlvtn 63ue0cOL5XAgk/U37cr7y7ZQ7EwKnq91z5oGPyI9DcRYupQqYPR0Q1HyKSlJX2vjvUgF 3TyIbhNl3LLq1KF9xTYDqv4Cqhu2SBFLU/o7Lm2KPIeHq2nWTSmrb2i6yFjMFpMKjZpp vqgQ== X-Gm-Message-State: ALQs6tA238Y4NIwl9i+1QiOU8iH6fs3hLp5tFJEwPOHfYkvpAk1XgCfM 7AjW57aviA5c51SCWDYt5CO0Vg== X-Google-Smtp-Source: AB8JxZq8ZLnUCd7+SUPzOpi468wpqICyKMsxuSurHDBXUh0CKRD8CNOf1A/baCvfeRfg7yT+75TnQw== X-Received: by 2002:a63:7e09:: with SMTP id z9-v6mr30977219pgc.437.1525714676684; Mon, 07 May 2018 10:37:56 -0700 (PDT) From: Shubham Jain To: patchew-devel@redhat.com Date: Mon, 7 May 2018 23:07:42 +0530 Message-Id: <20180507173742.34683-1-shubhamjain7495@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Mon, 07 May 2018 17:37:58 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Mon, 07 May 2018 17:37:58 +0000 (UTC) for IP:'209.85.160.54' DOMAIN:'mail-pl0-f54.google.com' HELO:'mail-pl0-f54.google.com' FROM:'shubhamjain7495@gmail.com' RCPT:'' X-RedHat-Spam-Score: 1.551 * (DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, NML_ADSP_CUSTOM_MED, RCVD_IN_DNSWL_NONE, SPF_PASS, T_DKIM_INVALID) 209.85.160.54 mail-pl0-f54.google.com 209.85.160.54 mail-pl0-f54.google.com X-Scanned-By: MIMEDefang 2.78 on 10.5.110.32 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: patchew-devel@redhat.com Cc: Shubham Jain Subject: [Patchew-devel] [PATCH v2] 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.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Mon, 07 May 2018 17:38:13 +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 Message-Id: <20180505070956.6665-1-shubhamjain7495@gmail.com> --- api/models.py | 39 +++++++++++++++++++++++++++++++-------- api/rest.py | 22 ++++++++++++++-------- 2 files changed, 45 insertions(+), 16 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..b083edb 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() + =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,13 @@ class BaseMessageViewSet(mixins.ListModelMixin, viewse= ts.GenericViewSet): class ProjectMessagesViewSetMixin(mixins.RetrieveModelMixin): def get_queryset(self): return self.queryset.filter(project=3Dself.kwargs['projects_pk']) - + def get_serializer_context(self): + try: + context =3D {'project': Project.objects.get(id=3Dself.kwargs['= projects_pk']), 'request': self.request} + except:=20 + context =3D {'request': self.request} + return context + =20 # Series =20 class ReplySerializer(BaseMessageSerializer): @@ -287,10 +297,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 CharField() =20 def get_fields(self): fields =3D super(MessageSerializer, self).get_fields() @@ -312,9 +319,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