diff --git a/kobo/apps/project_views/views.py b/kobo/apps/project_views/views.py index 7dc5c06700..cf8eee9465 100644 --- a/kobo/apps/project_views/views.py +++ b/kobo/apps/project_views/views.py @@ -113,7 +113,7 @@ def export(self, request, uid, obj_type): export_task_in_background.delay( export_task_uid=export_task.uid, username=user.username, - export_task_class=ProjectViewExportTask, + export_task_name="ProjectViewExportTask", ) return Response({'status': export_task.status}) diff --git a/kpi/tasks.py b/kpi/tasks.py index 5e70d1fcf9..18d342a09d 100644 --- a/kpi/tasks.py +++ b/kpi/tasks.py @@ -1,9 +1,9 @@ # coding: utf-8 import time -from typing import Type import constance import requests +from django.apps import apps from django.conf import settings from django.core import mail from django.core.management import call_command @@ -14,7 +14,7 @@ from kpi.constants import LIMIT_HOURS_23 from kpi.maintenance_tasks import remove_old_asset_snapshots, remove_old_import_tasks from kpi.models.asset import Asset -from kpi.models.import_export_task import ExportTask, ImportExportTask, ImportTask +from kpi.models.import_export_task import ExportTask, ImportTask @celery_app.task @@ -31,10 +31,10 @@ def export_in_background(export_task_uid): @celery_app.task def export_task_in_background( - export_task_uid: str, username: str, export_task_class: Type[ImportExportTask] + export_task_uid: str, username: str, export_task_name: str ) -> None: user = User.objects.get(username=username) - + export_task_class = apps.get_model(f'kpi.{export_task_name}') export_task = export_task_class.objects.get(uid=export_task_uid) export = export_task.run() if export.status == 'complete' and export.result: diff --git a/kpi/tests/test_export_tasks.py b/kpi/tests/test_export_tasks.py index 41489c5c49..3205d4cedd 100644 --- a/kpi/tests/test_export_tasks.py +++ b/kpi/tests/test_export_tasks.py @@ -27,7 +27,7 @@ def test_export_task_success(self, mock_get_project_view, mock_send_mail): self.task.run = Mock(return_value=self.task) export_task_in_background( - self.task.uid, self.user.username, ProjectViewExportTask + self.task.uid, self.user.username, 'ProjectViewExportTask' ) self.task.refresh_from_db() @@ -61,7 +61,7 @@ def test_invalid_export_task_uid(self, mock_get_project_view, mock_send_mail): ObjectDoesNotExist, 'ProjectViewExportTask matching query does not exist.' ): export_task_in_background( - 'invalid_uid', self.user.username, ProjectViewExportTask + 'invalid_uid', self.user.username, 'ProjectViewExportTask' ) mock_send_mail.assert_not_called() @@ -73,7 +73,7 @@ def test_invalid_username(self, mock_get_project_view, mock_send_mail): ObjectDoesNotExist, 'User matching query does not exist.' ): export_task_in_background( - self.task.uid, 'invalid_username', ProjectViewExportTask + self.task.uid, 'invalid_username', 'ProjectViewExportTask' ) mock_send_mail.assert_not_called() @@ -88,7 +88,7 @@ def test_export_task_error( mock_run_task.side_effect = Exception('Simulated task failure') export_task_in_background( - self.task.uid, self.user.username, ProjectViewExportTask + self.task.uid, self.user.username, 'ProjectViewExportTask' ) self.task.refresh_from_db() @@ -104,7 +104,7 @@ def test_email_not_sent_if_export_errors( mock_run_task.side_effect = Exception('Simulated task failure') export_task_in_background( - self.task.uid, self.user.username, ProjectViewExportTask + self.task.uid, self.user.username, 'ProjectViewExportTask' ) mock_send_mail.assert_not_called()