示例#1
0
    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)
示例#2
0
    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)
示例#3
0
    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)
示例#4
0
    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
示例#5
0
 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()
示例#6
0
    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)
示例#7
0
    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)
示例#9
0
 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)
示例#10
0
    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
示例#11
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([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])
示例#12
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])
示例#13
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])