diff --git a/atdb/taskdatabase/services/activities.py b/atdb/taskdatabase/services/activities.py index 198a103b2532d79ccfb921776e52b16e6688e5e4..e46653feb426961fbe657913121e46ca16c3030d 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 05d0c9c5ee4bd03a5c282d9b879080d621248411..027b738559de818cc5c39aaf891687ed62c21f1c 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 f7ba1aa9101378cbc143a46c57d3ae607bb88d1f..7f4a80d15cae42bc7ec64826d74106c4628d1407 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> {% else %} - diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py index 1ab90aecae8534b1d7743272ccc5ee3fd1941ae4..32e416248a1e82d694d50771c0be24b72ae1d52e 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