diff --git a/arkindex/dataimport/api.py b/arkindex/dataimport/api.py index 2b8f2a83988680dc4548adf0a67e8523a90d74bb..2103c385cc46dcd533a544f4cc8828fb5d659204 100644 --- a/arkindex/dataimport/api.py +++ b/arkindex/dataimport/api.py @@ -525,10 +525,15 @@ class RepositoryList(ListAPIView): } def get_queryset(self): - return Repository.objects.filter( - Q(corpora__isnull=True) - | Q(corpora__in=Corpus.objects.readable(self.request.user)) - ).distinct().order_by('url') + return Repository.objects \ + .filter( + Q(corpora__isnull=True) + | Q(corpora__in=Corpus.objects.readable(self.request.user)) + ) \ + .distinct() \ + .select_related('credentials') \ + .prefetch_related('corpora', 'workers') \ + .order_by('url') class AvailableRepositoriesList(ListCreateAPIView): diff --git a/arkindex/dataimport/tests/test_repos.py b/arkindex/dataimport/tests/test_repos.py index 5fb52a988b567f2b7af1410a5d686fb80cdebb15..7d4966f51a38fc56e167bf61c1169594cff7901e 100644 --- a/arkindex/dataimport/tests/test_repos.py +++ b/arkindex/dataimport/tests/test_repos.py @@ -71,7 +71,8 @@ class TestRepositories(FixtureTestCase): self.assertEqual(Workflow.objects.count(), 0) def test_list_repository_requires_login(self): - response = self.client.get(reverse('api:repository-list')) + with self.assertNumQueries(0): + response = self.client.get(reverse('api:repository-list')) self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN) def test_list_repository_with_workers(self): @@ -82,7 +83,8 @@ class TestRepositories(FixtureTestCase): repository=self.repo ) self.client.force_login(self.user) - response = self.client.get(reverse('api:repository-list')) + with self.assertNumQueries(6): + response = self.client.get(reverse('api:repository-list')) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -103,7 +105,8 @@ class TestRepositories(FixtureTestCase): def test_list_repository_external_user(self): self.client.force_login(self.user) - response = self.client.get(reverse('api:repository-list')) + with self.assertNumQueries(6): + response = self.client.get(reverse('api:repository-list')) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -119,7 +122,8 @@ class TestRepositories(FixtureTestCase): def test_list_repository_internal_user(self): self.client.force_login(self.internal_user) - response = self.client.get(reverse('api:repository-list')) + with self.assertNumQueries(6): + response = self.client.get(reverse('api:repository-list')) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1) @@ -139,7 +143,8 @@ class TestRepositories(FixtureTestCase): """ self.repo.corpora.create() self.client.force_login(self.internal_user) - response = self.client.get(reverse('api:repository-list')) + with self.assertNumQueries(6): + response = self.client.get(reverse('api:repository-list')) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json() self.assertEqual(len(data['results']), 1)