Example #1
0
def _search(**conditions):
    year = conditions.get('year', unicode(settings.NEXT_YEAR))
    semester = conditions.get('term', unicode(settings.NEXT_SEMESTER))
    department = conditions.get('dept', None)
    type = conditions.get('type', None)
    lang = conditions.get('lang', 'ko')
    keyword = conditions.get('keyword', None)
    day_begin = conditions.get('start_day', None)
    day_end = conditions.get('end_day', None)
    time_begin = conditions.get('start_time', None)
    time_end = conditions.get('end_time', None)

    # This query requires Django 1.1 or newer.
    lectures = _search_by_ys(year, semester)

    #try:
    if year == None or semester == None:
        raise ValidationError('year or semester is null')
    if day_begin != None and day_end != None and time_begin != None and time_end != None:
        if int(time_end) == 24*60:
            # 24:00가 종료시간인 경우 처리
            day_end = int(day_end)
            if day_end < 6:
                day_end += 1
            time_end = 0
        if day_begin == day_end:
            lectures = lectures.filter(classtime__day__exact=int(day_begin),
                                       classtime__begin__gte=ClassTime.numeric_time_to_obj(int(time_begin)),
                                       classtime__end__lte=ClassTime.numeric_time_to_obj(int(time_end)))
        else:
            lectures = lectures.filter(classtime__day__gte=int(day_begin), classtime__day__lte=int(day_end),
                                       classtime__begin__gte=ClassTime.numeric_time_to_obj(int(time_begin)),
                                       classtime__end__lte=ClassTime.numeric_time_to_obj(int(time_end)))
        lectures = lectures.order_by('type', 'code').distinct().select_related()
    elif department != None and type != None and keyword != None:
        keyword = keyword.strip()
        if keyword == u'':
            if department == u'-1' and type == u'전체보기':
                raise ValidationError('department and type is all')
            lectures = _search_by_ysdt(year, semester, department, type)
        else:
            words = [keyword] #keyword.split()
            lectures = None
            for word in words:
                result = _search_by_ysdtlw(year, semester, department, type, lang, unicode(word))
                if lectures is None:
                    lectures = result
                else:
                    lectures = lectures & result
            lectures = lectures.order_by('type', 'code').distinct().select_related()
    else:
        raise ValidationError('some key is null')
    #except (TypeError, ValueError):
    #    raise ValidationError()

    return lectures
Example #2
0
def _search(**conditions):
    year = conditions.get('year', unicode(settings.NEXT_YEAR))
    semester = conditions.get('term', unicode(settings.NEXT_SEMESTER))
    department = conditions.get('dept', None)
    type = conditions.get('type', None)
    lang = conditions.get('lang', 'ko')
    keyword = conditions.get('keyword', None)
    day_begin = conditions.get('start_day', None)
    day_end = conditions.get('end_day', None)
    time_begin = conditions.get('start_time', None)
    time_end = conditions.get('end_time', None)

    # This query requires Django 1.1 or newer.
    lectures = _search_by_ys(year, semester)

    #try:
    if year == None or semester == None:
        raise ValidationError('year or semester is null')
    if day_begin != None and day_end != None and time_begin != None and time_end != None:
        if int(time_end) == 24 * 60:
            # 24:00가 종료시간인 경우 처리
            day_end = int(day_end)
            if day_end < 6:
                day_end += 1
            time_end = 0
        if day_begin == day_end:
            lectures = lectures.filter(
                classtime__day__exact=int(day_begin),
                classtime__begin__gte=ClassTime.numeric_time_to_obj(
                    int(time_begin)),
                classtime__end__lte=ClassTime.numeric_time_to_obj(
                    int(time_end)))
        else:
            lectures = lectures.filter(
                classtime__day__gte=int(day_begin),
                classtime__day__lte=int(day_end),
                classtime__begin__gte=ClassTime.numeric_time_to_obj(
                    int(time_begin)),
                classtime__end__lte=ClassTime.numeric_time_to_obj(
                    int(time_end)))
        lectures = lectures.order_by('type',
                                     'code').distinct().select_related()
    elif department != None and type != None and keyword != None:
        keyword = keyword.strip()
        if keyword == u'':
            if department == u'-1' and type == u'전체보기':
                raise ValidationError('department and type is all')
            lectures = _search_by_ysdt(year, semester, department, type)
        else:
            words = [keyword]  #keyword.split()
            lectures = None
            for word in words:
                result = _search_by_ysdtlw(year, semester, department, type,
                                           lang, unicode(word))
                if lectures is None:
                    lectures = result
                else:
                    lectures = lectures & result
            lectures = lectures.order_by('type',
                                         'code').distinct().select_related()
    else:
        raise ValidationError('some key is null')
    #except (TypeError, ValueError):
    #    raise ValidationError()

    return lectures