From 5a2f2148ef61d0076133effbb26adee640d07212 Mon Sep 17 00:00:00 2001 From: Yoann Schneider <yschneider@teklia.com> Date: Fri, 22 Oct 2021 13:49:58 +0200 Subject: [PATCH] view template on django admin --- arkindex/dataimport/admin.py | 4 ++-- .../migrations/0043_dataimport_template.py | 19 +++++++++++++++++++ arkindex/dataimport/models.py | 11 +++++++++++ arkindex/dataimport/serializers/imports.py | 9 +++++++++ arkindex/dataimport/tests/test_imports.py | 7 ++++--- arkindex/dataimport/tests/test_repos.py | 6 ++++-- .../dataimport/tests/test_workflows_api.py | 2 ++ 7 files changed, 51 insertions(+), 7 deletions(-) create mode 100644 arkindex/dataimport/migrations/0043_dataimport_template.py diff --git a/arkindex/dataimport/admin.py b/arkindex/dataimport/admin.py index 9e3efcea10..d775bb5ce2 100644 --- a/arkindex/dataimport/admin.py +++ b/arkindex/dataimport/admin.py @@ -36,12 +36,12 @@ class DataImportAdmin(admin.ModelAdmin): list_display = ('id', 'creator', 'corpus', 'state', 'mode') list_filter = [('mode', EnumFieldListFilter), ] fieldsets = ( - (None, {'fields': ('id', 'creator', 'corpus', 'state', 'mode', 'workflow', 'activity_state')}), + (None, {'fields': ('id', 'creator', 'corpus', 'state', 'mode', 'workflow', 'activity_state', 'template')}), ('Elements filters', { 'fields': ('element', 'element_type', 'folder_type', 'name_contains', 'best_class') }), ) - readonly_fields = ('id', 'workflow', 'state', 'activity_state') + readonly_fields = ('id', 'workflow', 'state', 'activity_state', 'template') raw_id_fields = ('element', ) inlines = [DataFileInline, WorkerRunInline, ElementInline] diff --git a/arkindex/dataimport/migrations/0043_dataimport_template.py b/arkindex/dataimport/migrations/0043_dataimport_template.py new file mode 100644 index 0000000000..11b20cf56b --- /dev/null +++ b/arkindex/dataimport/migrations/0043_dataimport_template.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.6 on 2021-11-18 12:13 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('dataimport', '0042_alter_workeractivity_constraints'), + ] + + operations = [ + migrations.AddField( + model_name='dataimport', + name='template', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='applications', to='dataimport.dataimport'), + ), + ] diff --git a/arkindex/dataimport/models.py b/arkindex/dataimport/models.py index 6660737e80..14f9575d58 100644 --- a/arkindex/dataimport/models.py +++ b/arkindex/dataimport/models.py @@ -42,6 +42,7 @@ class DataImportMode(Enum): IIIF = 'iiif' Workers = 'workers' Transkribus = 'transkribus' + Template = 'template' class DataImport(IndexableModel): @@ -106,8 +107,18 @@ class DataImport(IndexableModel): # Use elements cache executing the workflow use_cache = models.BooleanField(default=False) + # Allows to use a GPU when executing the workflow use_gpu = models.BooleanField(default=False, blank=True) + # Refers a workflow template + template = models.ForeignKey( + 'dataimport.DataImport', + on_delete=models.SET_NULL, + null=True, + blank=True, + related_name='applications', + ) + class Meta: ordering = ['corpus', '-created'] diff --git a/arkindex/dataimport/serializers/imports.py b/arkindex/dataimport/serializers/imports.py index a99ad4f04b..c21bd09a33 100644 --- a/arkindex/dataimport/serializers/imports.py +++ b/arkindex/dataimport/serializers/imports.py @@ -72,6 +72,13 @@ class DataImportSerializer(DataImportLightSerializer): max_length=250 ) + template_id = serializers.PrimaryKeyRelatedField( + queryset=DataImport.objects.none(), + allow_null=True, + source='template', + style={'base_template': 'input.html'} + ) + class Meta(DataImportLightSerializer.Meta): fields = DataImportLightSerializer.Meta.fields + ( 'files', @@ -84,6 +91,7 @@ class DataImportSerializer(DataImportLightSerializer): 'load_children', 'use_cache', 'use_gpu', + 'template_id' ) read_only_fields = DataImportLightSerializer.Meta.read_only_fields + ( 'files', @@ -92,6 +100,7 @@ class DataImportSerializer(DataImportLightSerializer): 'folder_type', 'use_cache', 'use_gpu', + 'template_id' ) def __init__(self, *args, **kwargs): diff --git a/arkindex/dataimport/tests/test_imports.py b/arkindex/dataimport/tests/test_imports.py index 6584020086..3c936c4c38 100644 --- a/arkindex/dataimport/tests/test_imports.py +++ b/arkindex/dataimport/tests/test_imports.py @@ -451,7 +451,7 @@ class TestImports(FixtureAPITestCase): If no activities exists for this process, it is deleted directly. """ self.client.force_login(self.user) - with self.assertNumQueries(12): + with self.assertNumQueries(13): response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.elts_process.id})) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) with self.assertRaises(DataImport.DoesNotExist): @@ -462,7 +462,7 @@ class TestImports(FixtureAPITestCase): A superuser is allowed to delete any dataimport """ self.client.force_login(self.superuser) - with self.assertNumQueries(9): + with self.assertNumQueries(10): response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.user_img_process.id})) self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) with self.assertRaises(DataImport.DoesNotExist): @@ -508,7 +508,7 @@ class TestImports(FixtureAPITestCase): worker_version=WorkerVersion.objects.get(worker__slug='reco'), state=WorkerActivityState.Processed, ) - with self.assertNumQueries(11): + with self.assertNumQueries(12): response = self.client.delete(reverse('api:import-details', kwargs={'pk': self.elts_process.id})) self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) with self.assertRaises(DataImport.DoesNotExist): @@ -770,6 +770,7 @@ class TestImports(FixtureAPITestCase): 'revision': None, 'state': 'unscheduled', 'workflow': None, + 'template_id': None, }) def test_retry_requires_login(self): diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py index 8659c53239..3748e1509c 100644 --- a/arkindex/dataimport/tests/test_repos.py +++ b/arkindex/dataimport/tests/test_repos.py @@ -359,7 +359,8 @@ class TestRepositories(FixtureTestCase): 'mode': DataImportMode.Repository.value, 'revision': self.serialized_revision, 'state': State.Unscheduled.value, - 'workflow': None + 'workflow': None, + 'template_id': None, }) # Thumbnails are not generated for Workers imports @@ -402,7 +403,8 @@ class TestRepositories(FixtureTestCase): 'mode': DataImportMode.Repository.value, 'revision': self.serialized_revision, 'state': State.Unscheduled.value, - 'workflow': None + 'workflow': None, + 'template_id': None }) # Thumbnails are generated for IIIF imports diff --git a/arkindex/dataimport/tests/test_workflows_api.py b/arkindex/dataimport/tests/test_workflows_api.py index 4d2cbda2ea..5f53cf935c 100644 --- a/arkindex/dataimport/tests/test_workflows_api.py +++ b/arkindex/dataimport/tests/test_workflows_api.py @@ -94,6 +94,7 @@ class TestWorkflows(FixtureAPITestCase): 'folder_type': None, 'element_type': 'page', 'element': None, + 'template_id': None, 'load_children': False, 'use_cache': False, 'use_gpu': False, @@ -148,6 +149,7 @@ class TestWorkflows(FixtureAPITestCase): 'workflow': None, 'folder_type': None, 'element_type': None, + 'template_id': None, 'load_children': True, 'use_cache': True, 'use_gpu': False, -- GitLab