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)