| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- from urllib import response
- from django.db.models import ObjectDoesNotExist
- from django.http import HttpResponse
- from django.urls.exceptions import Http404
- from rest_framework import viewsets, views
- from rest_framework.exceptions import PermissionDenied
- 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 SendReportNow(views.APIView):
- permission_classes = [IsOmixomUser]
- def get(self, request, pk):
- """
- Send report right now, regardless of if it should be sent.
- """
- user_id = request.data["user_id"]
- try:
- preport: ProgrammedReport = ProgrammedReport.objects.get(pk=pk)
- except ObjectDoesNotExist:
- raise Http404
- if(int(preport.user_id) != int(user_id)):
- raise PermissionDenied(f"Su usuario no es dueño de este reporte({preport.user_id} != {user_id})")
- sent = preport.send_report_now()
- print("Se envio" if sent else "No se pudo enviar","el Programmed Report ID:", preport.id)
- return Response("Ok", status.HTTP_200_OK)
- 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)
|