From dc61c87a2df9417882d490fe8826bcc18deb7097 Mon Sep 17 00:00:00 2001 From: Talha Date: Tue, 22 Apr 2025 14:17:53 +0500 Subject: [PATCH] feat: calculate grades csv to DRF --- lms/djangoapps/instructor/views/api.py | 28 ++++++++++++--------- lms/djangoapps/instructor/views/api_urls.py | 2 +- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/lms/djangoapps/instructor/views/api.py b/lms/djangoapps/instructor/views/api.py index 84058dfeae..25c09bf598 100644 --- a/lms/djangoapps/instructor/views/api.py +++ b/lms/djangoapps/instructor/views/api.py @@ -2768,23 +2768,27 @@ def export_ora2_submission_files(request, course_id): }) -@transaction.non_atomic_requests -@require_POST -@ensure_csrf_cookie -@cache_control(no_cache=True, no_store=True, must_revalidate=True) -@require_course_permission(permissions.CAN_RESEARCH) -@common_exceptions_400 -def calculate_grades_csv(request, course_id): +@method_decorator(transaction.non_atomic_requests, name='dispatch') +class CalculateGradesCsvView(DeveloperErrorViewMixin, APIView): """ + Initiates a Celery task to calculate grades CSV. AlreadyRunningError is raised if the course's grades are already being updated. """ - report_type = _('grade') - course_key = CourseKey.from_string(course_id) - task_api.submit_calculate_grades_csv(request, course_key) - success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type) + permission_classes = (IsAuthenticated, permissions.InstructorPermission) + permission_name = permissions.CAN_RESEARCH - return JsonResponse({"status": success_status}) + @method_decorator(cache_control(no_cache=True, no_store=True, must_revalidate=True)) + @method_decorator(ensure_csrf_cookie) + def post(self, request, course_id): + """ + Initiates a Celery task to calculate grades CSV. + """ + report_type = _('grade') + course_key = CourseKey.from_string(course_id) + task_api.submit_calculate_grades_csv(request, course_key) + success_status = SUCCESS_MESSAGE_TEMPLATE.format(report_type=report_type) + return Response({"status": success_status}) @method_decorator(cache_control(no_cache=True, no_store=True, must_revalidate=True), name='dispatch') @method_decorator(transaction.non_atomic_requests, name='dispatch') diff --git a/lms/djangoapps/instructor/views/api_urls.py b/lms/djangoapps/instructor/views/api_urls.py index 54591d9105..b96fcac352 100644 --- a/lms/djangoapps/instructor/views/api_urls.py +++ b/lms/djangoapps/instructor/views/api_urls.py @@ -61,7 +61,7 @@ urlpatterns = [ # Grade downloads... path('list_report_downloads', api.ListReportDownloads.as_view(), name='list_report_downloads'), - path('calculate_grades_csv', api.calculate_grades_csv, name='calculate_grades_csv'), + path('calculate_grades_csv', api.CalculateGradesCsvView.as_view(), name='calculate_grades_csv'), path('problem_grade_report', api.ProblemGradeReport.as_view(), name='problem_grade_report'), # Reports..