def get_queryset(self): """ List one course run --- parameters: - name: include_deleted_programs description: Will include deleted programs in the associated programs array required: false type: integer paramType: query multiple: false """ q = self.request.query_params.get('q') partner = self.request.site.partner edit_mode = get_query_param(self.request, 'editable') or self.request.method not in SAFE_METHODS if edit_mode and q: raise EditableAndQUnsupported() if edit_mode and (not self.request.user.is_staff and not is_publisher_user(self.request.user)): raise PermissionDenied if edit_mode: queryset = CourseRun.objects.filter_drafts() queryset = CourseEditor.editable_course_runs(self.request.user, queryset) else: queryset = self.queryset if q: 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 queryset = queryset.filter(course__partner=partner) return self.get_serializer_class().prefetch_queryset(queryset=queryset)
def get_queryset(self): """ List one course run --- parameters: - name: include_deleted_programs description: Will include deleted programs in the associated programs array required: false type: integer paramType: query multiple: false """ q = self.request.query_params.get('q') partner = self.request.site.partner if q: 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: queryset = super( CourseRunViewSet, self).get_queryset().filter(course__partner=partner) return self.get_serializer_class().prefetch_queryset( queryset=queryset)
def get_queryset(self): """ List one course run --- parameters: - name: include_deleted_programs description: Will include deleted programs in the associated programs array required: false type: integer paramType: query multiple: false """ q = self.request.query_params.get('q') include_all_partners = get_query_param(self.request, 'include_all_partners') partners = Partner.objects.all( ) if include_all_partners else Partner.objects.filter( site=self.request.site) edx_org_short_name = self.request.query_params.get('org') if q: qs = SearchQuerySetWrapper( CourseRun.search(q).filter( partner__in=partners.values_list('short_code', flat=True))) # This is necessary to avoid issues with the filter backend. qs.model = self.queryset.model return qs else: queryset = super( CourseRunViewSet, self).get_queryset().filter(course__partner__in=partners) return self.get_serializer_class().prefetch_queryset( queryset=queryset, edx_org_short_name=edx_org_short_name)
def get_queryset(self): """ List one course run --- parameters: - name: include_deleted_programs description: Will include deleted programs in the associated programs array required: false type: integer paramType: query multiple: false """ q = self.request.query_params.get('q', None) partner = self.get_partner() if q: 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: queryset = super( CourseRunViewSet, self).get_queryset().filter(course__partner=partner) queryset = queryset.select_related( *serializers.SELECT_RELATED_FIELDS['course_run']) queryset = queryset.prefetch_related( *serializers.PREFETCH_FIELDS['course_run']) return queryset
def get_queryset(self): q = self.request.query_params.get('q', None) if q: qs = SearchQuerySetWrapper(CourseRun.search(q)) # This is necessary to avoid issues with the filter backend. qs.model = self.queryset.model return qs else: return super(CourseRunViewSet, self).get_queryset()
def setUp(self): super().setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = CourseRunDocument().search().query( 'query_string', query=query) self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset)
def setUp(self): super(SearchQuerySetWrapperTests, self).setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = SearchQuerySet().models(CourseRun).raw_search( query).load_all() self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset)
def setUp(self): super(SearchQuerySetWrapperTests, self).setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = SearchQuerySet().models(CourseRun).raw_search(query).load_all() self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset)
def test_search(self): """ Verify the method returns a filtered queryset of course runs. """ title = 'Some random title' course_runs = factories.CourseRunFactory.create_batch(3, title=title) query = 'title:' + title actual_sorted = sorted(SearchQuerySetWrapper(CourseRun.search(query)), key=lambda course_run: course_run.key) expected_sorted = sorted(course_runs, key=lambda course_run: course_run.key) self.assertEqual(actual_sorted, expected_sorted)
def get_queryset(self): """ List one course run --- parameters: - name: include_deleted_programs description: Will include deleted programs in the associated programs array required: false type: integer paramType: query multiple: false """ q = self.request.query_params.get("q", None) partner = self.get_partner() if q: 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: queryset = super(CourseRunViewSet, self).get_queryset().filter(course__partner=partner) queryset = queryset.select_related(*serializers.SELECT_RELATED_FIELDS["course_run"]) queryset = queryset.prefetch_related(*serializers.PREFETCH_FIELDS["course_run"]) return queryset
class SearchQuerySetWrapperTests(TestCase): def setUp(self): super(SearchQuerySetWrapperTests, self).setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = SearchQuerySet().models(CourseRun).raw_search(query).load_all() self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset) def test_count(self): self.assertEqual(self.search_queryset.count(), self.wrapper.count()) def test_iter(self): self.assertEqual([e for e in self.course_runs], [e for e in self.wrapper]) def test_getitem(self): self.assertEqual(self.course_runs[0], self.wrapper[0])
class SearchQuerySetWrapperTests(TestCase): def setUp(self): super().setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = CourseRunDocument().search().query( 'query_string', query=query) self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset) def test_count(self): self.assertEqual(self.search_queryset.count(), self.wrapper.count()) def test_iter(self): self.assertEqual(self.course_runs, list(self.wrapper)) def test_getitem(self): self.assertEqual(self.course_runs[0], self.wrapper[0])
class SearchQuerySetWrapperTests(TestCase): def setUp(self): super(SearchQuerySetWrapperTests, self).setUp() title = 'Some random course' query = 'title:' + title CourseRunFactory.create_batch(3, title=title) self.search_queryset = SearchQuerySet().models(CourseRun).raw_search( query).load_all() self.course_runs = [e.object for e in self.search_queryset] self.wrapper = SearchQuerySetWrapper(self.search_queryset) def test_count(self): self.assertEqual(self.search_queryset.count(), self.wrapper.count()) def test_iter(self): self.assertEqual(self.course_runs, list(self.wrapper)) def test_getitem(self): self.assertEqual(self.course_runs[0], self.wrapper[0])