From 39923ea2ba72454c8c6d23fe6b198b2946d0351a Mon Sep 17 00:00:00 2001
From: Mario Raciti <mario.raciti@inaf.it>
Date: Thu, 25 Mar 2021 17:58:14 +0100
Subject: [PATCH] TMSS-692: Add reports.py; refactoring

---
 .../src/tmss/tmssapp/adapters/CMakeLists.txt  |  1 +
 .../src/tmss/tmssapp/adapters/reports.py      | 21 +++++++++++++++++++
 .../tmss/tmssapp/viewsets/specification.py    | 12 +++--------
 3 files changed, 25 insertions(+), 9 deletions(-)
 create mode 100644 SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py

diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/CMakeLists.txt b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/CMakeLists.txt
index 457bdbabeb7..d3438271ca5 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/CMakeLists.txt
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/CMakeLists.txt
@@ -5,6 +5,7 @@ set(_py_files
     parset.py
     sip.py
     feedback.py
+    reports.py
     )
 
 python_install(${_py_files}
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
new file mode 100644
index 00000000000..7c2d2c11f6e
--- /dev/null
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/adapters/reports.py
@@ -0,0 +1,21 @@
+from lofar.sas.tmss.tmss.tmssapp import models
+from lofar.sas.tmss.tmss.tmssapp import serializers
+
+from rest_framework.request import Request
+
+import logging
+logger = logging.getLogger(__name__)
+
+
+def create_project_report(request: Request, project: models.Project) -> {}:
+    # TODO: Retrieve the information needed, all in one go.
+    project_pk = project.pk
+    result = {'project': project_pk}  # Object to be returned
+
+    # Add project_quota to result
+    # TODO: Do we also need quota's id?
+    project_quota = models.ProjectQuota.objects.get(project=project_pk)
+    project_quota_data = serializers.ProjectQuotaSerializer(project_quota, context={'request': request}).data
+    result['quota'] = [{k: project_quota_data[k] for k in ('resource_type_id', 'value')}, ]
+
+    return result
diff --git a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
index bca693a80a0..84a9df91c6e 100644
--- a/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
+++ b/SAS/TMSS/backend/src/tmss/tmssapp/viewsets/specification.py
@@ -22,6 +22,7 @@ from drf_yasg.openapi import Parameter
 from lofar.sas.tmss.tmss.tmssapp.viewsets.lofar_viewset import LOFARViewSet, LOFARNestedViewSet, AbstractTemplateViewSet, LOFARCopyViewSet
 from lofar.sas.tmss.tmss.tmssapp import models
 from lofar.sas.tmss.tmss.tmssapp import serializers
+from lofar.sas.tmss.tmss.tmssapp.adapters.reports import create_project_report
 from django.http import JsonResponse
 
 from datetime import datetime
@@ -354,15 +355,8 @@ class ProjectViewSet(LOFARViewSet):
     @action(methods=['get'], detail=True, url_name="report", name="Get Report")
     def report(self, request, pk=None):
         # TODO: Discuss about the endpoint choose. ATM is /project/<project-name>/report
-        # TODO: Decide how to retrieve the information needed: recipe of existing APIs or all in one go.
-
-        result = {} # Object to be returned
-        result['project_id'] = pk
-
-        project_quota = models.ProjectQuota.objects.get(project=pk)
-        project_quota_data = serializers.ProjectQuotaSerializer(project_quota, context={'request': request}).data
-        result['quota'] = project_quota_data
-
+        project = get_object_or_404(models.Project, pk=pk)
+        result = create_project_report(request, project)
         return Response(result, status=status.HTTP_200_OK)
 
 
-- 
GitLab