Commit 18822bdb by John Eskew Committed by Don Mitchell

Wrap course info and dashboard in bulk ops wrapper to reduce Mongo calls.

parent 0ed4ee32
...@@ -246,23 +246,25 @@ def get_course_enrollment_pairs(user, course_org_filter, org_filter_out_set): ...@@ -246,23 +246,25 @@ def get_course_enrollment_pairs(user, course_org_filter, org_filter_out_set):
a student's dashboard. a student's dashboard.
""" """
for enrollment in CourseEnrollment.enrollments_for_user(user): for enrollment in CourseEnrollment.enrollments_for_user(user):
course = modulestore().get_course(enrollment.course_id) store = modulestore()
if course and not isinstance(course, ErrorDescriptor): with store.bulk_operations(enrollment.course_id):
course = store.get_course(enrollment.course_id)
# if we are in a Microsite, then filter out anything that is not if course and not isinstance(course, ErrorDescriptor):
# attributed (by ORG) to that Microsite
if course_org_filter and course_org_filter != course.location.org: # if we are in a Microsite, then filter out anything that is not
continue # attributed (by ORG) to that Microsite
# Conversely, if we are not in a Microsite, then let's filter out any enrollments if course_org_filter and course_org_filter != course.location.org:
# with courses attributed (by ORG) to Microsites continue
elif course.location.org in org_filter_out_set: # Conversely, if we are not in a Microsite, then let's filter out any enrollments
continue # with courses attributed (by ORG) to Microsites
elif course.location.org in org_filter_out_set:
yield (course, enrollment) continue
else:
log.error("User {0} enrolled in {2} course {1}".format( yield (course, enrollment)
user.username, enrollment.course_id, "broken" if course else "non-existent" else:
)) log.error("User {0} enrolled in {2} course {1}".format(
user.username, enrollment.course_id, "broken" if course else "non-existent"
))
def _cert_info(user, course, cert_status): def _cert_info(user, course, cert_status):
......
...@@ -559,41 +559,42 @@ def course_info(request, course_id): ...@@ -559,41 +559,42 @@ def course_info(request, course_id):
course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id) course_key = SlashSeparatedCourseKey.from_deprecated_string(course_id)
course = get_course_with_access(request.user, 'load', course_key) with modulestore().bulk_operations(course_key):
staff_access = has_access(request.user, 'staff', course) course = get_course_with_access(request.user, 'load', course_key)
masq = setup_masquerade(request, staff_access) # allow staff to toggle masquerade on info page staff_access = has_access(request.user, 'staff', course)
reverifications = fetch_reverify_banner_info(request, course_key) masq = setup_masquerade(request, staff_access) # allow staff to toggle masquerade on info page
studio_url = get_studio_url(course, 'course_info') reverifications = fetch_reverify_banner_info(request, course_key)
studio_url = get_studio_url(course, 'course_info')
# link to where the student should go to enroll in the course: # link to where the student should go to enroll in the course:
# about page if there is not marketing site, SITE_NAME if there is # about page if there is not marketing site, SITE_NAME if there is
url_to_enroll = reverse(course_about, args=[course_id]) url_to_enroll = reverse(course_about, args=[course_id])
if settings.FEATURES.get('ENABLE_MKTG_SITE'): if settings.FEATURES.get('ENABLE_MKTG_SITE'):
url_to_enroll = marketing_link('COURSES') url_to_enroll = marketing_link('COURSES')
show_enroll_banner = request.user.is_authenticated() and not CourseEnrollment.is_enrolled(request.user, course.id) show_enroll_banner = request.user.is_authenticated() and not CourseEnrollment.is_enrolled(request.user, course.id)
context = { context = {
'request': request, 'request': request,
'course_id': course_key.to_deprecated_string(), 'course_id': course_key.to_deprecated_string(),
'cache': None, 'cache': None,
'course': course, 'course': course,
'staff_access': staff_access, 'staff_access': staff_access,
'masquerade': masq, 'masquerade': masq,
'studio_url': studio_url, 'studio_url': studio_url,
'reverifications': reverifications, 'reverifications': reverifications,
'show_enroll_banner': show_enroll_banner, 'show_enroll_banner': show_enroll_banner,
'url_to_enroll': url_to_enroll, 'url_to_enroll': url_to_enroll,
} }
now = datetime.now(UTC()) now = datetime.now(UTC())
effective_start = _adjust_start_date_for_beta_testers(request.user, course, course_key) effective_start = _adjust_start_date_for_beta_testers(request.user, course, course_key)
if staff_access and now < effective_start: if staff_access and now < effective_start:
# Disable student view button if user is staff and # Disable student view button if user is staff and
# course is not yet visible to students. # course is not yet visible to students.
context['disable_student_access'] = True context['disable_student_access'] = True
return render_to_response('courseware/info.html', context) return render_to_response('courseware/info.html', context)
@ensure_csrf_cookie @ensure_csrf_cookie
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment