From bae9550237b411b4c8745e53f3103e769814b89a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20R=2E=20Sede=C3=B1o?= Date: Sat, 2 May 2020 20:11:51 -0400 Subject: [PATCH] views: zwrite view --- roost_backend/serializers.py | 14 ++++++++++++++ roost_backend/urls_v1.py | 1 + roost_backend/views.py | 16 +++++++++++++++- 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/roost_backend/serializers.py b/roost_backend/serializers.py index 4a00759..1a1cb37 100644 --- a/roost_backend/serializers.py +++ b/roost_backend/serializers.py @@ -160,3 +160,17 @@ class Meta: # pylint: disable=no-member, protected-access MessageSerializer._declared_fields['class'] = serializers.CharField(source='zclass') # pylint: enable=no-member, protected-access + + +class OutgoingMessageSerializer(serializers.Serializer): + instance = serializers.CharField() + recipient = serializers.CharField() + opcode = serializers.CharField(default='') + signature = serializers.CharField(default='') + message = serializers.CharField() + + +# class is a reserved word, so let's do this the hard way. +# pylint: disable=no-member, protected-access +OutgoingMessageSerializer._declared_fields['class'] = serializers.CharField() +# pylint: enable=no-member, protected-access diff --git a/roost_backend/urls_v1.py b/roost_backend/urls_v1.py index c18d330..a114fd5 100644 --- a/roost_backend/urls_v1.py +++ b/roost_backend/urls_v1.py @@ -13,4 +13,5 @@ path('messages', views.MessageView.as_view()), path('bytime', views.MessageByTimeView.as_view()), path('zephyrcreds', views.ZephyrCredsView.as_view()), + path('zwrite', views.ZWriteView.as_view()), ] diff --git a/roost_backend/views.py b/roost_backend/views.py index 693de1c..3eb2a05 100644 --- a/roost_backend/views.py +++ b/roost_backend/views.py @@ -194,6 +194,20 @@ def post(self, request): }) +@method_decorator(COMMON_DECORATORS, name='dispatch') +class ZWriteView(APIView): + serializer_class = serializers.OutgoingMessageSerializer + + def post(self, request): + serializer = self.serializer_class(data=request.data) + serializer.is_valid(raise_exception=True) + request.user.send_to_user_process({ + 'type': 'zwrite', + 'message': serializer.validated_data, + }) + return Response() + + # Roost's endpoints: # Done: # app.post('/v1/auth @@ -205,11 +219,11 @@ def post(self, request): # app.post('/v1/unsubscribe', requireUser # app.get('/v1/messages', requireUser # app.get('/v1/bytime', requireUser +# app.post('/v1/zwrite', requireUser # Stubbed: # app.get('/v1/zephyrcreds', requireUser # app.post('/v1/zephyrcreds', requireUser # To do: -# app.post('/v1/zwrite', requireUser # Also, a websocket at /v1/socket/websocket # message types: