Commit 2c235dbc by Clinton Blackburn

Pre-fetching data for course run API responses

ECOM-5559 and ECOM-5440
parent c7140f5b
...@@ -35,7 +35,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase): ...@@ -35,7 +35,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
""" Verify the endpoint returns the details for a single course. """ """ Verify the endpoint returns the details for a single course. """
url = reverse('api:v1:course_run-detail', kwargs={'key': self.course_run.key}) url = reverse('api:v1:course_run-detail', kwargs={'key': self.course_run.key})
response = self.client.get(url) with self.assertNumQueries(9):
response = self.client.get(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertEqual(response.data, self.serialize_course_run(self.course_run)) self.assertEqual(response.data, self.serialize_course_run(self.course_run))
...@@ -43,7 +45,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase): ...@@ -43,7 +45,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
""" Verify the endpoint returns a list of all catalogs. """ """ Verify the endpoint returns a list of all catalogs. """
url = reverse('api:v1:course_run-list') url = reverse('api:v1:course_run-list')
response = self.client.get(url) with self.assertNumQueries(11):
response = self.client.get(url)
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
self.assertListEqual( self.assertListEqual(
response.data['results'], response.data['results'],
...@@ -57,7 +61,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase): ...@@ -57,7 +61,9 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
query = 'title:Some random title' query = 'title:Some random title'
url = '{root}?q={query}'.format(root=reverse('api:v1:course_run-list'), query=query) url = '{root}?q={query}'.format(root=reverse('api:v1:course_run-list'), query=query)
response = self.client.get(url) with self.assertNumQueries(37):
response = self.client.get(url)
actual_sorted = sorted(response.data['results'], key=lambda course_run: course_run['key']) actual_sorted = sorted(response.data['results'], key=lambda course_run: course_run['key'])
expected_sorted = sorted(self.serialize_course_run(course_runs, many=True), expected_sorted = sorted(self.serialize_course_run(course_runs, many=True),
key=lambda course_run: course_run['key']) key=lambda course_run: course_run['key'])
......
...@@ -247,7 +247,14 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet): ...@@ -247,7 +247,14 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
qs.model = self.queryset.model qs.model = self.queryset.model
return qs return qs
else: else:
return super(CourseRunViewSet, self).get_queryset().filter(course__partner=partner) queryset = super(CourseRunViewSet, self).get_queryset().filter(course__partner=partner)
queryset = queryset.select_related('course', 'language', 'video')
queryset = queryset.prefetch_related(
'course__partner', 'course__level_type', 'course__programs', 'course__programs__type',
'course__programs__partner', 'seats', 'transcript_languages', 'seats__currency', 'staff',
'staff__position', 'staff__position__organization'
)
return queryset
def list(self, request, *args, **kwargs): def list(self, request, *args, **kwargs):
""" List all courses runs. """ List all courses runs.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment