Exemplo n.º 1
0
    def get(self, request, format=None):
        """ Get all the courses. """
        param = {
            'offset': int(request.GET.get('offset', 0)),
            'limit': int(request.GET.get('limit', 10)),
            'timestamp': int(request.GET.get('timestamp', 0)),
            'with_category': request.GET.get('with_category', 1),
            'categories': request.GET.get('categories', '')
        }

        screen = get_screen_size(request)
        thumbnail_size = get_thumbnail_size(screen, position='list')

        categories = [each for each in param['categories'].split(',') if each]
        verified_courses_id = CourseMode.get_verified_option_courses()
        query = Course.exclude_vpc().filter(status__gte=0, course_type=0).exclude(course_id__in=verified_courses_id)
        if param['timestamp']:
            query = query.filter(
                modified__gt=datetime.utcfromtimestamp(param['timestamp']))
        if categories:
            query = query.filter(category__id__in=categories).distinct()

        total = query.count()
        courses = query[param['offset']:param['offset'] + param['limit']]
        result = {
            "courses": CourseWithCategorySerializer(thumbnail_size, courses, many=True).data if param['with_category'] else CourseSerializer(thumbnail_size, courses, many=True).data,
            "total": total,
        }
        return Response(result)
Exemplo n.º 2
0
def new_search(query, org='', _type=None, cid=0, limit=10, offset=0, started='false', hasTA='false', exclude_ids=[]):
    parameters = {
        'query': query,
        'org': org,
        'cid': cid,
        'limit': limit,
        'offset': offset,
        'started': cmp(started, 'true') == 0,
        'hasTA': cmp(hasTA, 'true') == 0,
        'exclude_ids': exclude_ids,
        '_type': _type,
    }

    search_res = {}
    if parameters['cid']:
        # Get course query by category id
        queryResult = CourseCategory.objects.get(
            id=parameters['cid']).course_set
    elif parameters['query']:
        # Get course query by search api
        course_id_dict = search_all_course_id(parameters['query'])
        queryResult = Course.objects.filter(course_id__in=course_id_dict.keys())
    elif parameters['org']:
        if cmp(parameters['org'], 'edx') == 0:
            queryResult = Course.objects.filter(owner='edX')
        else:
            queryResult = Course.objects.filter(org=parameters['org'])
    else:
        # Get all the courses
        queryResult = Course.objects

    if parameters['started']:
        queryResult = queryResult.filter(serialized__gt=0)

    if parameters['hasTA']:
        now = datetime.now(UTC())
        queryResult = queryResult.filter(owner='xuetangX').filter(
            start__lt=now).filter(end__gt=now)

    if parameters['_type'] == 'recent_course':
        recent_time = datetime.now(UTC()) - timedelta(days=90)
        queryResult = queryResult.filter(start__gt=recent_time)

    # Filter and order by status
    visible_owner = microsite.get_visible_owner()
    verified_courses_ids = CourseMode.get_verified_option_courses()
    queryResult = queryResult.filter(status__gte=0, owner__in=visible_owner, course_type=0).exclude(
        course_id__in=verified_courses_ids).order_by('-status', '-id')

    total_length = queryResult.count()
    courses = sorted(queryResult, key=lambda x: course_id_dict.get(x.course_id, 0))[
              parameters['offset']:parameters['offset'] + parameters['limit']]

    return courses, total_length
Exemplo n.º 3
0
    def get(self, request, format=None):
        response = {}
        verified_courses_id = CourseMode.get_verified_option_courses()
        courses = Course.exclude_vpc().filter(
            status__gte=0, course_type=0).exclude(course_id__in=verified_courses_id).order_by('-status', '-id')
        response['data'] = fill_in_courses(courses, request.user)
        response['status'] = 'success'

        # Add selected for homepage courses and add knowledge_id for knowledge
        # map courses
        homepage_course_list = HomepageCourses.objects.order_by(
            "order")[0:8]
        selected_list = []
        for homepage_course in homepage_course_list:
            course = homepage_course.course
            selected_list.append(course.course_id)

        for course in response['data']:
            if course['course_id'] in selected_list:
                course['selected'] = True
            else:
                course['selected'] = False

        knowledge_list = {}
        knowledge_map_list = CourseInKnowledgeMap.objects.all()
        for c in knowledge_map_list:
            knowledge_list[c.course_id.course_id] = {
                'id': c.map_id_id,
                'level': c.level,
            }

        for course in response['data']:
            if course['course_id'] in knowledge_list:
                course['knowledge_map'] = knowledge_list[course['course_id']]
            else:
                course['knowledge_map'] = {}

        return Response(response)
Exemplo n.º 4
0
    def get(self, request, format=None):
        """ Get all the recent courses. """
        param = {
            'offset': int(request.GET.get('offset', 0)),
            'limit': int(request.GET.get('limit', 10)),
        }

        screen = get_screen_size(request)
        thumbnail_size = get_thumbnail_size(screen, position='detail')
        local_tz = pytz_timezone(settings.TIME_ZONE)
        now = datetime.now(local_tz)
        recent_time = datetime(now.year, now.month, now.day, tzinfo=local_tz)
        recent_utc_time = recent_time.astimezone(UTC)
        verified_courses_id = CourseMode.get_verified_option_courses()
        query = Course.exclude_vpc().filter(
            status__gte=0, start__gt=recent_utc_time, course_type=0).exclude(course_id__in=verified_courses_id).order_by('start')
        total = query.count()
        courses = query[param['offset']:param['offset'] + param['limit']]
        result = {
            "courses": CourseSerializer(thumbnail_size, courses, many=True).data,
            "total": total,
        }
        return Response(result)