Commit 4815181a by David Ormsbee

Merge pull request #1669 from edx/hotfix/revert_grading_manual_tx

Revert "more granular transactions in grading [LMS-1480]"
parents 371f4c9d a1778a17
...@@ -236,11 +236,14 @@ class TestCourseGrader(TestSubmittingProblems): ...@@ -236,11 +236,14 @@ class TestCourseGrader(TestSubmittingProblems):
make up the final grade. (For display) make up the final grade. (For display)
""" """
fake_request = self.factory.get( field_data_cache = FieldDataCache.cache_for_descriptor_descendents(
reverse('progress', kwargs={'course_id': self.course.id}) self.course.id, self.student_user, self.course)
)
fake_request = self.factory.get(reverse('progress',
kwargs={'course_id': self.course.id}))
return grades.grade(self.student_user, fake_request, self.course) return grades.grade(self.student_user, fake_request,
self.course, field_data_cache)
def get_progress_summary(self): def get_progress_summary(self):
""" """
...@@ -254,13 +257,16 @@ class TestCourseGrader(TestSubmittingProblems): ...@@ -254,13 +257,16 @@ class TestCourseGrader(TestSubmittingProblems):
etc. etc.
""" """
fake_request = self.factory.get( field_data_cache = FieldDataCache.cache_for_descriptor_descendents(
reverse('progress', kwargs={'course_id': self.course.id}) self.course.id, self.student_user, self.course)
)
progress_summary = grades.progress_summary( fake_request = self.factory.get(reverse('progress',
self.student_user, fake_request, self.course kwargs={'course_id': self.course.id}))
)
progress_summary = grades.progress_summary(self.student_user,
fake_request,
self.course,
field_data_cache)
return progress_summary return progress_summary
def check_grade_percent(self, percent): def check_grade_percent(self, percent):
......
...@@ -14,7 +14,6 @@ from django.shortcuts import redirect ...@@ -14,7 +14,6 @@ from django.shortcuts import redirect
from mitxmako.shortcuts import render_to_response, render_to_string from mitxmako.shortcuts import render_to_response, render_to_string
from django_future.csrf import ensure_csrf_cookie from django_future.csrf import ensure_csrf_cookie
from django.views.decorators.cache import cache_control from django.views.decorators.cache import cache_control
from django.db import transaction
from markupsafe import escape from markupsafe import escape
from courseware import grades from courseware import grades
...@@ -644,9 +643,8 @@ def mktg_course_about(request, course_id): ...@@ -644,9 +643,8 @@ def mktg_course_about(request, course_id):
except (ValueError, Http404) as e: except (ValueError, Http404) as e:
# if a course does not exist yet, display a coming # if a course does not exist yet, display a coming
# soon button # soon button
return render_to_response( return render_to_response('courseware/mktg_coming_soon.html',
'courseware/mktg_coming_soon.html', {'course_id': course_id} {'course_id': course_id})
)
registered = registered_for_course(course, request.user) registered = registered_for_course(course, request.user)
...@@ -661,36 +659,21 @@ def mktg_course_about(request, course_id): ...@@ -661,36 +659,21 @@ def mktg_course_about(request, course_id):
settings.MITX_FEATURES.get('ENABLE_LMS_MIGRATION')) settings.MITX_FEATURES.get('ENABLE_LMS_MIGRATION'))
course_modes = CourseMode.modes_for_course(course.id) course_modes = CourseMode.modes_for_course(course.id)
return render_to_response( return render_to_response('courseware/mktg_course_about.html',
'courseware/mktg_course_about.html', {
{ 'course': course,
'course': course, 'registered': registered,
'registered': registered, 'allow_registration': allow_registration,
'allow_registration': allow_registration, 'course_target': course_target,
'course_target': course_target, 'show_courseware_link': show_courseware_link,
'show_courseware_link': show_courseware_link, 'course_modes': course_modes,
'course_modes': course_modes, })
}
)
@login_required @login_required
@cache_control(no_cache=True, no_store=True, must_revalidate=True) @cache_control(no_cache=True, no_store=True, must_revalidate=True)
@transaction.commit_manually
def progress(request, course_id, student_id=None): def progress(request, course_id, student_id=None):
""" """ User progress. We show the grade bar and every problem score.
Wraps "_progress" with the manual_transaction context manager just in case
there are unanticipated errors.
"""
with grades.manual_transaction():
return _progress(request, course_id, student_id)
def _progress(request, course_id, student_id):
"""
Unwrapped version of "progress".
User progress. We show the grade bar and every problem score.
Course staff are allowed to see the progress of students in their class. Course staff are allowed to see the progress of students in their class.
""" """
...@@ -706,33 +689,33 @@ def _progress(request, course_id, student_id): ...@@ -706,33 +689,33 @@ def _progress(request, course_id, student_id):
raise Http404 raise Http404
student = User.objects.get(id=int(student_id)) student = User.objects.get(id=int(student_id))
# NOTE: To make sure impersonation by instructor works, use # NOTE: To make sure impersonation by instructor works, use
# student instead of request.user in the rest of the function. # student instead of request.user in the rest of the function.
# The pre-fetching of groups is done to make auth checks not require an # The pre-fetching of groups is done to make auth checks not require an
# additional DB lookup (this kills the Progress page in particular). # additional DB lookup (this kills the Progress page in particular).
student = User.objects.prefetch_related("groups").get(id=student.id) student = User.objects.prefetch_related("groups").get(id=student.id)
courseware_summary = grades.progress_summary(student, request, course) field_data_cache = FieldDataCache.cache_for_descriptor_descendents(
course_id, student, course, depth=None)
grade_summary = grades.grade(student, request, course) courseware_summary = grades.progress_summary(student, request, course,
field_data_cache)
grade_summary = grades.grade(student, request, course, field_data_cache)
if courseware_summary is None: if courseware_summary is None:
#This means the student didn't have access to the course (which the instructor requested) #This means the student didn't have access to the course (which the instructor requested)
raise Http404 raise Http404
context = { context = {'course': course,
'course': course, 'courseware_summary': courseware_summary,
'courseware_summary': courseware_summary, 'grade_summary': grade_summary,
'grade_summary': grade_summary, 'staff_access': staff_access,
'staff_access': staff_access, 'student': student,
'student': student, }
} context.update()
with grades.manual_transaction():
response = render_to_response('courseware/progress.html', context)
return response return render_to_response('courseware/progress.html', context)
@login_required @login_required
......
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