docs: def set_grade(self, grade_id):
          """Sets the grade.
  
          arg:    grade_id (osid.id.Id): the new grade
          raise:  InvalidArgument - ``grade_id`` is invalid or
                  ``GradebookColumn.getGradeSystem().isBasedOnGrades()``
                  is ``false``
          raise:  NoAccess - ``grade_id`` cannot be modified
          raise:  NullArgument - ``grade_id`` is ``null``
          *compliance: mandatory -- This method must be implemented.*
  
          """
          if not self._grade_system.is_based_on_grades():
              raise errors.InvalidArgument()
          if self.get_grade_metadata().is_read_only():
              raise errors.NoAccess()
          if not self._is_valid_id(grade_id):
              raise errors.InvalidArgument()
          if not self._is_in_set(grade_id, self.get_grade_metadata()):
              raise errors.InvalidArgument('Grade ID not in the acceptable set.')
          self._my_map['gradeId'] = str(grade_id)
          self._my_map['gradingAgentId'] = str(self._effective_agent_id)
          self._my_map['timeGraded'] = DateTime.utcnow()