Skip to content
Snippets Groups Projects
Commit c4e59ad5 authored by Erwan Rouchet's avatar Erwan Rouchet Committed by Bastien Abadie
Browse files

No imports on disabled repos

parent 1bcc8ac2
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -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}))
......
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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment