From nobody Fri Apr 26 08:52:16 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 1526385783095177.4732235753586; Tue, 15 May 2018 05:03:03 -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 0B5B930D7E79; Tue, 15 May 2018 12:03:02 +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 E9A0417A61; Tue, 15 May 2018 12:03:01 +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 D44CA4BB78; Tue, 15 May 2018 12:03:01 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w4FC2xAb024638 for ; Tue, 15 May 2018 08:02:59 -0400 Received: by smtp.corp.redhat.com (Postfix) id D262830BE009; Tue, 15 May 2018 12:02:59 +0000 (UTC) Received: from mx1.redhat.com (ext-mx18.extmail.prod.ext.phx2.redhat.com [10.5.110.47]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CAB4B30BE003 for ; Tue, 15 May 2018 12:02:59 +0000 (UTC) Received: from mail-pl0-f52.google.com (mail-pl0-f52.google.com [209.85.160.52]) (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 160B53117119 for ; Tue, 15 May 2018 12:02:43 +0000 (UTC) Received: by mail-pl0-f52.google.com with SMTP id u6-v6so9303042pls.9 for ; Tue, 15 May 2018 05:02:43 -0700 (PDT) Received: from localhost.localdomain ([112.196.135.149]) by smtp.gmail.com with ESMTPSA id m14-v6sm19361135pgs.72.2018.05.15.05.02.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 15 May 2018 05:02:40 -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=A3zryublcUjb3YPQWGYv7YkDAOXcrA8WrQMu1tHKNlQ=; b=vBK183aIycna89xy+PsK/qHh8+xSuO5wx2gxvDFNrpGvxTJwOtGBu1mV0hoKflj57J CRLHIVZ8+MWOJ7muA0+r0SoMxEV9g7+GI9t6+41EoasEesHyKcaBttqNgjo3XJTJvIrB royL5JyfXA4XsPLFneXatrnvSGlqIZ+4b1Q0RARcQb254ZY0Mzz+p6C5JMvLohIQgAdL VUIooCajcMGP1XA3ViUFe6ptgg1aJGSF/PiMuW2L75cv2EBwmcB94NmO+lFDn3Wr621q LF23EpIYkhlFuiv2naBs78rUWKKTBe33fUOlx/Jteck03qsq9vvJyEvWdbXhs3w99YAQ QaCA== 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=A3zryublcUjb3YPQWGYv7YkDAOXcrA8WrQMu1tHKNlQ=; b=RdMmOI/7Qkm9c+jXcInUA7+UPOBA8JOrTQVT9VkFkVPNvupiMxgT7fbhTG6b1J5M9D Lh9bcXGfWP4iTXUlfo9sJBr4JMSlDnQybXAxHRD1NTfO/zwhOlUbB7JvzrRiLnj6mHLS 2I1JxRaxsydDK8PqwuV9rRv02uJwjXnMFacIk6wbefCd3e6GIivX5yRKqDibholCyG// 6vk/dgXHaBM4knR+lJaSmYLGPCVBqq3dBDv+zpPLA8PbR4OJ5KctWOWnP4OWT6whu7+D UkSDFq/vEmCWMQfFLrbWc96CYsGW6MAAE47yNnHoraSCwbDciZbCifcb/UBa9cF8t7e+ rWAw== X-Gm-Message-State: ALKqPwcGI5uBNWpWCRbXoIVDJ+FK+8GHgoT55XYynso3SlTY/ZVvoeYa Ezs1HgKD7Xx0WDGrgxfSHPOczw== X-Google-Smtp-Source: AB8JxZqjdMAHx18uG1DqLfB93D95sj2HQ3BBQuoFRw2GsXOtgBiufgbj8m8SWSxuIcYKuJIZHXVKSQ== X-Received: by 2002:a17:902:700a:: with SMTP id y10-v6mr14243822plk.265.1526385761649; Tue, 15 May 2018 05:02:41 -0700 (PDT) From: Shubham Jain To: patchew-devel@redhat.com Date: Tue, 15 May 2018 17:32:28 +0530 Message-Id: <20180515120228.47478-1-shubhamjain7495@gmail.com> X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Tue, 15 May 2018 12:02:43 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.47]); Tue, 15 May 2018 12:02:43 +0000 (UTC) for IP:'209.85.160.52' DOMAIN:'mail-pl0-f52.google.com' HELO:'mail-pl0-f52.google.com' FROM:'shubhamjain7495@gmail.com' RCPT:'' X-RedHat-Spam-Score: 1.552 * (DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM, NML_ADSP_CUSTOM_MED, NORMAL_HTTP_TO_IP, RCVD_IN_DNSWL_NONE, SPF_PASS, T_DKIM_INVALID) 209.85.160.52 mail-pl0-f52.google.com 209.85.160.52 mail-pl0-f52.google.com X-Scanned-By: MIMEDefang 2.84 on 10.5.110.47 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.26 X-loop: patchew-devel@redhat.com Cc: Shubham Jain Subject: [Patchew-devel] [PATCH v2] rest: add api/v1/messages endpoint (POST support) 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.46]); Tue, 15 May 2018 12:03:02 +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" To apply a single message to the project according to the group user is fro= m. For importer user, message is added to all recognised project. For other= users, message is added to all the projects recognised and maintained by t= he user. --- api/rest.py | 25 +++++++++++++++---- api/urls.py | 3 ++- tests/data/0023-multiple-project-patch.mbox.gz | Bin 0 -> 2274 bytes tests/data/0024-multiple-project-patch.json.gz | Bin 0 -> 2471 bytes tests/test_rest.py | 32 +++++++++++++++++++++= +++- 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 tests/data/0023-multiple-project-patch.mbox.gz create mode 100644 tests/data/0024-multiple-project-patch.json.gz diff --git a/api/rest.py b/api/rest.py index 1f81fe7..94b3162 100644 --- a/api/rest.py +++ b/api/rest.py @@ -17,7 +17,7 @@ from mod import dispatch_module_hook from .models import Project, Message from .search import SearchEngine from rest_framework import (permissions, serializers, viewsets, filters, - mixins, generics, renderers) + mixins, generics, renderers, status) from rest_framework.decorators import detail_route from rest_framework.fields import SerializerMethodField, CharField, JSONFi= eld, EmailField from rest_framework.relations import HyperlinkedIdentityField @@ -162,7 +162,6 @@ class AddressSerializer(serializers.Serializer): except: return [validated_data['address'], validated_data['address']] =20 - class BaseMessageSerializer(serializers.ModelSerializer): class Meta: model =3D Message @@ -175,6 +174,9 @@ class BaseMessageSerializer(serializers.ModelSerializer= ): 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']) + if 'project' in validated_data: + project =3D validated_data.pop('project') + return Message.objects.create(project=3Dproject, **validated_d= ata) return Message.objects.create(project=3Dself.context['project'], *= *validated_data) =20 # a message_id is *not* unique, so we can only list @@ -288,7 +290,6 @@ class SeriesViewSet(BaseMessageViewSet): filter_backends =3D (PatchewSearchFilter,) search_fields =3D (SEARCH_PARAM,) =20 - class ProjectSeriesViewSet(ProjectMessagesViewSetMixin, SeriesViewSet, mixins.DestroyModelMixin): def collect_patches(self, series): @@ -368,7 +369,7 @@ class MessagePlainTextParser(BaseParser): data =3D stream.read().decode("utf-8") return MboxMessage(data).get_json() =20 -class MessagesViewSet(ProjectMessagesViewSetMixin, +class ProjectMessagesViewSet(ProjectMessagesViewSetMixin, BaseMessageViewSet, mixins.CreateModelMixin): serializer_class =3D MessageSerializer parser_classes =3D (JSONParser, MessagePlainTextParser, ) @@ -388,6 +389,22 @@ class MessagesViewSet(ProjectMessagesViewSetMixin, context=3Dself.get_serializer_c= ontext()) return self.get_paginated_response(serializer.data) =20 +class MessagesViewSet(BaseMessageViewSet): + serializer_class =3D MessageSerializer + parser_classes =3D (JSONParser, MessagePlainTextParser, ) + =20 + def create(self, request, *args, **kwargs): + projects =3D [p for p in Project.objects.all() if p.recognizes(Mbo= xMessage(self.request.data['mbox']))] + if 'importers' not in self.request.user.groups.all(): + projects =3D set(projects) & set([p for p in Project.objects.a= ll() if p.maintained_by(self.request.user)]) + results =3D [] + for project in projects: + serializer =3D self.get_serializer(data=3Drequest.data) + serializer.is_valid(raise_exception=3DTrue) + serializer.save(project=3Dproject) + results.append(serializer.data) + return Response(OrderedDict([('count', len(results)),('results', r= esults)]), status=3Dstatus.HTTP_201_CREATED) + # Results =20 class HyperlinkedResultField(HyperlinkedIdentityField): diff --git a/api/urls.py b/api/urls.py index 64e9629..2fd4e0f 100644 --- a/api/urls.py +++ b/api/urls.py @@ -31,12 +31,13 @@ router.include_format_suffixes =3D False router.register('users', rest.UsersViewSet) router.register('projects', rest.ProjectsViewSet) router.register('series', rest.SeriesViewSet, base_name=3D'series') +router.register('messages', rest.MessagesViewSet) =20 projects_router =3D NestedDefaultRouter(router, 'projects', lookup=3D'proj= ects', trailing_slash=3DTrue) projects_router.include_format_suffixes =3D False projects_router.register('results', rest.ProjectResultsViewSet, base_name= =3D'results') projects_router.register('series', rest.ProjectSeriesViewSet, base_name=3D= 'series') -projects_router.register('messages', rest.MessagesViewSet, base_name=3D'me= ssages') +projects_router.register('messages', rest.ProjectMessagesViewSet, base_nam= e=3D'messages') =20 results_router =3D NestedDefaultRouter(projects_router, 'series', lookup= =3D'series', trailing_slash=3DTrue) results_router.include_format_suffixes =3D False diff --git a/tests/data/0023-multiple-project-patch.mbox.gz b/tests/data/00= 23-multiple-project-patch.mbox.gz new file mode 100644 index 0000000000000000000000000000000000000000..6d63736020c35a523cdef327a30= 22c759c941436 GIT binary patch literal 2274 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 literal 0 HcmV?d00001 diff --git a/tests/test_rest.py b/tests/test_rest.py index 7896e8a..2da5459 100755 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -37,6 +37,8 @@ class RestTest(PatchewTestCase): self.sp.prefix_tags =3D "block" self.sp.save() self.SUBPROJECT_BASE =3D '%sprojects/%d/' % (self.REST_BASE, self.= sp.id) + self.p2 =3D self.add_project("EDK 2", "edk2-devel@lists.01.org") + self.PROJECT_BASE_2 =3D '%sprojects/%d/' % (self.REST_BASE, self.p= 2.id) =20 self.admin =3D User.objects.get(username=3D'admin') self.USER_BASE =3D '%susers/%d/' % (self.REST_BASE, self.admin.id) @@ -64,7 +66,7 @@ class RestTest(PatchewTestCase): =20 def test_projects(self): resp =3D self.api_client.get(self.REST_BASE + 'projects/') - self.assertEquals(resp.data['count'], 2) + self.assertEquals(resp.data['count'], 3) self.assertEquals(resp.data['results'][0]['resource_uri'], self.PR= OJECT_BASE) self.assertEquals(resp.data['results'][0]['name'], "QEMU") self.assertEquals(resp.data['results'][0]['mailing_list'], "qemu-d= evel@nongnu.org") @@ -295,6 +297,34 @@ class RestTest(PatchewTestCase): 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") =20 + def test_create_message_without_project_pk(self): + dp =3D self.get_data_path("0024-multiple-project-patch.json.gz") + with open(dp, "r") as f: + data =3D f.read() + self.api_client.login(username=3Dself.user, password=3Dself.passwo= rd) + resp =3D self.api_client.post(self.REST_BASE + "messages/", data, = content_type=3D'application/json') + self.assertEqual(resp.status_code, 201) + self.assertEqual(resp.data['count'], 2) + resp_get =3D self.api_client.get(self.PROJECT_BASE + "messages/201= 80223132311.26555-2-marcandre.lureau@redhat.com/") + self.assertEqual(resp_get.status_code, 200) + self.assertEqual(resp_get.data['subject'], "[Qemu-devel] [PATCH 1/= 7] SecurityPkg/Tcg2Pei: drop Tcg2PhysicalPresenceLib dependency") + resp_get2 =3D self.api_client.get(self.PROJECT_BASE_2 + "messages/= 20180223132311.26555-2-marcandre.lureau@redhat.com/") + self.assertEqual(resp_get2.status_code, 200) + + def test_create_text_message_without_project_pk(self): + dp =3D self.get_data_path("0023-multiple-project-patch.mbox.gz") + with open(dp, "r") as f: + data =3D f.read() + self.api_client.login(username=3Dself.user, password=3Dself.passwo= rd) + resp =3D self.api_client.post(self.REST_BASE + "messages/", data, = content_type=3D'message/rfc822') + self.assertEqual(resp.status_code, 201) + self.assertEqual(resp.data['count'], 2) + resp_get =3D self.api_client.get(self.PROJECT_BASE + "messages/201= 80223132311.26555-2-marcandre.lureau@redhat.com/") + self.assertEqual(resp_get.status_code, 200) + self.assertEqual(resp_get.data['subject'], "[Qemu-devel] [PATCH 1/= 7] SecurityPkg/Tcg2Pei: drop Tcg2PhysicalPresenceLib dependency") + resp_get2 =3D self.api_client.get(self.PROJECT_BASE_2 + "messages/= 20180223132311.26555-2-marcandre.lureau@redhat.com/") + self.assertEqual(resp_get2.status_code, 200) + def test_message(self): series =3D self.apply_and_retrieve('0001-simple-patch.mbox.gz', self.p.id, '20160628014747.20971-= 1-famz@redhat.com') --=20 2.14.3 (Apple Git-98) _______________________________________________ Patchew-devel mailing list Patchew-devel@redhat.com https://www.redhat.com/mailman/listinfo/patchew-devel