Skip to content

Commit 6d28784

Browse files
committed
chore: add Now api endpoint, cleanup router
1 parent 95c3d69 commit 6d28784

File tree

2 files changed

+28
-29
lines changed

2 files changed

+28
-29
lines changed

sensorsafrica/api/v2/router.py

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from .views import (
55
CitiesView,
66
NodesView,
7+
NowView,
78
SensorDataStatsView,
89
SensorDataView,
910
SensorLocationsView,
@@ -12,34 +13,17 @@
1213
meta_data,
1314
)
1415

15-
stat_data_router = routers.DefaultRouter()
16-
stat_data_router.register(r"", SensorDataStatsView)
17-
18-
data_router = routers.DefaultRouter()
19-
data_router.register(r"", SensorDataView)
20-
21-
cities_router = routers.DefaultRouter()
22-
cities_router.register(r"", CitiesView, basename="cities")
23-
24-
nodes_router = routers.DefaultRouter()
25-
nodes_router.register(r"", NodesView, basename="map")
26-
27-
sensors_router = routers.DefaultRouter()
28-
sensors_router.register(r"", SensorsView, basename="sensors")
29-
30-
sensor_locations_router = routers.DefaultRouter()
31-
sensor_locations_router.register(r"", SensorLocationsView, basename="locations")
32-
33-
sensor_types_router = routers.DefaultRouter()
34-
sensor_types_router.register(r"", SensorTypesView, basename="sensor_types")
16+
router = routers.DefaultRouter()
17+
router.register(r"data", SensorDataView, basename="sensor-data")
18+
router.register(r"data/(?P<sensor_type>[air]+)", SensorDataStatsView, basename="sensor-data-stats")
19+
router.register(r"cities", CitiesView, basename="cities")
20+
router.register(r"nodes", NodesView, basename="nodes")
21+
router.register(r"now", NowView, basename="now")
22+
router.register(r"locations", SensorLocationsView, basename="sensor-locations")
23+
router.register(r"sensors", SensorsView, basename="sensors")
24+
router.register(r"sensor-types", SensorTypesView, basename="sensor-types")
3525

3626
api_urls = [
37-
url(r"data/(?P<sensor_type>[air]+)/", include(stat_data_router.urls)),
38-
url(r"data/", include(data_router.urls)),
39-
url(r"cities/", include(cities_router.urls)),
40-
url(r"nodes/", include(nodes_router.urls)),
41-
url(r"locations/", include(sensor_locations_router.urls)),
42-
url(r"sensors/", include(sensors_router.urls)),
43-
url(r"sensor-types/", include(sensor_types_router.urls)),
44-
url(r"meta/", meta_data),
27+
url(r"^", include(router.urls)),
28+
url(r"^meta/", meta_data),
4529
]

sensorsafrica/api/v2/views.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from rest_framework.decorators import api_view, authentication_classes
2424

2525
from feinstaub.sensors.views import SensorFilter, StandardResultsSetPagination
26-
26+
from feinstaub.sensors.serializers import NowSerializer
2727
from feinstaub.sensors.models import (
2828
Node,
2929
Sensor,
@@ -471,3 +471,18 @@ def get_database_last_updated():
471471
sensor_data_value = SensorDataValue.objects.latest('created')
472472
if sensor_data_value:
473473
return sensor_data_value.modified
474+
475+
476+
class NowView(mixins.ListModelMixin, viewsets.GenericViewSet):
477+
"""Show all public sensors active in the last 5 minutes with newest value"""
478+
479+
authentication_classes = [SessionAuthentication, TokenAuthentication]
480+
permission_classes = [IsAuthenticated]
481+
serializer_class = NowSerializer
482+
483+
def get_queryset(self):
484+
now = timezone.now()
485+
startdate = now - datetime.timedelta(minutes=5)
486+
return SensorData.objects.filter(
487+
sensor__public=True, modified__range=[startdate, now]
488+
)

0 commit comments

Comments
 (0)