Source code for apps.api.views.sensor_view

from rest_framework import status
from rest_framework.response import Response
from apps.api.serializers.serializers import (
    SensorSerializer
)
from apps.core.models.sensor import Sensor, SensorEnum
from apps.core.models.physical_unit import PhysicalUnit
from apps.api.exceptions import ApiException, ValidationException
from rest_framework.views import APIView
from apps.api.model_helper import get_sensor


[docs]class SensorCreating(APIView):
[docs] def post(self, request): serializer = SensorSerializer(data=request.data, many=True) if not serializer.is_valid() or serializer.data == []: raise ValidationException(f"Validation error: {serializer.errors}", status.HTTP_400_BAD_REQUEST) serializer.save() return Response(status=status.HTTP_201_CREATED, data=serializer.data)
[docs]class SingleSensorManagement(APIView):
[docs] def put(self, request, sensor_id): data = request.data sensor = get_sensor(sensor_id) serializer = SensorSerializer(sensor, data=data) if not serializer.is_valid(): raise ValidationException(f"Validation error: {serializer.errors}", status.HTTP_400_BAD_REQUEST) serializer.save() return Response(status=status.HTTP_200_OK, data=serializer.data)
[docs] def get(self, request, sensor_id): sensor = get_sensor(sensor_id) serialized = SensorSerializer(sensor) return Response(status=status.HTTP_200_OK, data=serialized.data)
[docs] def delete(self, request, sensor_id): sensor = get_sensor(sensor_id) sensor.soft_delete() return Response(status=status.HTTP_204_NO_CONTENT)
[docs]class MultipleSensorManagement(APIView): @staticmethod def _get_sensors(sensor_type): try: sensor_type = eval('SensorEnum.' + sensor_type) sensors = Sensor.objects.filter(sensor_type=sensor_type, deleted_at__isnull=True) except (SyntaxError, AttributeError): raise ApiException("Sensors does not exist", status.HTTP_404_NOT_FOUND) return sensors
[docs] def get(self, request): sensor_type = request.GET.get('sensor_type', '') sensors = self._get_sensors(sensor_type) serialized = SensorSerializer(sensors, many=True) return Response(status=status.HTTP_200_OK, data=serialized.data)
[docs] def delete(self, request): sensor_type = request.GET.get('sensor_type', '') sensors = self._get_sensors(sensor_type) for sensor in sensors: sensor.soft_delete() return Response(status=status.HTTP_204_NO_CONTENT)