From e195f1514dff826f3e29ef35a024be7da2d6873f Mon Sep 17 00:00:00 2001 From: khadija Date: Fri, 11 Dec 2020 15:53:10 +0300 Subject: [PATCH 1/7] sensors endpoint --- sensorsafrica/api/v2/router.py | 6 +++++- sensorsafrica/api/v2/serializers.py | 2 +- sensorsafrica/api/v2/views.py | 23 +++++++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/sensorsafrica/api/v2/router.py b/sensorsafrica/api/v2/router.py index 6cc5a72..f913811 100644 --- a/sensorsafrica/api/v2/router.py +++ b/sensorsafrica/api/v2/router.py @@ -1,7 +1,7 @@ from rest_framework import routers from django.conf.urls import url, include -from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView +from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView, SensorsView data_router = routers.DefaultRouter() @@ -15,6 +15,9 @@ nodes_router.register(r"", NodesView, basename="map") +sensors_router = routers.DefaultRouter() +sensors_router.register(r"", SensorsView, basename="sensors") + sensors_location_router = routers.DefaultRouter() sensors_location_router.register(r"", SensorsLocationView, basename="location") @@ -23,4 +26,5 @@ url(r"cities/", include(city_router.urls)), url(r"nodes/", include(nodes_router.urls)), url(r"locations/", include(sensors_location_router.urls)), + url(r"sensors/", include(sensors_router.urls)), ] diff --git a/sensorsafrica/api/v2/serializers.py b/sensorsafrica/api/v2/serializers.py index 875b094..503ad44 100644 --- a/sensorsafrica/api/v2/serializers.py +++ b/sensorsafrica/api/v2/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from feinstaub.sensors.serializers import NestedSensorLocationSerializer +from feinstaub.sensors.serializers import NestedSensorLocationSerializer, SensorSerializer class SensorDataStatSerializer(serializers.Serializer): diff --git a/sensorsafrica/api/v2/views.py b/sensorsafrica/api/v2/views.py index d356227..a6a5d57 100644 --- a/sensorsafrica/api/v2/views.py +++ b/sensorsafrica/api/v2/views.py @@ -11,8 +11,8 @@ from django.db.models.functions import Cast, TruncHour, TruncDay, TruncMonth from rest_framework import mixins, pagination, viewsets -from ..models import SensorDataStat, LastActiveNodes, City, Node, SensorLocation -from .serializers import SensorDataStatSerializer, CitySerializer, SensorLocationSerializer +from ..models import SensorDataStat, LastActiveNodes, City, Node, Sensor, SensorLocation +from .serializers import SensorDataStatSerializer, CitySerializer, SensorSerializer, SensorLocationSerializer from feinstaub.sensors.views import StandardResultsSetPagination @@ -295,3 +295,22 @@ def create(self, request): return Response(serializer.data, status=204) return Response(serializer.errors, status=400) + +class SensorsView(viewsets.ViewSet): + authentication_classes = [SessionAuthentication, TokenAuthentication] + permission_classes = [IsAuthenticated] + pagination_class = StandardResultsSetPagination + + def list(self, request): + queryset = Sensor.objects.all() + serializer = SensorSerializer(queryset, many=True) + + return Response(serializer.data) + + def create(self, request): + serializer = SensorSerializer(data=request.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data, status=204) + + return Response(serializer.errors, status=400) From fe34512e264b179f88ca25c01daee992448da0da Mon Sep 17 00:00:00 2001 From: khadija Date: Fri, 11 Dec 2020 16:25:21 +0300 Subject: [PATCH 2/7] fix serializers --- sensorsafrica/api/v2/serializers.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sensorsafrica/api/v2/serializers.py b/sensorsafrica/api/v2/serializers.py index 503ad44..883678c 100644 --- a/sensorsafrica/api/v2/serializers.py +++ b/sensorsafrica/api/v2/serializers.py @@ -1,5 +1,6 @@ from rest_framework import serializers -from feinstaub.sensors.serializers import NestedSensorLocationSerializer, SensorSerializer +from feinstaub.sensors.serializers import NestedSensorLocationSerializer +from feinstaub.sensors.models import Sensor class SensorDataStatSerializer(serializers.Serializer): @@ -23,6 +24,10 @@ class CitySerializer(serializers.Serializer): def get_label(self, obj): return "{}, {}".format(obj.name, obj.country) +class SensorSerializer(serializers.ModelSerializer): + class Meta: + model = Sensor + fields = ('id', 'node', 'description', 'pin', 'sensor_type', 'public') class SensorLocationSerializer(NestedSensorLocationSerializer): class Meta(NestedSensorLocationSerializer.Meta): From e4d3827eb6cc94f598bd28f708eff46bde9a1012 Mon Sep 17 00:00:00 2001 From: khadija Date: Fri, 11 Dec 2020 16:31:03 +0300 Subject: [PATCH 3/7] authentication on post --- sensorsafrica/api/v2/views.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/sensorsafrica/api/v2/views.py b/sensorsafrica/api/v2/views.py index a6a5d57..8cc8a97 100644 --- a/sensorsafrica/api/v2/views.py +++ b/sensorsafrica/api/v2/views.py @@ -22,7 +22,7 @@ from rest_framework.response import Response from rest_framework.authentication import SessionAuthentication, TokenAuthentication -from rest_framework.permissions import IsAuthenticated +from rest_framework.permissions import IsAuthenticated, AllowAny from django.utils.decorators import method_decorator from django.views.decorators.cache import cache_page @@ -301,6 +301,13 @@ class SensorsView(viewsets.ViewSet): permission_classes = [IsAuthenticated] pagination_class = StandardResultsSetPagination + def get_permissions(self): + if self.action == 'create': + permission_classes = [IsAuthenticated] + else: + permission_classes = [AllowAny] + return [permission() for permission in permission_classes] + def list(self, request): queryset = Sensor.objects.all() serializer = SensorSerializer(queryset, many=True) From 8a0073568e52bd2fee4e37fcd694d1322235ec58 Mon Sep 17 00:00:00 2001 From: khadija Date: Fri, 11 Dec 2020 16:39:19 +0300 Subject: [PATCH 4/7] sensors type endpoint --- sensorsafrica/api/v2/router.py | 6 +++++- sensorsafrica/api/v2/serializers.py | 2 +- sensorsafrica/api/v2/views.py | 23 +++++++++++++++++++++-- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/sensorsafrica/api/v2/router.py b/sensorsafrica/api/v2/router.py index f913811..321848f 100644 --- a/sensorsafrica/api/v2/router.py +++ b/sensorsafrica/api/v2/router.py @@ -1,7 +1,7 @@ from rest_framework import routers from django.conf.urls import url, include -from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView, SensorsView +from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView, SensorsTypeView, SensorsView data_router = routers.DefaultRouter() @@ -21,10 +21,14 @@ sensors_location_router = routers.DefaultRouter() sensors_location_router.register(r"", SensorsLocationView, basename="location") +sensors_type_router = routers.DefaultRouter() +sensors_type_router.register(r"", SensorsTypeView, basename="sensors_type") + api_urls = [ url(r"data/(?P[air]+)/", include(data_router.urls)), url(r"cities/", include(city_router.urls)), url(r"nodes/", include(nodes_router.urls)), url(r"locations/", include(sensors_location_router.urls)), url(r"sensors/", include(sensors_router.urls)), + url(r"sensors-type/", include(sensors_type_router.urls)), ] diff --git a/sensorsafrica/api/v2/serializers.py b/sensorsafrica/api/v2/serializers.py index 883678c..8fa5296 100644 --- a/sensorsafrica/api/v2/serializers.py +++ b/sensorsafrica/api/v2/serializers.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from feinstaub.sensors.serializers import NestedSensorLocationSerializer +from feinstaub.sensors.serializers import NestedSensorLocationSerializer, NestedSensorTypeSerializer from feinstaub.sensors.models import Sensor diff --git a/sensorsafrica/api/v2/views.py b/sensorsafrica/api/v2/views.py index 8cc8a97..3c6a0f6 100644 --- a/sensorsafrica/api/v2/views.py +++ b/sensorsafrica/api/v2/views.py @@ -12,11 +12,11 @@ from rest_framework import mixins, pagination, viewsets from ..models import SensorDataStat, LastActiveNodes, City, Node, Sensor, SensorLocation -from .serializers import SensorDataStatSerializer, CitySerializer, SensorSerializer, SensorLocationSerializer +from .serializers import SensorDataStatSerializer, CitySerializer, NestedSensorTypeSerializer, SensorSerializer, SensorLocationSerializer from feinstaub.sensors.views import StandardResultsSetPagination -from feinstaub.sensors.models import SensorLocation, SensorData, SensorDataValue +from feinstaub.sensors.models import SensorLocation, SensorData, SensorDataValue, SensorType from django.utils.text import slugify @@ -321,3 +321,22 @@ def create(self, request): return Response(serializer.data, status=204) return Response(serializer.errors, status=400) + +class SensorsTypeView(viewsets.ViewSet): + authentication_classes = [SessionAuthentication, TokenAuthentication] + permission_classes = [IsAuthenticated] + pagination_class = StandardResultsSetPagination + + def list(self, request): + queryset = SensorType.objects.all() + serializer = NestedSensorTypeSerializer(queryset, many=True) + + return Response(serializer.data) + + def create(self, request): + serializer = NestedSensorTypeSerializer(data=request.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data, status=204) + + return Response(serializer.errors, status=400) \ No newline at end of file From 853afd8d72927ba3bf97ee558a04339aed538795 Mon Sep 17 00:00:00 2001 From: Khadija Mahanga Date: Fri, 11 Dec 2020 17:08:32 +0300 Subject: [PATCH 5/7] Update sensorsafrica/api/v2/views.py Co-authored-by: _ Kilemensi --- sensorsafrica/api/v2/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensorsafrica/api/v2/views.py b/sensorsafrica/api/v2/views.py index 3c6a0f6..cb6338c 100644 --- a/sensorsafrica/api/v2/views.py +++ b/sensorsafrica/api/v2/views.py @@ -339,4 +339,4 @@ def create(self, request): serializer.save() return Response(serializer.data, status=204) - return Response(serializer.errors, status=400) \ No newline at end of file + return Response(serializer.errors, status=400) From 9d3a908d0173e694f2101394ed7983e9990fa292 Mon Sep 17 00:00:00 2001 From: Khadija Mahanga Date: Fri, 11 Dec 2020 17:10:33 +0300 Subject: [PATCH 6/7] Update sensorsafrica/api/v2/views.py Co-authored-by: _ Kilemensi --- sensorsafrica/api/v2/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensorsafrica/api/v2/views.py b/sensorsafrica/api/v2/views.py index cb6338c..95734ae 100644 --- a/sensorsafrica/api/v2/views.py +++ b/sensorsafrica/api/v2/views.py @@ -322,7 +322,7 @@ def create(self, request): return Response(serializer.errors, status=400) -class SensorsTypeView(viewsets.ViewSet): +class SensorTypeView(viewsets.ViewSet): authentication_classes = [SessionAuthentication, TokenAuthentication] permission_classes = [IsAuthenticated] pagination_class = StandardResultsSetPagination From 4ae22a42e1ff42d74c00b312295a8dacd7f2ce28 Mon Sep 17 00:00:00 2001 From: khadija Date: Fri, 11 Dec 2020 17:11:45 +0300 Subject: [PATCH 7/7] spelling --- sensorsafrica/api/v2/router.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensorsafrica/api/v2/router.py b/sensorsafrica/api/v2/router.py index 321848f..7accd8d 100644 --- a/sensorsafrica/api/v2/router.py +++ b/sensorsafrica/api/v2/router.py @@ -1,7 +1,7 @@ from rest_framework import routers from django.conf.urls import url, include -from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView, SensorsTypeView, SensorsView +from .views import SensorDataStatView, CityView, NodesView, SensorsLocationView, SensorTypeView, SensorsView data_router = routers.DefaultRouter() @@ -21,8 +21,8 @@ sensors_location_router = routers.DefaultRouter() sensors_location_router.register(r"", SensorsLocationView, basename="location") -sensors_type_router = routers.DefaultRouter() -sensors_type_router.register(r"", SensorsTypeView, basename="sensors_type") +sensor_type_router = routers.DefaultRouter() +sensor_type_router.register(r"", SensorTypeView, basename="sensor_type") api_urls = [ url(r"data/(?P[air]+)/", include(data_router.urls)), @@ -30,5 +30,5 @@ url(r"nodes/", include(nodes_router.urls)), url(r"locations/", include(sensors_location_router.urls)), url(r"sensors/", include(sensors_router.urls)), - url(r"sensors-type/", include(sensors_type_router.urls)), + url(r"sensor-type/", include(sensor_type_router.urls)), ]