@utilities.arguments_not_none<EOL><INDENT>def set_grade(self, grade_id):<DEDENT>
if not self._grade_system.is_based_on_grades():<EOL><INDENT>raise errors.InvalidArgument()<EOL><DEDENT>if self.get_grade_metadata().is_read_only():<EOL><INDENT>raise errors.NoAccess()<EOL><DEDENT>if not self._is_valid_id(grade_id):<EOL><INDENT>raise errors.InvalidArgument()<EOL><DEDENT>if not self._is_in_set(grade_id, self.get_grade_metadata()):<EOL><INDENT>raise errors.InvalidArgument('<STR_LIT>')<EOL><DEDENT>self._my_map['<STR_LIT>'] = str(grade_id)<EOL>self._my_map['<STR_LIT>'] = str(self._effective_agent_id)<EOL>self._my_map['<STR_LIT>'] = DateTime.utcnow()<EOL>
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.*