docs: def set_grade(
              self,
              assignment_id,
              student_id,
              grade_value,
              gradebook_id='',
              **kwargs
      ):
          """Set numerical grade for student and assignment.
  
          Set a numerical grade for for a student and assignment. Additional
          options
          for grade ``mode`` are: OVERALL_GRADE = ``1``, REGULAR_GRADE = ``2``
          To set 'excused' as the grade, enter ``None`` for letter and
          numeric grade values,
          and pass ``x`` as the ``specialGradeValue``.
          ``ReturnAffectedValues`` flag determines whether or not to return
          student cumulative points and
          impacted assignment category grades (average and student grade).
  
          Args:
              assignment_id (str): numerical ID for assignment
              student_id (str): numerical ID for student
              grade_value (str): numerical grade value
              gradebook_id (str): unique identifier for gradebook, i.e. ``2314``
              kwargs (dict): dictionary of additional parameters
  
                  .. code-block:: python
  
                      {
                          u'letterGradeValue':None,
                          u'booleanGradeValue':None,
                          u'specialGradeValue':None,
                          u'mode':2,
                          u'isGradeApproved':False,
                          u'comment':None,
                          u'returnAffectedValues': True,
                      }
  
          Raises:
              requests.RequestException: Exception connection error
              ValueError: Unable to decode response content
  
          Returns:
              dict: dictionary containing response ``status`` and ``message``
  
              .. code-block:: python
  
                  {
                      u'message': u'grade saved successfully',
                      u'status': 1
                  }
  
          """
          # pylint: disable=too-many-arguments
  
          # numericGradeValue stringified because 'x' is a possible
          # value for excused grades.
          grade_info = {
              'studentId': student_id,
              'assignmentId': assignment_id,
              'mode': 2,
              'comment': 'from MITx {0}'.format(time.ctime(time.time())),
              'numericGradeValue': str(grade_value),
              'isGradeApproved': False
          }
          grade_info.update(kwargs)
          log.info(
              "student %s set_grade=%s for assignment %s",
              student_id,
              grade_value,
              assignment_id)
          return self.post(
              'grades/{gradebookId}'.format(
                  gradebookId=gradebook_id or self.gradebook_id
              ),
              data=grade_info,
          )