From af4742c7da8748e9ab9734b331522cc7406b7e66 Mon Sep 17 00:00:00 2001
From: Vermaas <vermaas@astron.nl>
Date: Tue, 6 Feb 2024 17:36:56 +0100
Subject: [PATCH] experimenting with activities

---
 atdb/taskdatabase/services/activities.py      | 27 +++++--------------
 atdb/taskdatabase/services/signals.py         |  2 +-
 .../templates/taskdatabase/ingest/tasks.html  |  6 ++---
 atdb/taskdatabase/views.py                    |  2 +-
 4 files changed, 12 insertions(+), 25 deletions(-)

diff --git a/atdb/taskdatabase/services/activities.py b/atdb/taskdatabase/services/activities.py
index 198a103b..e46653fe 100644
--- a/atdb/taskdatabase/services/activities.py
+++ b/atdb/taskdatabase/services/activities.py
@@ -41,7 +41,7 @@ def calculate_ingested_fraction(this_task):
     return result
 
 
-def associate_activity(task):
+def associate_activity(task, save_task=True):
 
     if not task.activity:
 
@@ -60,8 +60,10 @@ def associate_activity(task):
             activity.save()
 
         task.activity = activity
-        task.save()
+        if save_task:
+            task.save()
 
+    return task.activity
 
 def update_activity(task):
     """
@@ -77,24 +79,9 @@ def update_activity(task):
     """
     logger.info(f'update_activity for task {task.id} with sas_id {task.sas_id} and status {task.status}')
 
-    try:
-        activity = Activity.objects.get(sas_id=task.sas_id)
-    except:
-        # no activity exists yet, create it
-        logger.info(f'create new activity for sas_id {task.sas_id}')
-
-        activity = Activity(sas_id=task.sas_id,
-                            workflow=task.workflow,
-                            project=task.project,
-                            filter=task.filter,
-                            priority=task.priority,
-                            archive=task.archive)
-        activity.save()
-
-    # associate an activity to this tasks
-    if not task.activity:
-        activity = Activity.objects.get(sas_id=task.sas_id)
-        task.activity = activity
+    # do not save the task,
+    # because this function is called from signals where the task.save is delayed on purpose to avoid recursion
+    activity = associate_activity(task, save_task=False)
 
     # depending on the status transition, perform calculations
     if task.status == State.STORED.value:
diff --git a/atdb/taskdatabase/services/signals.py b/atdb/taskdatabase/services/signals.py
index 05d0c9c5..027b7385 100644
--- a/atdb/taskdatabase/services/signals.py
+++ b/atdb/taskdatabase/services/signals.py
@@ -69,7 +69,7 @@ def handle_post_save(sender, **kwargs):
     """
     task = kwargs.get('instance')
 
-    # temporarily disconnect to avoid recursion.
+    # temporarily disconnect and save later, to avoid recursion.
     update_activity(task)
 
     disconnect_signals()
diff --git a/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html b/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
index f7ba1aa9..7f4a80d1 100644
--- a/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
@@ -24,12 +24,12 @@
                 {% endif %}
                 </td>
                 <td>{{ task.activity.ingestq_status }}</td>
-                <td>{{ task.sasid_ingested_fraction.completion }}%</td>
+                <td>{{ task.activity.ingested_fraction }}%</td>
                 <td>
-                    {% if task.sas_id_has_archived != None %}
+                    {% if task.activity.has_archived != None %}
                       <a href={{ task.sasid_path_to_lta }} target="_blank">
                           <img src="{% static 'taskdatabase/ldvlogo_small.png' %}" height="20" alt="link to LTA">
-                          {{ task.sas_id_has_archived }}
+                          {{ task.activity.has_archived }}
                       </a>&nbsp;
                     {% else %}
                     -
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 1ab90aec..32e41624 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -1717,4 +1717,4 @@ def AssociateActivities(request):
         activities.associate_activity(task)
         logger.info(f'{task.id} => {task.sas_id}')
 
-
+    return redirect('index')
\ No newline at end of file
-- 
GitLab