Quellcode durchsuchen

Modificaciónes al modelo y API de Programmed Report

Tomás Ponce Gessi vor 3 Jahren
Ursprung
Commit
88fd7169c4
3 geänderte Dateien mit 42 neuen und 24 gelöschten Zeilen
  1. 18 0
      app/api/migrations/0002_alter_programmedreport_option.py
  2. 22 22
      app/api/models.py
  3. 2 2
      app/api/serializers.py

+ 18 - 0
app/api/migrations/0002_alter_programmedreport_option.py

@@ -0,0 +1,18 @@
+# Generated by Django 4.0.4 on 2022-09-27 12:39
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('api', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='programmedreport',
+            name='option',
+            field=models.CharField(default='all', max_length=50),
+        ),
+    ]

+ 22 - 22
app/api/models.py

@@ -1,8 +1,10 @@
-from email.policy import default
 from django.db import models
 from .validators import json_email_array, json_not_empty_string_array
 from django.utils import timezone
 
+# TODO! Move to ENV file...
+PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN = "juwiV9MjP4r3NTsvd9qRsPQ2FMdk5soJjxksYKhruza3wskG23h4cygTEPiFAGo2"
+
 
 class ProgrammedReport(models.Model):
     REPORT_FORMATS = [
@@ -13,52 +15,50 @@ class ProgrammedReport(models.Model):
     name = models.CharField(max_length=100)
     user_id = models.CharField(max_length=2048)
     frequency = models.DurationField(default=timezone.timedelta(days=1))
-    notified_emails = models.JSONField(
-        validators=[json_not_empty_string_array, json_email_array])
-    last_report_date = models.DateTimeField(
-        blank=True, null=True, default=None)
     start_report_date = models.DateTimeField(
         default=timezone.now)
+    last_report_date = models.DateTimeField(
+        blank=True, null=True, default=None)
 
     # Valores que configuran al reporte:
     format = models.CharField(
         max_length=5, choices=REPORT_FORMATS)
-    option = models.CharField(max_length=50)
+    option = models.CharField(max_length=50, default="all")
     stations = models.JSONField(validators=[json_not_empty_string_array])
     modules = models.JSONField(validators=[json_not_empty_string_array])
+    notified_emails = models.JSONField(
+        validators=[json_not_empty_string_array, json_email_array])
 
     # Metodo que envía la petición a Clima para enviar el reporte.
     # TODO! Tecnicamente start_date y end_date podrían ser calculados por el modelo,
     # hay que ver si hay un caso borde que requiere de que el llamador especifique el rango.
-    # Basicamente: TODO! Testear
+    # Basicamente: Testear
     def send_report(self, start_date, end_date):
         import requests
-        import logging
         from django.conf import settings
-        logger = logging.getLogger('django')
 
         # Calculamos el formato en el que Clima requiere recibir los rangos.
         start = start_date.strftime("%d/%m/%Y %H:%M")
         end = end_date.strftime("%d/%m/%Y %H:%M")
-        response = requests.post(settings.CLIMA_URL + "/async_reports", {
+        response = requests.post(settings.CLIMA_URL + "/async_report_handler", {
             "format": self.format,
-            "code[]": self.stations,
-            "start": start,
-            "end": end,
+            "stations": self.stations,
+            "modules": self.modules,
             "option": self.option,
-            "selections": self.modules
-        })
-
-        # TODO! Testear y luego remover:
-        logger.info("Response: %s", response)
-        logger.info(response)
+            "start_date": start,
+            "end_date": end,
+            "notified_emails": self.notified_emails
+        }, headers={"AUTHORIZATION": PROGRAMMED_REPORTS_SERVICE_AUTH_TOKEN})
 
         if response.status_code != 200:
-            logger.error(
-                "No se pudo enviar el reporte asincrono: %s\n Response: %s", self, response)
+            import logging
+            logging.getLogger('django').error(
+                "No se pudo enviar el reporte asincrono: %s\n Reason: %s", self, response.reason)
             # TODO! Seria ideal enviar un email al administrador para ver que paso.
-            return
+            return False
+
         # TODO! Si se utiliza una Message Queue para la confirmación del envío entonces
         # hay que mover esto al listener de la Queue.
         self.last_report_date = timezone.now()
         self.save()
+        return True

+ 2 - 2
app/api/serializers.py

@@ -5,5 +5,5 @@ from .models import ProgrammedReport
 class ProgrammedReportSerializer(serializers.ModelSerializer):
     class Meta:
         model = ProgrammedReport
-        fields = ["id", "user_id", "report_type", "modules",
-                  "notified_emails", "last_report_date"]
+        fields = ["id", "name", "user_id", "frequency", "notified_emails", "start_report_date",
+                  "format", "option", "stations", "modules"]