views.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from urllib import response
  2. from rest_framework import viewsets, views
  3. from rest_framework.response import Response
  4. from rest_framework.parsers import JSONParser
  5. from .models import ProgrammedReport
  6. from .serializers import ProgrammedReportSerializer
  7. from .permissions import IsOmixomUser
  8. from django.conf import settings
  9. from django.utils import timezone
  10. from rest_framework import status
  11. # API de Programmed Reports:
  12. # Requisitos:
  13. # - Especificar el TOKEN del usuario en el HTTP Header "AUTHORIZATION".
  14. # - Las requests deben ser JSON.
  15. # - No es necesario enviar el field user_id, esto es seteado automaticamente al recibir el TOKEN.
  16. # Endpoints: (BASE_URL: /api/preports)
  17. # - (List) GET / -> Obtener la lista de todos los Programmed Report
  18. # - (Create) POST / -> Crear un nuevo Programmed Report
  19. # - (Retrieve) GET /{id}/ -> Obtener la informacion de un Programmed Report
  20. # - (Update) PUT /{id}/ -> Actualizar un Programmed Report (requiere todos los fields)
  21. # - (Partial_Update) PATCH /{id}/ -> Actualizar algunos fields de un Programmed Report
  22. # - (Delete) DELETE /{id}/ -> Elimina un Programmed Report
  23. class ProgrammedReportViewSet(viewsets.ModelViewSet):
  24. # El ViewSet solo es valido si el Token enviado es de un usuario de Omixom.
  25. permission_classes = [IsOmixomUser]
  26. serializer_class = ProgrammedReportSerializer
  27. # Solo se devuelven los modelos para el user_id asociado al token. (Ver IsOmixomUser)
  28. def get_queryset(self):
  29. user_id = self.request.data["user_id"]
  30. qs = ProgrammedReport.objects.filter(user_id=user_id)
  31. return qs
  32. # Endpoint para la confirmacion de envio de un reporte programado por parte de Clima:
  33. # Por el momento no es usado:
  34. class ProgrammedReportSentConfirmation(views.APIView):
  35. parser_classes = [JSONParser]
  36. def post(self, request, format=None):
  37. if(settings.PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN != request.META.get("HTTP_AUTHORIZATION")):
  38. return Response("Invalid Access Credentials.", status.HTTP_403_FORBIDDEN)
  39. report = ProgrammedReport.objects.filter(id=request.data.get("id")).first()
  40. if report is None:
  41. return Response("Invalid Report.", status.HTTP_400_BAD_REQUEST)
  42. report.last_report_date = timezone.now()
  43. report.save()
  44. return Response("Ok", status.HTTP_200_OK)