From 1cfc40752a880368f32f9ed79395a5e265669bae Mon Sep 17 00:00:00 2001 From: khadija Date: Mon, 1 Feb 2021 15:14:58 +0300 Subject: [PATCH 1/5] add last_notify filter on nodes, sensorfilter --- sensorsafrica/api/v1/filters.py | 42 +++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/sensorsafrica/api/v1/filters.py b/sensorsafrica/api/v1/filters.py index 3cee53b..4223af1 100644 --- a/sensorsafrica/api/v1/filters.py +++ b/sensorsafrica/api/v1/filters.py @@ -1,9 +1,47 @@ import django_filters -from feinstaub.sensors.models import Node +from feinstaub.sensors.models import Node, SensorData class NodeFilter(django_filters.FilterSet): class Meta: model = Node - fields = {"location__country": ["exact"]} + fields = { + "location__country": ["iexact"], + "last_notify": ["gte", "lte"]} + filter_overrides = { + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + 'extra': lambda f: { + 'lookup_expr': 'gte', + }, + }, + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + 'extra': lambda f: { + 'lookup_expr': 'lte', + }, + }, + } + +class SensorFilter(django_filters.FilterSet): + class Meta: + model = SensorData + fields = { + "sensor": ["exact"], + "timestamp": ["gte", "lte"] + } + filter_overrides = { + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + 'extra': lambda f: { + 'lookup_expr': 'gte', + }, + }, + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + 'extra': lambda f: { + 'lookup_expr': 'lte', + }, + }, + } \ No newline at end of file From de4311ec7815a7629bfd99ced736361b14ead36e Mon Sep 17 00:00:00 2001 From: khadija Date: Mon, 1 Feb 2021 15:15:15 +0300 Subject: [PATCH 2/5] view class override --- sensorsafrica/api/v1/router.py | 5 +++-- sensorsafrica/api/v1/views.py | 9 ++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/sensorsafrica/api/v1/router.py b/sensorsafrica/api/v1/router.py index b90b3b0..c923328 100644 --- a/sensorsafrica/api/v1/router.py +++ b/sensorsafrica/api/v1/router.py @@ -11,7 +11,8 @@ NodeView, NowView, PostSensorDataView, - SensorDataView as SensorsAfricaSensorDataView, + SensorsAfricaSensorDataView, + VerboseSensorDataView, ) from rest_framework import routers @@ -20,7 +21,7 @@ router.register(r"push-sensor-data", PostSensorDataView) router.register(r"node", NodeView) router.register(r"sensor", SensorView) -router.register(r"data", SensorDataView) +router.register(r"data", VerboseSensorDataView) router.register(r"statistics", StatisticsView, basename="statistics") router.register(r"now", NowView) router.register(r"user", UsersView) diff --git a/sensorsafrica/api/v1/views.py b/sensorsafrica/api/v1/views.py index c984da3..822fbcd 100644 --- a/sensorsafrica/api/v1/views.py +++ b/sensorsafrica/api/v1/views.py @@ -16,10 +16,10 @@ from feinstaub.sensors.models import Node, SensorData from feinstaub.sensors.serializers import NowSerializer -from feinstaub.sensors.views import StandardResultsSetPagination +from feinstaub.sensors.views import SensorDataView, StandardResultsSetPagination from feinstaub.sensors.authentication import NodeUidAuthentication -from .filters import NodeFilter +from .filters import NodeFilter, SensorFilter from .serializers import LastNotifySensorDataSerializer, NodeSerializer, SensorDataSerializer class FilterView(mixins.ListModelMixin, viewsets.GenericViewSet): @@ -94,7 +94,10 @@ class PostSensorDataView(mixins.CreateModelMixin, queryset = SensorData.objects.all() -class SensorDataView(mixins.ListModelMixin, viewsets.GenericViewSet): +class VerboseSensorDataView(SensorDataView): + filter_class = SensorFilter + +class SensorsAfricaSensorDataView(mixins.ListModelMixin, viewsets.GenericViewSet): serializer_class = SensorDataSerializer def get_queryset(self): From 2969d0301cacedbdbda11cc3cff5ba2d2d0fe087 Mon Sep 17 00:00:00 2001 From: khadija Date: Mon, 1 Feb 2021 15:57:13 +0300 Subject: [PATCH 3/5] filter ovverides --- sensorsafrica/api/v1/filters.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/sensorsafrica/api/v1/filters.py b/sensorsafrica/api/v1/filters.py index 4223af1..1e93767 100644 --- a/sensorsafrica/api/v1/filters.py +++ b/sensorsafrica/api/v1/filters.py @@ -11,15 +11,6 @@ class Meta: filter_overrides = { models.DateTimeField: { 'filter_class': django_filters.IsoDateTimeFilter, - 'extra': lambda f: { - 'lookup_expr': 'gte', - }, - }, - models.DateTimeField: { - 'filter_class': django_filters.IsoDateTimeFilter, - 'extra': lambda f: { - 'lookup_expr': 'lte', - }, }, } @@ -34,14 +25,5 @@ class Meta: filter_overrides = { models.DateTimeField: { 'filter_class': django_filters.IsoDateTimeFilter, - 'extra': lambda f: { - 'lookup_expr': 'gte', - }, - }, - models.DateTimeField: { - 'filter_class': django_filters.IsoDateTimeFilter, - 'extra': lambda f: { - 'lookup_expr': 'lte', - }, }, } \ No newline at end of file From 08e1d9dca83c0d125c3a6519afa62df7ea315781 Mon Sep 17 00:00:00 2001 From: khadija Date: Mon, 1 Feb 2021 15:59:42 +0300 Subject: [PATCH 4/5] add exact to look up exp --- sensorsafrica/api/v1/filters.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sensorsafrica/api/v1/filters.py b/sensorsafrica/api/v1/filters.py index 1e93767..6e42261 100644 --- a/sensorsafrica/api/v1/filters.py +++ b/sensorsafrica/api/v1/filters.py @@ -7,7 +7,7 @@ class Meta: model = Node fields = { "location__country": ["iexact"], - "last_notify": ["gte", "lte"]} + "last_notify": ["exact", "gte", "lte"]} filter_overrides = { models.DateTimeField: { 'filter_class': django_filters.IsoDateTimeFilter, @@ -20,7 +20,7 @@ class Meta: model = SensorData fields = { "sensor": ["exact"], - "timestamp": ["gte", "lte"] + "timestamp": ["exact", "gte", "lte"] } filter_overrides = { models.DateTimeField: { From ca33127bc661ebe55ee05d81dd4275a4285540cc Mon Sep 17 00:00:00 2001 From: esir Date: Mon, 1 Feb 2021 16:52:29 +0300 Subject: [PATCH 5/5] Includes missing import --- sensorsafrica/api/v1/filters.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sensorsafrica/api/v1/filters.py b/sensorsafrica/api/v1/filters.py index 6e42261..3989a2e 100644 --- a/sensorsafrica/api/v1/filters.py +++ b/sensorsafrica/api/v1/filters.py @@ -1,4 +1,5 @@ import django_filters +from django.db import models from feinstaub.sensors.models import Node, SensorData @@ -6,7 +7,7 @@ class NodeFilter(django_filters.FilterSet): class Meta: model = Node fields = { - "location__country": ["iexact"], + "location__country": ["exact"], "last_notify": ["exact", "gte", "lte"]} filter_overrides = { models.DateTimeField: { @@ -26,4 +27,4 @@ class Meta: models.DateTimeField: { 'filter_class': django_filters.IsoDateTimeFilter, }, - } \ No newline at end of file + }