def index(request): semesters = Semester.get_all_with_published_unarchived_results() evaluations = Evaluation.objects.filter(course__semester__in=semesters, state='published') evaluations = [ evaluation for evaluation in evaluations if evaluation.can_user_see_evaluation(request.user) ] if request.user.is_reviewer: additional_evaluations = get_evaluations_with_prefetched_data( Evaluation.objects.filter( course__semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed'])) additional_evaluations = get_evaluations_with_course_result_attributes( additional_evaluations) evaluations += additional_evaluations evaluations.sort( key=lambda evaluation: (evaluation.course.semester.pk, evaluation.full_name )) # evaluations must be sorted for regrouping them in the template evaluation_pks = [evaluation.pk for evaluation in evaluations] degrees = Degree.objects.filter( courses__evaluations__pk__in=evaluation_pks).distinct() course_types = CourseType.objects.filter( courses__evaluations__pk__in=evaluation_pks).distinct() template_data = dict( evaluations=evaluations, degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def index(request): semesters = Semester.get_all_with_published_unarchived_results() courses = Course.objects.filter(semester__in=semesters, state='published') courses = [ course for course in courses if course.can_user_see_course(request.user) ] if request.user.is_reviewer: additional_courses = Course.objects.filter( semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed']) courses += get_courses_with_prefetched_data(additional_courses) course_pks = [course.pk for course in courses] degrees = Degree.objects.filter(courses__pk__in=course_pks).distinct() course_types = CourseType.objects.filter( courses__pk__in=course_pks).distinct() template_data = dict( courses=courses, degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def index(request): semesters = Semester.get_all_with_published_unarchived_results() evaluations = Evaluation.objects.filter(course__semester__in=semesters, state='published') evaluations = [evaluation for evaluation in evaluations if evaluation.can_be_seen_by(request.user)] if request.user.is_reviewer: additional_evaluations = get_evaluations_with_prefetched_data( Evaluation.objects.filter( course__semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed'] ) ) additional_evaluations = get_evaluations_with_course_result_attributes(additional_evaluations) evaluations += additional_evaluations evaluations.sort(key=lambda evaluation: (evaluation.course.semester.pk, evaluation.full_name)) # evaluations must be sorted for regrouping them in the template evaluation_pks = [evaluation.pk for evaluation in evaluations] degrees = Degree.objects.filter(courses__evaluations__pk__in=evaluation_pks).distinct() course_types = CourseType.objects.filter(courses__evaluations__pk__in=evaluation_pks).distinct() template_data = dict( evaluations=evaluations, degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def index(request): semesters = Semester.get_all_with_published_unarchived_results() evaluations = Evaluation.objects.filter(course__semester__in=semesters, state='published') evaluations = [ evaluation for evaluation in evaluations if evaluation.can_user_see_evaluation(request.user) ] if request.user.is_reviewer: additional_evaluations = Evaluation.objects.filter( course__semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed']) evaluations += get_evaluations_with_prefetched_data( additional_evaluations) evaluation_pks = [evaluation.pk for evaluation in evaluations] degrees = Degree.objects.filter( courses__evaluation__pk__in=evaluation_pks).distinct() course_types = CourseType.objects.filter( courses__evaluation__pk__in=evaluation_pks).distinct() template_data = dict( evaluations=evaluations, degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def include_navbar(user, language): return { 'user': user, 'language': language, 'published_result_semesters': Semester.get_all_with_published_unarchived_results(), 'result_semesters': Semester.get_all_with_unarchived_results(), 'grade_document_semesters': Semester.objects.filter(grade_documents_are_deleted=False), }
def include_navbar(user, language): return { "user": user, "current_language": language, "languages": LANGUAGES, "published_result_semesters": Semester.get_all_with_published_unarchived_results(), "result_semesters": Semester.get_all_with_unarchived_results(), "grade_document_semesters": Semester.objects.filter(grade_documents_are_deleted=False), "debug": DEBUG, }
def index(request): semesters = Semester.get_all_with_published_unarchived_results() evaluations = Evaluation.objects.filter(course__semester__in=semesters, state=Evaluation.State.PUBLISHED) evaluations = evaluations.select_related("course", "course__semester") evaluations = [ evaluation for evaluation in evaluations if evaluation.can_be_seen_by(request.user) ] if request.user.is_reviewer: additional_evaluations = get_evaluations_with_prefetched_data( Evaluation.objects.filter( course__semester__in=semesters, state__in=[ Evaluation.State.IN_EVALUATION, Evaluation.State.EVALUATED, Evaluation.State.REVIEWED ], )) additional_evaluations = get_evaluations_with_course_result_attributes( additional_evaluations) evaluations += additional_evaluations # put evaluations into a dict that maps from course to a list of evaluations. # this dict is sorted by course.pk (important for the zip below) # (this relies on python 3.7's guarantee that the insertion order of the dict is preserved) evaluations.sort(key=lambda evaluation: evaluation.course.pk) courses_and_evaluations = unordered_groupby( (evaluation.course, evaluation) for evaluation in evaluations) course_pks = [course.pk for course in courses_and_evaluations.keys()] # annotate each course in courses with num_evaluations annotated_courses = (Course.objects.filter(pk__in=course_pks).annotate( num_evaluations=Count("evaluations")).order_by("pk").defer()) for course, annotated_course in zip(courses_and_evaluations.keys(), annotated_courses): course.num_evaluations = annotated_course.num_evaluations degrees = Degree.objects.filter(courses__pk__in=course_pks).distinct() course_types = CourseType.objects.filter( courses__pk__in=course_pks).distinct() template_data = dict( courses_and_evaluations=courses_and_evaluations.items(), degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def index(request): semesters = Semester.get_all_with_published_unarchived_results() evaluations = Evaluation.objects.filter(course__semester__in=semesters, state='published') evaluations = evaluations.select_related('course', 'course__semester') evaluations = [ evaluation for evaluation in evaluations if evaluation.can_be_seen_by(request.user) ] if request.user.is_reviewer: additional_evaluations = get_evaluations_with_prefetched_data( Evaluation.objects.filter( course__semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed'])) additional_evaluations = get_evaluations_with_course_result_attributes( additional_evaluations) evaluations += additional_evaluations # put evaluations into a dict that maps from course to a list of evaluations. # this dict is sorted by course.pk (important for the zip below) # (this relies on python 3.7's guarantee that the insertion order of the dict is preserved) evaluations.sort(key=lambda evaluation: evaluation.course.pk) courses_and_evaluations = defaultdict(list) for evaluation in evaluations: courses_and_evaluations[evaluation.course].append(evaluation) course_pks = list([course.pk for course in courses_and_evaluations.keys()]) # annotate each course in courses with num_evaluations annotated_courses = Course.objects.filter(pk__in=course_pks).annotate( num_evaluations=Count('evaluations')).order_by('pk').defer() for course, annotated_course in zip(courses_and_evaluations.keys(), annotated_courses): course.num_evaluations = annotated_course.num_evaluations degrees = Degree.objects.filter(courses__pk__in=course_pks).distinct() course_types = CourseType.objects.filter( courses__pk__in=course_pks).distinct() template_data = dict( courses_and_evaluations=courses_and_evaluations.items(), degrees=degrees, course_types=course_types, semesters=semesters, ) return render(request, "results_index.html", template_data)
def index(request): semesters = Semester.get_all_with_published_unarchived_results() courses = Course.objects.filter(semester__in=semesters, state='published') courses = [course for course in courses if course.can_user_see_course(request.user)] if request.user.is_reviewer: additional_courses = Course.objects.filter(semester__in=semesters, state__in=['in_evaluation', 'evaluated', 'reviewed']) courses += get_courses_with_prefetched_data(additional_courses) course_pks = [course.pk for course in courses] degrees = Degree.objects.filter(courses__pk__in=course_pks).distinct() course_types = CourseType.objects.filter(courses__pk__in=course_pks).distinct() template_data = dict( courses=courses, degrees=degrees, course_types=sorted(course_types, key=lambda course_type: course_type.name), semesters=semesters, ) return render(request, "results_index.html", template_data)