def grades(self, request, pk): """ Submit a grade for a Workgroup. The grade will be applied to all members of the workgroup """ # Ensure we received all of the necessary information course_id = request.DATA.get('course_id') if course_id is None: return Response({}, status=status.HTTP_400_BAD_REQUEST) course_descriptor, course_key, course_content = _get_course(request, request.user, course_id) # pylint: disable=W0612 if not course_descriptor: return Response({}, status=status.HTTP_400_BAD_REQUEST) content_id = request.DATA.get('content_id') if content_id is None: return Response({}, status=status.HTTP_400_BAD_REQUEST) content_descriptor, content_key, content = _get_course_child(request, request.user, course_key, content_id) # pylint: disable=W0612 if content_descriptor is None: return Response({}, status=status.HTTP_400_BAD_REQUEST) grade = request.DATA.get('grade') if grade is None: return Response({}, status=status.HTTP_400_BAD_REQUEST) max_grade = request.DATA.get('max_grade') if max_grade is None: return Response({}, status=status.HTTP_400_BAD_REQUEST) if grade > max_grade: max_grade = grade users = User.objects.filter(workgroups=pk) for user in users: key = KeyValueStore.Key( scope=Scope.user_state, user_id=user.id, block_scope_id=content_key, field_name='grade' ) field_data_cache = FieldDataCache([course_descriptor], course_key, user) student_module = field_data_cache.find_or_create(key) student_module.grade = grade student_module.max_grade = max_grade student_module.save() return Response({}, status=status.HTTP_201_CREATED)