From c4e59ad51c41c81ab8180b38c6fbc803a7a1e95e Mon Sep 17 00:00:00 2001 From: Erwan Rouchet <rouchet@teklia.com> Date: Mon, 18 Mar 2019 08:01:49 +0000 Subject: [PATCH] No imports on disabled repos --- arkindex/dataimport/models.py | 5 +++++ arkindex/dataimport/tests/test_imports.py | 13 +++++++++++++ arkindex/dataimport/tests/test_repos.py | 20 +++++++++++++------- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/arkindex/dataimport/models.py b/arkindex/dataimport/models.py index 29c91598dd..754059443e 100644 --- a/arkindex/dataimport/models.py +++ b/arkindex/dataimport/models.py @@ -3,6 +3,7 @@ from django.contrib.postgres.fields import JSONField from django.template.defaultfilters import slugify from django.conf import settings from django.utils.functional import cached_property +from rest_framework.exceptions import ValidationError from enumfields import EnumField, Enum from arkindex.project.models import IndexableModel from arkindex.documents.models import Element, ElementType @@ -51,6 +52,8 @@ class DataImport(IndexableModel): Create a ponos workflow with a recipe according to configuration ''' assert self.workflow is None, 'A workflow is already setup' + if self.mode == DataImportMode.Repository and self.revision is not None and not self.revision.repo.enabled: + raise ValidationError('Git repository does not have any valid credentials') # Import data in Arkindex, then do the ML analysis tasks = { @@ -75,6 +78,8 @@ class DataImport(IndexableModel): self.save() def retry(self): + if self.mode == DataImportMode.Repository and self.revision is not None and not self.revision.repo.enabled: + raise ValidationError('Git repository does not have any valid credentials') if self.workflow: self.workflow.retry() else: diff --git a/arkindex/dataimport/tests/test_imports.py b/arkindex/dataimport/tests/test_imports.py index 1787d5ffe9..2fe9e385a7 100644 --- a/arkindex/dataimport/tests/test_imports.py +++ b/arkindex/dataimport/tests/test_imports.py @@ -172,6 +172,19 @@ class TestImports(FixtureAPITestCase): self.dataimport.refresh_from_db() self.assertEqual(self.dataimport.state, State.Unscheduled) + def test_retry_repo_disabled(self): + self.client.force_login(self.user) + self.dataimport.mode = DataImportMode.Repository + self.dataimport.revision = self.rev + self.dataimport.save() + self.dataimport.start() + self.dataimport.workflow.tasks.all().update(state=State.Error) + self.assertEqual(self.dataimport.state, State.Error) + self.creds.delete() + response = self.client.post(reverse('api:import-retry', kwargs={'pk': self.dataimport.id})) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.creds.save() + def test_failures_requires_login(self): self.dataimport.failures.create(path='path/to/file', message='something') response = self.client.get(reverse('api:import-failures', kwargs={'pk': self.dataimport.id})) diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py index 60caf2031e..0d2b6d5384 100644 --- a/arkindex/dataimport/tests/test_repos.py +++ b/arkindex/dataimport/tests/test_repos.py @@ -1,6 +1,7 @@ from arkindex.project.tests import FixtureTestCase from arkindex.dataimport.models import Repository, DataImport, DataImportMode from ponos.models import Workflow +from rest_framework.exceptions import ValidationError class TestRepositories(FixtureTestCase): @@ -29,13 +30,18 @@ class TestRepositories(FixtureTestCase): self.creds.delete() self.assertEqual(Workflow.objects.count(), 0) - with self.assertRaises(Exception): - DataImport.objects.create( - mode=DataImportMode.Repository, - revision=self.rev, - creator=self.superuser, - corpus=self.corpus, - ).start_import() + di = DataImport.objects.create( + mode=DataImportMode.Repository, + revision=self.rev, + creator=self.superuser, + corpus=self.corpus, + ) + + with self.assertRaises(ValidationError): + di.start() + + with self.assertRaises(ValidationError): + di.retry() self.assertEqual(Workflow.objects.count(), 0) self.creds.save() -- GitLab