diff --git a/sensorsafrica/api/v1/filters.py b/sensorsafrica/api/v1/filters.py index 3cee53b..3989a2e 100644 --- a/sensorsafrica/api/v1/filters.py +++ b/sensorsafrica/api/v1/filters.py @@ -1,9 +1,30 @@ import django_filters +from django.db import models -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": ["exact"], + "last_notify": ["exact", "gte", "lte"]} + filter_overrides = { + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + }, + } + +class SensorFilter(django_filters.FilterSet): + class Meta: + model = SensorData + fields = { + "sensor": ["exact"], + "timestamp": ["exact", "gte", "lte"] + } + filter_overrides = { + models.DateTimeField: { + 'filter_class': django_filters.IsoDateTimeFilter, + }, + } 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):