Commit 5a6cbf5f by Michael Frey Committed by GitHub

Merge pull request #221 from edx/mjfrey/partner-short-code

Index partner short_code rather than name
parents 8737df79 1b83624e
......@@ -72,7 +72,7 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
def test_list_key_filter(self):
""" Verify the endpoint returns a list of course runs filtered by the specified keys. """
course_runs = CourseRunFactory.create_batch(3)
course_runs = CourseRunFactory.create_batch(3, course__partner=self.default_partner)
course_runs = sorted(course_runs, key=lambda course: course.key.lower())
keys = ','.join([course.key for course in course_runs])
url = '{root}?keys={keys}'.format(root=reverse('api:v1:course_run-list'), keys=keys)
......
......@@ -227,11 +227,9 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
permission_classes = (IsAuthenticated,)
serializer_class = serializers.CourseRunSerializer
def _get_partner_name_from_code(self):
""" Return the partner name associated with a partner code or the default partner """
partner = None
def _get_partner(self):
""" Return the partner for the code passed in or the default partner """
partner_code = self.request.query_params.get('partner')
if partner_code:
try:
partner = Partner.objects.get(short_code=partner_code)
......@@ -240,19 +238,19 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
else:
partner = Partner.objects.get(id=settings.DEFAULT_PARTNER_ID)
return partner.name
return partner
def get_queryset(self):
q = self.request.query_params.get('q', None)
partner_name = self._get_partner_name_from_code()
partner = self._get_partner()
if q:
qs = SearchQuerySetWrapper(CourseRun.search(q).filter(partner=partner_name))
qs = SearchQuerySetWrapper(CourseRun.search(q).filter(partner=partner.short_code))
# This is necessary to avoid issues with the filter backend.
qs.model = self.queryset.model
return qs
else:
return super(CourseRunViewSet, self).get_queryset()
return super(CourseRunViewSet, self).get_queryset().filter(course__partner=partner)
def list(self, request, *args, **kwargs):
""" List all courses runs.
......@@ -314,11 +312,11 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
"""
query = request.GET.get('query')
course_run_ids = request.GET.get('course_run_ids')
partner_name = self._get_partner_name_from_code()
partner = self._get_partner()
if query and course_run_ids:
course_run_ids = course_run_ids.split(',')
course_runs = CourseRun.search(query).filter(partner=partner_name).filter(key__in=course_run_ids).\
course_runs = CourseRun.search(query).filter(partner=partner.short_code).filter(key__in=course_run_ids).\
values_list('key', flat=True)
contains = {course_run_id: course_run_id in course_runs for course_run_id in course_run_ids}
......
......@@ -40,7 +40,7 @@ class BaseCourseIndex(OrganizationsMixin, BaseIndex):
subjects = indexes.MultiValueField(faceted=True)
organizations = indexes.MultiValueField(faceted=True)
level_type = indexes.CharField(model_attr='level_type__name', null=True, faceted=True)
partner = indexes.CharField(model_attr='partner__name', null=True, faceted=True)
partner = indexes.CharField(model_attr='partner__short_code', null=True, faceted=True)
def prepare_subjects(self, obj):
return [subject.name for subject in obj.subjects.all()]
......@@ -84,7 +84,7 @@ class CourseRunIndex(BaseCourseIndex, indexes.Indexable):
seat_types = indexes.MultiValueField(model_attr='seat_types', null=True, faceted=True)
type = indexes.CharField(model_attr='type', null=True, faceted=True)
image_url = indexes.CharField(model_attr='image_url', null=True)
partner = indexes.CharField(model_attr='course__partner__name', null=True, faceted=True)
partner = indexes.CharField(model_attr='course__partner__short_code', null=True, faceted=True)
def _prepare_language(self, language):
return language.macrolanguage
......@@ -119,7 +119,7 @@ class ProgramIndex(BaseIndex, indexes.Indexable, OrganizationsMixin):
credit_backing_organizations = indexes.MultiValueField(faceted=True)
card_image_url = indexes.CharField(model_attr='card_image_url', null=True)
status = indexes.CharField(model_attr='status', faceted=True)
partner = indexes.CharField(model_attr='partner__name', null=True, faceted=True)
partner = indexes.CharField(model_attr='partner__short_code', null=True, faceted=True)
def prepare_organizations(self, obj):
return self.prepare_authoring_organizations(obj) + self.prepare_credit_backing_organizations(obj)
......
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