from urllib import response from rest_framework import viewsets, views from rest_framework.response import Response from rest_framework.parsers import JSONParser from .models import ProgrammedReport from .serializers import ProgrammedReportSerializer from .permissions import IsOmixomUser from django.conf import settings from django.utils import timezone from rest_framework import status # API de Programmed Reports: # Requisitos: # - Especificar el TOKEN del usuario en el HTTP Header "AUTHORIZATION". # - Las requests deben ser JSON. # - No es necesario enviar el field user_id, esto es seteado automaticamente al recibir el TOKEN. # Endpoints: (BASE_URL: /api/preports) # - (List) GET / -> Obtener la lista de todos los Programmed Report # - (Create) POST / -> Crear un nuevo Programmed Report # - (Retrieve) GET /{id}/ -> Obtener la informacion de un Programmed Report # - (Update) PUT /{id}/ -> Actualizar un Programmed Report (requiere todos los fields) # - (Partial_Update) PATCH /{id}/ -> Actualizar algunos fields de un Programmed Report # - (Delete) DELETE /{id}/ -> Elimina un Programmed Report class ProgrammedReportViewSet(viewsets.ModelViewSet): # El ViewSet solo es valido si el Token enviado es de un usuario de Omixom. permission_classes = [IsOmixomUser] serializer_class = ProgrammedReportSerializer # Solo se devuelven los modelos para el user_id asociado al token. (Ver IsOmixomUser) def get_queryset(self): user_id = self.request.data["user_id"] qs = ProgrammedReport.objects.filter(user_id=user_id) return qs # Endpoint para la confirmacion de envio de un reporte programado por parte de Clima: # Por el momento no es usado: class ProgrammedReportSentConfirmation(views.APIView): parser_classes = [JSONParser] def post(self, request, format=None): if(settings.PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN != request.META.get("HTTP_AUTHORIZATION")): return Response("Invalid Access Credentials.", status.HTTP_403_FORBIDDEN) report = ProgrammedReport.objects.filter(id=request.data.get("id")).first() if report is None: return Response("Invalid Report.", status.HTTP_400_BAD_REQUEST) report.last_report_date = timezone.now() report.save() return Response("Ok", status.HTTP_200_OK)