def contains(self, request): """ Determine if course runs are found in the query results. A dictionary mapping course run keys to booleans, indicating course run presence, will be returned. --- serializer: serializers.ContainedCourseRunsSerializer parameters: - name: query description: Elasticsearch querystring query required: true type: string paramType: query multiple: false - name: course_run_ids description: Comma-separated list of course run IDs required: true type: string paramType: query multiple: true - name: partner description: Filter by partner required: false type: string paramType: query multiple: false """ query = request.GET.get('query') course_run_ids = request.GET.get('course_run_ids') partner = self.request.site.partner if query and course_run_ids: course_run_ids = course_run_ids.split(',') course_runs = (CourseRun.search(query).filter( ESDSLQ('term', partner=partner.short_code) & ESDSLQ('terms', **{'key.raw': course_run_ids})).source( ['key'])) course_runs_keys = [i.key for i in course_runs] contains = { course_run_id: course_run_id in course_runs_keys for course_run_id in course_run_ids } instance = {'course_runs': contains} serializer = serializers.ContainedCourseRunsSerializer(instance) return Response(serializer.data) return Response(status=status.HTTP_400_BAD_REQUEST)
def contains(self, request): """ Determine if course runs are found in the query results. A dictionary mapping course run keys to booleans, indicating course run presence, will be returned. --- serializer: serializers.ContainedCourseRunsSerializer parameters: - name: query description: Elasticsearch querystring query required: true type: string paramType: query multiple: false - name: course_run_ids description: Comma-separated list of course run IDs required: true type: string paramType: query multiple: true - name: partner description: Filter by partner required: false type: string paramType: query multiple: false """ query = request.GET.get('query') course_run_ids = request.GET.get('course_run_ids') 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.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 } instance = {'course_runs': contains} serializer = serializers.ContainedCourseRunsSerializer(instance) return Response(serializer.data) return Response(status=status.HTTP_400_BAD_REQUEST)
def contains(self, request): """ Determine if course runs are found in the query results. A dictionary mapping course run keys to booleans, indicating course run presence, will be returned. --- serializer: serializers.ContainedCourseRunsSerializer parameters: - name: query description: Elasticsearch querystring query required: true type: string paramType: query multiple: false - name: course_run_ids description: Comma-separated list of course run IDs required: true type: string paramType: query multiple: true - name: partner description: Filter by partner required: false type: string paramType: query multiple: false - name: org description: Filter results on edx organization's short name. required: false type: string paramType: query multiple: false - name: include_all_partners description: Include courses for all partners. required: false type: integer paramType: query multiple: false """ query = request.GET.get('query') course_run_ids = request.GET.get('course_run_ids') 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 = request.GET.get('org') if query and course_run_ids: course_run_ids = course_run_ids.split(',') course_runs = CourseRun.search(query).filter( partner__in=partners.values_list( 'short_code', flat=True)).filter(key__in=course_run_ids) # update "course_runs" with edx organization filter course_runs = course_runs.filter( course__authoring_organizations__key=edx_org_short_name ).values_list('key', flat=True) contains = { course_run_id: course_run_id in course_runs for course_run_id in course_run_ids } instance = {'course_runs': contains} serializer = serializers.ContainedCourseRunsSerializer(instance) return Response(serializer.data) return Response(status=status.HTTP_400_BAD_REQUEST)