@transaction.non_atomic_requests
@cache_control(no_cache=True, no_store=True, must_revalidate=True)
@coach_dashboard
def ccx_gradebook(request, course, ccx=None):
 if (not ccx):
  raise Http404
 ccx_key = CCXLocator.from_course_locator(course.id, unicode(ccx.id))
 with ccx_course(ccx_key) as course:
  prep_course_for_grading(course, request)
  (student_info, page) = get_grade_book_page(request, course, course_key=ccx_key)
  return render_to_response('courseware/gradebook.html', {'page': page, 'page_url': reverse('ccx_gradebook', kwargs={'course_id': ccx_key}), 'students': student_info, 'course': course, 'course_id': course.id, 'staff_access': request.user.is_staff, 'ordered_grades': sorted(course.grade_cutoffs.items(), key=(lambda i: i[1]), reverse=True)})

@ transaction . non_atomic_requests @ cache_control ( no_cache = True , no_store = True , must_revalidate = True ) @ coach_dashboard def ccx_gradebook ( request , course , ccx = None ) : if ( not ccx ) : raise Http404 ccx_key = CCXLocator . from_course_locator ( course . id , unicode ( ccx . id ) ) with ccx_course ( ccx_key ) as course : prep_course_for_grading ( course , request ) ( student_info , page ) = get_grade_book_page ( request , course , course_key = ccx_key ) return render_to_response ( 'courseware/gradebook.html' , { 'page' : page , 'page_url' : reverse ( 'ccx_gradebook' , kwargs = { 'course_id' : ccx_key } ) , 'students' : student_info , 'course' : course , 'course_id' : course . id , 'staff_access' : request . user . is_staff , 'ordered_grades' : sorted ( course . grade_cutoffs . items ( ) , key = ( lambda i : i [ 1 ] ) , reverse = True ) } )
show the gradebook for this ccx .