codegrade 16.1.57__tar.gz → 16.1.60__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (582) hide show
  1. {codegrade-16.1.57 → codegrade-16.1.60}/PKG-INFO +1 -1
  2. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_convert.py +27 -11
  3. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/__init__.py +1 -1
  4. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/__init__.py +1 -0
  5. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/course.py +4 -4
  6. codegrade-16.1.60/codegrade/_api/saml.py +79 -0
  7. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/client.py +14 -2
  8. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/__init__.py +6 -1
  9. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/all_site_settings.py +10 -0
  10. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/frontend_site_settings.py +41 -0
  11. codegrade-16.1.60/codegrade/models/hide_no_deadline_enabled_setting.py +56 -0
  12. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_login_link_login.py +12 -2
  13. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_user_login.py +12 -2
  14. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_user_register.py +12 -2
  15. codegrade-16.1.60/codegrade/models/retry_group_submission_grade_passback_enabled_setting.py +59 -0
  16. codegrade-16.1.60/codegrade/models/session_restrictions.py +58 -0
  17. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/site_setting_input.py +8 -0
  18. codegrade-16.1.60/codegrade/models/user_login_response.py +73 -0
  19. {codegrade-16.1.57 → codegrade-16.1.60}/pyproject.toml +1 -1
  20. {codegrade-16.1.57 → codegrade-16.1.60}/setup.py +1 -1
  21. codegrade-16.1.57/codegrade/models/course_register_response.py +0 -51
  22. {codegrade-16.1.57 → codegrade-16.1.60}/README.md +0 -0
  23. {codegrade-16.1.57 → codegrade-16.1.60}/cg_dt_utils/__init__.py +0 -0
  24. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/__init__.py +0 -0
  25. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_just.py +0 -0
  26. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_maybe.py +0 -0
  27. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_nothing.py +0 -0
  28. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_type_helpers.py +0 -0
  29. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/cg_maybe_plugin.py +0 -0
  30. {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/utils.py +0 -0
  31. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/__init__.py +0 -0
  32. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_any_value.py +0 -0
  33. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_base.py +0 -0
  34. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_enum.py +0 -0
  35. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_form.py +0 -0
  36. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_lazy.py +0 -0
  37. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_list.py +0 -0
  38. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_literal.py +0 -0
  39. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_mapping.py +0 -0
  40. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_multipart.py +0 -0
  41. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_nullable.py +0 -0
  42. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_parse_utils.py +0 -0
  43. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_query.py +0 -0
  44. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_rich_value.py +0 -0
  45. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_swagger_utils.py +0 -0
  46. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_swaggerize.py +0 -0
  47. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_utils.py +0 -0
  48. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/exceptions.py +0 -0
  49. {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/request_args_plugin.py +0 -0
  50. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/about.py +0 -0
  51. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/assignment.py +0 -0
  52. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/auto_test.py +0 -0
  53. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/comment.py +0 -0
  54. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/course_price.py +0 -0
  55. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/file.py +0 -0
  56. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/git_provider.py +0 -0
  57. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/group.py +0 -0
  58. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/group_set.py +0 -0
  59. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/login_link.py +0 -0
  60. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/lti.py +0 -0
  61. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/notification.py +0 -0
  62. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/oauth_provider.py +0 -0
  63. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/oauth_token.py +0 -0
  64. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/permission.py +0 -0
  65. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/plagiarism.py +0 -0
  66. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/role.py +0 -0
  67. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/section.py +0 -0
  68. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/site_settings.py +0 -0
  69. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/snippet.py +0 -0
  70. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/sso_provider.py +0 -0
  71. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/submission.py +0 -0
  72. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/task_result.py +0 -0
  73. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/tenant.py +0 -0
  74. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/transaction.py +0 -0
  75. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/user.py +0 -0
  76. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/user_setting.py +0 -0
  77. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/webhook.py +0 -0
  78. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/errors.py +0 -0
  79. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_base_price.py +0 -0
  80. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_saml_ui_logo_info.py +0 -0
  81. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_submission_rubric_item_data_parser.py +0 -0
  82. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/about.py +0 -0
  83. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/abstract_role.py +0 -0
  84. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/add_users_section_data.py +0 -0
  85. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/all_auto_test_results.py +0 -0
  86. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/always_update_pii_with_lti_setting.py +0 -0
  87. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/analytics_enabled_setting.py +0 -0
  88. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_auto_test_step_as_json.py +0 -0
  89. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_error.py +0 -0
  90. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_non_redacted_auto_test_step_as_json.py +0 -0
  91. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_redacted_auto_test_step_as_json.py +0 -0
  92. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/api_codes.py +0 -0
  93. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment.py +0 -0
  94. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_anonymization_algo.py +0 -0
  95. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_default_grading_scale_points_setting.py +0 -0
  96. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_default_grading_scale_setting.py +0 -0
  97. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_description_enabled_setting.py +0 -0
  98. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_description_on_teachers_submissions_page_setting.py +0 -0
  99. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_done_type.py +0 -0
  100. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_export_column.py +0 -0
  101. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_feedback.py +0 -0
  102. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_grader.py +0 -0
  103. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_grading_scale_points_enabled_setting.py +0 -0
  104. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_kind.py +0 -0
  105. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_login_link.py +0 -0
  106. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_max_points_enabled_setting.py +0 -0
  107. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_peer_feedback_connection.py +0 -0
  108. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_peer_feedback_settings.py +0 -0
  109. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_percentage_decimals_setting.py +0 -0
  110. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_percentage_grading_settings.py +0 -0
  111. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_point_decimals_setting.py +0 -0
  112. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_points_grading_settings.py +0 -0
  113. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_section_timeframe.py +0 -0
  114. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_state_enum.py +0 -0
  115. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_submission_mode.py +0 -0
  116. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_template.py +0 -0
  117. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_timeframes.py +0 -0
  118. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/at_image_caching_enabled_setting.py +0 -0
  119. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test.py +0 -0
  120. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_capture_points_message_setting.py +0 -0
  121. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_checkpoint_message_setting.py +0 -0
  122. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_code_quality_message_setting.py +0 -0
  123. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_enabled_setting.py +0 -0
  124. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_fixture.py +0 -0
  125. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_global_setup_output.py +0 -0
  126. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_global_setup_script.py +0 -0
  127. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_heartbeat_interval_setting.py +0 -0
  128. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_heartbeat_max_missed_setting.py +0 -0
  129. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_io_test_message_setting.py +0 -0
  130. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_io_test_sub_message_setting.py +0 -0
  131. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_concurrent_batch_runs_setting.py +0 -0
  132. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_global_setup_time_setting.py +0 -0
  133. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_jobs_per_runner_setting.py +0 -0
  134. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_per_student_setup_time_setting.py +0 -0
  135. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_result_not_started_setting.py +0 -0
  136. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_time_command_setting.py +0 -0
  137. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_unit_test_metadata_length_setting.py +0 -0
  138. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_quality_comment.py +0 -0
  139. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result.py +0 -0
  140. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result_state.py +0 -0
  141. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result_with_extra_data.py +0 -0
  142. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_run.py +0 -0
  143. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_run_program_message_setting.py +0 -0
  144. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_runner.py +0 -0
  145. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_runner_state.py +0 -0
  146. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_set.py +0 -0
  147. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base.py +0 -0
  148. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base_as_json.py +0 -0
  149. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base_input_as_json.py +0 -0
  150. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_log_base.py +0 -0
  151. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_result.py +0 -0
  152. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_result_state.py +0 -0
  153. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_validation_exception.py +0 -0
  154. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_suite.py +0 -0
  155. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_unit_test_message_setting.py +0 -0
  156. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/automatic_lti1p3_assignment_import_setting.py +0 -0
  157. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/automatic_lti_role_enabled_setting.py +0 -0
  158. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_about.py +0 -0
  159. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_auto_test_quality_comment.py +0 -0
  160. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base.py +0 -0
  161. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base_with_extended_replies.py +0 -0
  162. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base_with_normal_replies.py +0 -0
  163. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_reply.py +0 -0
  164. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_course_coupon.py +0 -0
  165. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_directory.py +0 -0
  166. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_error.py +0 -0
  167. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_file.py +0 -0
  168. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lms_capabilities.py +0 -0
  169. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti1p1_provider.py +0 -0
  170. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti1p3_provider.py +0 -0
  171. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti_provider.py +0 -0
  172. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_notification.py +0 -0
  173. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_release_info.py +0 -0
  174. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_rubric_item.py +0 -0
  175. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_tenant_coupon.py +0 -0
  176. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/blackboard_zip_upload_enabled_setting.py +0 -0
  177. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/bulk_enroll_course_data.py +0 -0
  178. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/canvas_course_id_copying_enabled_setting.py +0 -0
  179. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/cg_ignore_version.py +0 -0
  180. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/change_user_role_course_data.py +0 -0
  181. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_as_json.py +0 -0
  182. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_data.py +0 -0
  183. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_extra.py +0 -0
  184. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_input_as_json.py +0 -0
  185. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/clone_result.py +0 -0
  186. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_editor_output_viewer_title_setting.py +0 -0
  187. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_as_json.py +0 -0
  188. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_base_data.py +0 -0
  189. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_data.py +0 -0
  190. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_extra.py +0 -0
  191. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_input_as_json.py +0 -0
  192. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_penalties.py +0 -0
  193. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/column_range.py +0 -0
  194. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_base.py +0 -0
  195. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply.py +0 -0
  196. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply_edit.py +0 -0
  197. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply_type.py +0 -0
  198. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_type.py +0 -0
  199. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/community_library_publishing_setting.py +0 -0
  200. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/community_library_setting.py +0 -0
  201. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/connect_repository_git_provider_data.py +0 -0
  202. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/copy_auto_test_data.py +0 -0
  203. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/copy_rubric_assignment_data.py +0 -0
  204. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_data_parser.py +0 -0
  205. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_with_code.py +0 -0
  206. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_without_code.py +0 -0
  207. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course.py +0 -0
  208. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_bulk_enroll_result.py +0 -0
  209. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_bulk_register_enabled_setting.py +0 -0
  210. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_coupon.py +0 -0
  211. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_coupon_usage.py +0 -0
  212. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_gradebook_enabled_setting.py +0 -0
  213. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_gradebook_render_warning_size_setting.py +0 -0
  214. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_of_course_price.py +0 -0
  215. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_of_tenant_coupon_usage.py +0 -0
  216. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_perm_map.py +0 -0
  217. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_permission.py +0 -0
  218. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_price.py +0 -0
  219. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_register_enabled_setting.py +0 -0
  220. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_registration_link.py +0 -0
  221. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_role.py +0 -0
  222. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_role_as_json_with_perms.py +0 -0
  223. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section.py +0 -0
  224. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division.py +0 -0
  225. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division_connection.py +0 -0
  226. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division_user.py +0 -0
  227. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_snippet.py +0 -0
  228. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_state.py +0 -0
  229. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_statistics_as_json.py +0 -0
  230. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_assignment_course_data.py +0 -0
  231. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_auto_test_data.py +0 -0
  232. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_comment_data.py +0 -0
  233. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_comment_reply_data.py +0 -0
  234. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_course_data.py +0 -0
  235. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_division_section_data.py +0 -0
  236. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_group_group_set_data.py +0 -0
  237. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_group_set_course_data.py +0 -0
  238. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_lti_data.py +0 -0
  239. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_output_html_proxy_auto_test_data.py +0 -0
  240. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_proxy_submission_data.py +0 -0
  241. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_repository_git_provider_data.py +0 -0
  242. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_role_course_data.py +0 -0
  243. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_section_course_data.py +0 -0
  244. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_snippet_course_data.py +0 -0
  245. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_snippet_data.py +0 -0
  246. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_sso_provider_data.py +0 -0
  247. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_tenant_data.py +0 -0
  248. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/csv_large_file_limit_setting.py +0 -0
  249. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/csv_too_many_errors_limit_setting.py +0 -0
  250. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/currency.py +0 -0
  251. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_as_json.py +0 -0
  252. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_data.py +0 -0
  253. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_extra.py +0 -0
  254. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_input_as_json.py +0 -0
  255. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_log.py +0 -0
  256. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_log_base.py +0 -0
  257. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_course_ta_role_setting.py +0 -0
  258. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_course_teacher_role_setting.py +0 -0
  259. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_submission_page_tab_setting.py +0 -0
  260. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/deleted_comment_reply.py +0 -0
  261. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/deletion_type.py +0 -0
  262. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/directory_with_children.py +0 -0
  263. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/disabled_setting_exception.py +0 -0
  264. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/display_grades_enabled_setting.py +0 -0
  265. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/editor_enabled_for_teachers_setting.py +0 -0
  266. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/editor_enabled_setting.py +0 -0
  267. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_notification_types.py +0 -0
  268. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_students_enabled_setting.py +0 -0
  269. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_users_course_data.py +0 -0
  270. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/exam_login_max_length_setting.py +0 -0
  271. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_csv_data.py +0 -0
  272. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_data.py +0 -0
  273. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_files_data.py +0 -0
  274. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_auto_test_result.py +0 -0
  275. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_auto_test_run.py +0 -0
  276. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course.py +0 -0
  277. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course_registration_link.py +0 -0
  278. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course_section.py +0 -0
  279. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_group.py +0 -0
  280. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_job.py +0 -0
  281. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_non_deleted_comment_reply.py +0 -0
  282. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_tenant.py +0 -0
  283. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_transaction.py +0 -0
  284. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_user.py +0 -0
  285. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_work.py +0 -0
  286. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extract_file_tree_directory.py +0 -0
  287. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extract_file_tree_file.py +0 -0
  288. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/failed_to_send_email_exception.py +0 -0
  289. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_base.py +0 -0
  290. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_threads_initially_collapsed_setting.py +0 -0
  291. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_with_replies.py +0 -0
  292. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_without_replies.py +0 -0
  293. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_deletion.py +0 -0
  294. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_rule.py +0 -0
  295. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_rule_input_data.py +0 -0
  296. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_tree.py +0 -0
  297. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_type.py +0 -0
  298. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/finalized_lti1p1_provider.py +0 -0
  299. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/finalized_lti1p3_provider.py +0 -0
  300. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/first_phase_lti_launch_exception.py +0 -0
  301. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixed_availability.py +0 -0
  302. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixed_grade_availability.py +0 -0
  303. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixture_like.py +0 -0
  304. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fraction.py +0 -0
  305. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_comment_base.py +0 -0
  306. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_comment_base_with_extended_replies.py +0 -0
  307. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_extra.py +0 -0
  308. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_repositories_page.py +0 -0
  309. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_repository_like.py +0 -0
  310. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_user_info.py +0 -0
  311. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/github_template_repo_enabled_setting.py +0 -0
  312. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/global_perm_map.py +0 -0
  313. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/global_permission.py +0 -0
  314. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grade_history.py +0 -0
  315. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grade_origin.py +0 -0
  316. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grading_notifications_enabled_setting.py +0 -0
  317. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group.py +0 -0
  318. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group_not_ready_for_submission_exception.py +0 -0
  319. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group_set.py +0 -0
  320. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/groups_enabled_setting.py +0 -0
  321. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/has_unread_notifcation_json.py +0 -0
  322. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/health_information.py +0 -0
  323. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_code_editor_filetree_controls_with_only_quiz_steps_setting.py +0 -0
  324. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_code_editor_output_viewer_with_only_quiz_steps_setting.py +0 -0
  325. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_empty_rubric_row_description_setting.py +0 -0
  326. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hubspot_syncing_enabled_setting.py +0 -0
  327. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/ignore_handling.py +0 -0
  328. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/ignored_files_exception.py +0 -0
  329. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/import_into_assignment_data.py +0 -0
  330. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/import_into_course_data.py +0 -0
  331. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/incremental_rubric_submission_enabled_setting.py +0 -0
  332. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_comment_base.py +0 -0
  333. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_comment_base_with_extended_replies.py +0 -0
  334. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_extra.py +0 -0
  335. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_rubric_viewer_enabled_setting.py +0 -0
  336. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_group_exception.py +0 -0
  337. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_io_cases_exception.py +0 -0
  338. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_options_exception.py +0 -0
  339. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_as_json.py +0 -0
  340. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_base_data.py +0 -0
  341. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_data.py +0 -0
  342. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_extra.py +0 -0
  343. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_input_as_json.py +0 -0
  344. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_input_case.py +0 -0
  345. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_log.py +0 -0
  346. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_option.py +0 -0
  347. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_step_log.py +0 -0
  348. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_step_log_base.py +0 -0
  349. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/is_admin_permission_enabled_setting.py +0 -0
  350. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/job.py +0 -0
  351. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_create_auto_test.py +0 -0
  352. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_create_tenant.py +0 -0
  353. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_patch_auto_test.py +0 -0
  354. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_patch_submit_types_assignment.py +0 -0
  355. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_as_json.py +0 -0
  356. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_base_data.py +0 -0
  357. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_data.py +0 -0
  358. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_extra.py +0 -0
  359. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_input_as_json.py +0 -0
  360. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_log.py +0 -0
  361. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_log_base.py +0 -0
  362. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/jwt_access_token_expires_setting.py +0 -0
  363. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/legacy_features.py +0 -0
  364. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/line_range.py +0 -0
  365. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/linter_comment.py +0 -0
  366. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/linters_enabled_setting.py +0 -0
  367. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lms_capabilities.py +0 -0
  368. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/login_token_before_time_setting.py +0 -0
  369. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/login_user_data.py +0 -0
  370. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/logout_response.py +0 -0
  371. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/logout_user_data.py +0 -0
  372. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p1_provider.py +0 -0
  373. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p1_provider_data.py +0 -0
  374. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_nonce_and_state_validation_enabled_setting.py +0 -0
  375. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_parse_most_privileged_role_setting.py +0 -0
  376. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_prevent_nonce_reuse_enabled_setting.py +0 -0
  377. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider.py +0 -0
  378. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider_data.py +0 -0
  379. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider_presentation_as_json.py +0 -0
  380. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_system_role_from_context_role_setting.py +0 -0
  381. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_enabled_setting.py +0 -0
  382. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_first_launch_content_id_enabled_setting.py +0 -0
  383. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_launch_data_logging_setting.py +0 -0
  384. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_lock_date_copying_enabled_setting.py +0 -0
  385. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_provider_base.py +0 -0
  386. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_unset_deadline_lock_date_enabled_setting.py +0 -0
  387. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_document_update_size_setting.py +0 -0
  388. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_dynamo_file_size_setting.py +0 -0
  389. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_dynamo_submission_size_setting.py +0 -0
  390. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_file_size_setting.py +0 -0
  391. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_large_upload_size_setting.py +0 -0
  392. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_lines_setting.py +0 -0
  393. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_normal_upload_size_setting.py +0 -0
  394. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_number_of_files_setting.py +0 -0
  395. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_plagiarism_matches_setting.py +0 -0
  396. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_user_setting_amount_setting.py +0 -0
  397. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/min_password_score_setting.py +0 -0
  398. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/mirror_file_result.py +0 -0
  399. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/missing_cookie_error.py +0 -0
  400. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/missing_file.py +0 -0
  401. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/name_and_email_from_nrps_only_setting.py +0 -0
  402. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_allowed_initial_build_ids_setting.py +0 -0
  403. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_build_max_command_time_setting.py +0 -0
  404. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_build_output_limit_setting.py +0 -0
  405. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_copying_enabled_setting.py +0 -0
  406. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_current_initial_build_ids_setting.py +0 -0
  407. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_diff_viewer_enabled_setting.py +0 -0
  408. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_enabled_setting.py +0 -0
  409. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_initial_build_id_setting.py +0 -0
  410. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_dynamodb_size_setting.py +0 -0
  411. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_file_size_setting.py +0 -0
  412. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_output_files_size_setting.py +0 -0
  413. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_storage_size_setting.py +0 -0
  414. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_old_submission_age_setting.py +0 -0
  415. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_test_max_command_time_setting.py +0 -0
  416. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_test_output_limit_setting.py +0 -0
  417. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_uncollapsing_step_output_delay_setting.py +0 -0
  418. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/no_permissions.py +0 -0
  419. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_deleted_comment_reply.py +0 -0
  420. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_finalized_lti1p1_provider.py +0 -0
  421. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_finalized_lti1p3_provider.py +0 -0
  422. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_present_preference.py +0 -0
  423. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification.py +0 -0
  424. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_comment_reply_notification_as_json.py +0 -0
  425. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_general_feedback_reply_notification_as_json.py +0 -0
  426. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_poll_time_setting.py +0 -0
  427. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_reasons.py +0 -0
  428. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_setting.py +0 -0
  429. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_setting_option.py +0 -0
  430. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notifications_json.py +0 -0
  431. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/oauth_provider.py +0 -0
  432. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/oauth_token.py +0 -0
  433. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/option.py +0 -0
  434. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/options_input_data.py +0 -0
  435. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/output_viewer_animation_limit_lines_count_setting.py +0 -0
  436. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/parse_api_exception.py +0 -0
  437. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch1_p1_provider_lti_data.py +0 -0
  438. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch1_p3_provider_lti_data.py +0 -0
  439. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_all_notification_data.py +0 -0
  440. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_assignment_data.py +0 -0
  441. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_auto_test_data.py +0 -0
  442. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_comment_reply_data.py +0 -0
  443. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_course_data.py +0 -0
  444. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_grader_submission_data.py +0 -0
  445. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_notification_data.py +0 -0
  446. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_notification_setting_user_setting_data.py +0 -0
  447. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_provider_lti_data.py +0 -0
  448. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_course_data.py +0 -0
  449. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_data.py +0 -0
  450. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_tenant_data.py +0 -0
  451. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_rubric_category_type_assignment_data.py +0 -0
  452. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_rubric_result_submission_data.py +0 -0
  453. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_section_data.py +0 -0
  454. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_settings_tenant_data.py +0 -0
  455. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_site_settings_data.py +0 -0
  456. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_snippet_course_data.py +0 -0
  457. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_snippet_data.py +0 -0
  458. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_submission_data.py +0 -0
  459. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_submit_types_assignment_data.py +0 -0
  460. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_tenant_data.py +0 -0
  461. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_ui_preference_user_setting_data.py +0 -0
  462. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_user_data.py +0 -0
  463. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/pay_with_coupon_course_price_data.py +0 -0
  464. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/pearson_templates_setting.py +0 -0
  465. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/peer_feedback_enabled_setting.py +0 -0
  466. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/permission_exception.py +0 -0
  467. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_bulk_export_enabled_setting.py +0 -0
  468. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_bulk_export_max_cases_setting.py +0 -0
  469. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_case.py +0 -0
  470. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_pdf_export_enabled_setting.py +0 -0
  471. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run.py +0 -0
  472. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run_plagiarism_assignment_as_json.py +0 -0
  473. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run_plagiarism_course_as_json.py +0 -0
  474. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_state.py +0 -0
  475. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/post_oauth_token_data.py +0 -0
  476. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/present_preference.py +0 -0
  477. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/proxy.py +0 -0
  478. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_description_assignment_data.py +0 -0
  479. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_enroll_link_course_data.py +0 -0
  480. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_price_course_data.py +0 -0
  481. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_price_tenant_data.py +0 -0
  482. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_rubric_assignment_data.py +0 -0
  483. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_comment_severity.py +0 -0
  484. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_comments_in_code_editor_setting.py +0 -0
  485. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_test_log.py +0 -0
  486. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_test_log_base.py +0 -0
  487. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_enabled_setting.py +0 -0
  488. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_user_data.py +0 -0
  489. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_user_with_link_course_data.py +0 -0
  490. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/release_info.py +0 -0
  491. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/release_message_max_time_setting.py +0 -0
  492. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rename_group_group_data.py +0 -0
  493. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/render_html_enabled_setting.py +0 -0
  494. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/repository_connection_limit_reached_exception.py +0 -0
  495. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/reset_token_time_setting.py +0 -0
  496. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_get_auto_test_get.py +0 -0
  497. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_get_task_result_get_all.py +0 -0
  498. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_section_create_division.py +0 -0
  499. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/role_as_json_with_perms.py +0 -0
  500. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/root_file_trees_json.py +0 -0
  501. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_description_type.py +0 -0
  502. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_enabled_for_teacher_on_submissions_page_setting.py +0 -0
  503. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_item.py +0 -0
  504. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_item_input_as_json.py +0 -0
  505. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_lock_reason.py +0 -0
  506. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base.py +0 -0
  507. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base_input_as_json.py +0 -0
  508. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base_input_base_as_json.py +0 -0
  509. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubrics_enabled_setting.py +0 -0
  510. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rule_type.py +0 -0
  511. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_as_json.py +0 -0
  512. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_data.py +0 -0
  513. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_extra.py +0 -0
  514. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_input_as_json.py +0 -0
  515. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_log.py +0 -0
  516. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/saml2_provider_json.py +0 -0
  517. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/saml_ui_info.py +0 -0
  518. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sections_in_submission_list_enabled_setting.py +0 -0
  519. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/send_registration_email_setting.py +0 -0
  520. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_correction_enabled_setting.py +0 -0
  521. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_diff_tolerance_setting.py +0 -0
  522. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_sync_interval_setting.py +0 -0
  523. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/setting_token_time_setting.py +0 -0
  524. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/setup_oauth_result.py +0 -0
  525. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/simple_submission_mode_enabled_setting.py +0 -0
  526. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/simple_submission_navigate_to_latest_editor_session_setting.py +0 -0
  527. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/site_email_setting.py +0 -0
  528. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/snippet.py +0 -0
  529. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sso_infer_global_staff_role_setting.py +0 -0
  530. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sso_username_decollision_enabled_setting.py +0 -0
  531. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/staged_assignment_importer_enabled_setting.py +0 -0
  532. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_close_tab_data.py +0 -0
  533. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_data.py +0 -0
  534. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_redirect_data.py +0 -0
  535. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/started_transaction.py +0 -0
  536. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/student_payment_enabled_setting.py +0 -0
  537. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/submission_validator_input_data.py +0 -0
  538. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/submissions_per_page_enabled_setting.py +0 -0
  539. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/task_result_state.py +0 -0
  540. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tax_behavior.py +0 -0
  541. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant.py +0 -0
  542. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon.py +0 -0
  543. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_usage.py +0 -0
  544. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_with_code.py +0 -0
  545. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_without_code.py +0 -0
  546. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_course_statistics.py +0 -0
  547. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_of_tenant_price.py +0 -0
  548. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_permissions.py +0 -0
  549. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_price.py +0 -0
  550. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_role_as_json_with_perms.py +0 -0
  551. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_statistics.py +0 -0
  552. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/test_submission_copying_on_import_enabled_setting.py +0 -0
  553. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/timed_availability.py +0 -0
  554. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/timeframe_like.py +0 -0
  555. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/token_revoked_exception.py +0 -0
  556. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/transaction.py +0 -0
  557. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/transaction_state.py +0 -0
  558. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/types.py +0 -0
  559. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_peer_feedback_settings_assignment_data.py +0 -0
  560. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_set_auto_test_data.py +0 -0
  561. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_suite_auto_test_base_data.py +0 -0
  562. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_suite_auto_test_data.py +0 -0
  563. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/upgraded_lti_provider_exception.py +0 -0
  564. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/upload_submission_assignment_data.py +0 -0
  565. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user.py +0 -0
  566. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_course.py +0 -0
  567. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_info_with_role.py +0 -0
  568. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_input.py +0 -0
  569. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_without_group.py +0 -0
  570. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/weak_password_exception.py +0 -0
  571. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/weak_password_feedback.py +0 -0
  572. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_base.py +0 -0
  573. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_configuration_disabled_as_json.py +0 -0
  574. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_configuration_enabled_as_json.py +0 -0
  575. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work.py +0 -0
  576. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_origin.py +0 -0
  577. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_item.py +0 -0
  578. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_result_as_json.py +0 -0
  579. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_result_points_as_json.py +0 -0
  580. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/parsers.py +0 -0
  581. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/py.typed +0 -0
  582. {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codegrade
3
- Version: 16.1.57
3
+ Version: 16.1.60
4
4
  Summary: A client library for accessing CodeGrade
5
5
  License: AGPL-3.0-only OR BSD-3-Clause-Clear
6
6
  Requires-Python: >=3.8.0,<4.0
@@ -221,28 +221,44 @@ def remove_converter(converter: Converter) -> None:
221
221
  _CONVERTERS = [c for c in _CONVERTERS if c[-1] != converter]
222
222
 
223
223
 
224
+ def get_required_keys(typ: t.Type) -> t.Set[str]:
225
+ """Retrieve the required keys from a given type hinted object.
226
+
227
+ This function specifically targets Python's `TypedDict` type, which allows
228
+ for optional keys. It uses the `get_type_hints` function from the `typing`
229
+ module to extract the type hints from the given object. It then iterates
230
+ over the annotations, checking for keys with a `NotRequired`
231
+ origin. These keys are considered optional and are discarded from the set
232
+ of required keys.
233
+
234
+ :param typ: The type hinted object from which to retrieve the required keys
235
+ :return: A set of strings representing the required keys.
236
+ """
237
+ annotations = t.get_type_hints(typ, include_extras=True)
238
+ required_keys = set(typ.__required_keys__)
239
+ for key, subtyp in annotations.items():
240
+ origin = t.get_origin(subtyp)
241
+ # The reason for these checks:
242
+ # https://docs.python.org/3/library/typing.html#typing.TypedDict.__optional_keys__
243
+ if origin == t.NotRequired:
244
+ required_keys.discard(key)
245
+ return required_keys
246
+
247
+
224
248
  def _get_args_typeddict(
225
249
  ctx: ConvertCtx,
226
250
  get_doc: t.Callable[[str], str] = lambda _: '',
227
251
  ) -> t.Sequence[t.Union[RequiredArgument, OptionalArgument]]:
228
252
  args: t.List[t.Union[RequiredArgument, OptionalArgument]] = []
229
- annotations = t.get_type_hints(ctx.typ, include_extras=True)
230
- required_keys = set(ctx.typ.__required_keys__)
253
+ annotations = t.get_type_hints(ctx.typ)
254
+ required_keys = get_required_keys(ctx.typ)
231
255
 
232
256
  for key, subtyp in annotations.items():
233
257
  doc = get_doc(key)
234
- origin = t.get_origin(subtyp)
235
- # The reason for these checks:
236
- # https://docs.python.org/3/library/typing.html#typing.TypedDict.__optional_keys__
237
- if origin in (t.NotRequired, t.Required):
238
- required = origin == t.Required
239
- subtyp = subtyp.__args__[0]
240
- else:
241
- required = key in required_keys
242
258
 
243
259
  sub_parse = ctx.recurse_with_guard(subtyp)
244
260
 
245
- if required:
261
+ if key in required_keys:
246
262
  args.append(
247
263
  RequiredArgument(key, sub_parse, doc) # type: ignore[misc]
248
264
  )
@@ -7,7 +7,7 @@ from functools import wraps
7
7
  from .client import AuthenticatedClient, Client
8
8
 
9
9
  __all__ = ("login", "AuthenticatedClient", "Client", "login_from_cli")
10
- __version__ = "16.1.57"
10
+ __version__ = "16.1.60"
11
11
 
12
12
 
13
13
  @wraps(AuthenticatedClient.get)
@@ -19,6 +19,7 @@ from . import (
19
19
  permission,
20
20
  plagiarism,
21
21
  role,
22
+ saml,
22
23
  section,
23
24
  site_settings,
24
25
  snippet,
@@ -21,7 +21,6 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
21
21
  from ..models.course_bulk_enroll_result import CourseBulkEnrollResult
22
22
  from ..models.course_perm_map import CoursePermMap
23
23
  from ..models.course_price import CoursePrice
24
- from ..models.course_register_response import CourseRegisterResponse
25
24
  from ..models.course_registration_link import CourseRegistrationLink
26
25
  from ..models.course_role import CourseRole
27
26
  from ..models.course_role_as_json_with_perms import (
@@ -57,6 +56,7 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
57
56
  )
58
57
  from ..models.user import User
59
58
  from ..models.user_course import UserCourse
59
+ from ..models.user_login_response import UserLoginResponse
60
60
 
61
61
 
62
62
  _ClientT = t.TypeVar("_ClientT", bound="codegrade.client._BaseClient")
@@ -1865,7 +1865,7 @@ class CourseService(t.Generic[_ClientT]):
1865
1865
  extra_parameters: t.Optional[
1866
1866
  t.Mapping[str, t.Union[str, bool, int, float]]
1867
1867
  ] = None,
1868
- ) -> "CourseRegisterResponse":
1868
+ ) -> "UserLoginResponse":
1869
1869
  """Register as a new user, and directly enroll in a course.
1870
1870
 
1871
1871
  :param json_body: The body of the request. See
@@ -1895,11 +1895,11 @@ class CourseService(t.Generic[_ClientT]):
1895
1895
 
1896
1896
  if utils.response_code_matches(resp.status_code, 200):
1897
1897
  # fmt: off
1898
- from ..models.course_register_response import CourseRegisterResponse
1898
+ from ..models.user_login_response import UserLoginResponse
1899
1899
 
1900
1900
  # fmt: on
1901
1901
  return parsers.JsonResponseParser(
1902
- parsers.ParserFor.make(CourseRegisterResponse)
1902
+ parsers.ParserFor.make(UserLoginResponse)
1903
1903
  ).try_parse(resp)
1904
1904
 
1905
1905
  from ..models.any_error import AnyError
@@ -0,0 +1,79 @@
1
+ """The endpoints for saml objects.
2
+
3
+ SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
4
+ """
5
+ import os
6
+ import typing as t
7
+
8
+ import cg_request_args as rqa
9
+ from cg_maybe import Maybe, Nothing
10
+
11
+ from .. import parsers, utils
12
+
13
+ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
14
+ import codegrade
15
+
16
+ from ..models.user_login_response import UserLoginResponse
17
+
18
+
19
+ _ClientT = t.TypeVar("_ClientT", bound="codegrade.client._BaseClient")
20
+
21
+
22
+ class SamlService(t.Generic[_ClientT]):
23
+ __slots__ = ("__client",)
24
+
25
+ def __init__(self, client: _ClientT) -> None:
26
+ self.__client = client
27
+
28
+ def get_session(
29
+ self,
30
+ *,
31
+ token: "str",
32
+ extra_parameters: t.Optional[
33
+ t.Mapping[str, t.Union[str, bool, int, float]]
34
+ ] = None,
35
+ ) -> "UserLoginResponse":
36
+ """Get a JWT token for a user after doing a successful launch.
37
+
38
+ This method will use various pieces of information from the session
39
+ from the requested user.
40
+
41
+ This method can only be used once to retrieve the JWT, as the data will
42
+ be removed after the first request.
43
+
44
+ :param token: The token that we will use to verify that you are the
45
+ correct owner of the SAML launch. This data will be cross
46
+ referenced to stored data and your session.
47
+ :param extra_parameters: The extra query parameters you might want to
48
+ add. By default no extra query parameters are added.
49
+
50
+ :returns: A mapping containing one key (`access_token`).
51
+ """
52
+
53
+ url = "/api/sso/saml2/jwts/{token}".format(token=token)
54
+ params = extra_parameters or {}
55
+
56
+ with self.__client as client:
57
+ resp = client.http.post(url=url, params=params)
58
+ utils.log_warnings(resp)
59
+
60
+ if utils.response_code_matches(resp.status_code, 200):
61
+ # fmt: off
62
+ from ..models.user_login_response import UserLoginResponse
63
+
64
+ # fmt: on
65
+ return parsers.JsonResponseParser(
66
+ parsers.ParserFor.make(UserLoginResponse)
67
+ ).try_parse(resp)
68
+
69
+ from ..models.any_error import AnyError
70
+
71
+ raise utils.get_error(
72
+ resp,
73
+ (
74
+ (
75
+ (400, 409, 401, 403, 404, 429, 500),
76
+ utils.unpack_union(AnyError),
77
+ ),
78
+ ),
79
+ )
@@ -53,6 +53,7 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
53
53
  PlagiarismService as _PlagiarismService,
54
54
  )
55
55
  from codegrade._api.role import RoleService as _RoleService
56
+ from codegrade._api.saml import SamlService as _SamlService
56
57
  from codegrade._api.section import SectionService as _SectionService
57
58
  from codegrade._api.site_settings import (
58
59
  SiteSettingsService as _SiteSettingsService,
@@ -100,6 +101,7 @@ class _BaseClient:
100
101
  "__permission",
101
102
  "__plagiarism",
102
103
  "__role",
104
+ "__saml",
103
105
  "__section",
104
106
  "__site_settings",
105
107
  "__snippet",
@@ -155,6 +157,7 @@ class _BaseClient:
155
157
  "_PlagiarismService[_BaseClientT]"
156
158
  ] = None
157
159
  self.__role: t.Optional["_RoleService[_BaseClientT]"] = None
160
+ self.__saml: t.Optional["_SamlService[_BaseClientT]"] = None
158
161
  self.__section: t.Optional["_SectionService[_BaseClientT]"] = None
159
162
  self.__site_settings: t.Optional[
160
163
  "_SiteSettingsService[_BaseClientT]"
@@ -399,6 +402,15 @@ class _BaseClient:
399
402
  self.__role = m.RoleService(self)
400
403
  return self.__role
401
404
 
405
+ @property
406
+ def saml(self: _BaseClientT) -> "_SamlService[_BaseClientT]":
407
+ """Get a :class:`.SamlService` to do requests concerning Saml."""
408
+ if self.__saml is None:
409
+ import codegrade._api.saml as m
410
+
411
+ self.__saml = m.SamlService(self)
412
+ return self.__saml
413
+
402
414
  @property
403
415
  def section(self: _BaseClientT) -> "_SectionService[_BaseClientT]":
404
416
  """Get a :class:`.SectionService` to do requests concerning Section."""
@@ -526,7 +538,7 @@ class Client(_BaseClient):
526
538
  return httpx.Client(
527
539
  base_url=self.base_url,
528
540
  headers={
529
- "User-Agent": "CodeGradeAPI/16.1.57",
541
+ "User-Agent": "CodeGradeAPI/16.1.60",
530
542
  },
531
543
  follow_redirects=True,
532
544
  )
@@ -546,7 +558,7 @@ class AuthenticatedClient(_BaseClient):
546
558
  base_url=self.base_url,
547
559
  headers={
548
560
  "Authorization": f"Bearer {self.token}",
549
- "User-Agent": "CodeGradeAPI/16.1.57",
561
+ "User-Agent": "CodeGradeAPI/16.1.60",
550
562
  },
551
563
  follow_redirects=True,
552
564
  )
@@ -215,7 +215,6 @@ from .course_perm_map import CoursePermMap
215
215
  from .course_permission import CoursePermission
216
216
  from .course_price import CoursePrice
217
217
  from .course_register_enabled_setting import CourseRegisterEnabledSetting
218
- from .course_register_response import CourseRegisterResponse
219
218
  from .course_registration_link import CourseRegistrationLink
220
219
  from .course_role import CourseRole
221
220
  from .course_role_as_json_with_perms import CourseRoleAsJSONWithPerms
@@ -349,6 +348,7 @@ from .hide_code_editor_output_viewer_with_only_quiz_steps_setting import (
349
348
  from .hide_empty_rubric_row_description_setting import (
350
349
  HideEmptyRubricRowDescriptionSetting,
351
350
  )
351
+ from .hide_no_deadline_enabled_setting import HideNoDeadlineEnabledSetting
352
352
  from .hubspot_syncing_enabled_setting import HubspotSyncingEnabledSetting
353
353
  from .ignore_handling import IgnoreHandling
354
354
  from .ignored_files_exception import IgnoredFilesException
@@ -609,6 +609,9 @@ from .result_data_post_section_create_division import (
609
609
  )
610
610
  from .result_data_post_user_login import ResultDataPostUserLogin
611
611
  from .result_data_post_user_register import ResultDataPostUserRegister
612
+ from .retry_group_submission_grade_passback_enabled_setting import (
613
+ RetryGroupSubmissionGradePassbackEnabledSetting,
614
+ )
612
615
  from .role_as_json_with_perms import RoleAsJSONWithPerms
613
616
  from .root_file_trees_json import RootFileTreesJSON
614
617
  from .rubric_description_type import RubricDescriptionType
@@ -639,6 +642,7 @@ from .server_time_correction_enabled_setting import (
639
642
  )
640
643
  from .server_time_diff_tolerance_setting import ServerTimeDiffToleranceSetting
641
644
  from .server_time_sync_interval_setting import ServerTimeSyncIntervalSetting
645
+ from .session_restrictions import SessionRestrictions
642
646
  from .setting_token_time_setting import SettingTokenTimeSetting
643
647
  from .setup_oauth_result import SetupOAuthResult
644
648
  from .simple_submission_mode_enabled_setting import (
@@ -704,6 +708,7 @@ from .user import User
704
708
  from .user_course import UserCourse
705
709
  from .user_info_with_role import UserInfoWithRole
706
710
  from .user_input import UserInput
711
+ from .user_login_response import UserLoginResponse
707
712
  from .user_without_group import UserWithoutGroup
708
713
  from .weak_password_exception import WeakPasswordException
709
714
  from .weak_password_feedback import WeakPasswordFeedback
@@ -984,6 +984,14 @@ class AllSiteSettings(FrontendSiteSettings):
984
984
  )
985
985
  if self.analytics_enabled.is_just:
986
986
  res["ANALYTICS_ENABLED"] = to_dict(self.analytics_enabled.value)
987
+ if self.hide_no_deadline_enabled.is_just:
988
+ res["HIDE_NO_DEADLINE_ENABLED"] = to_dict(
989
+ self.hide_no_deadline_enabled.value
990
+ )
991
+ if self.retry_group_submission_grade_passback_enabled.is_just:
992
+ res["RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"] = to_dict(
993
+ self.retry_group_submission_grade_passback_enabled.value
994
+ )
987
995
  if self.auto_test_heartbeat_interval.is_just:
988
996
  res["AUTO_TEST_HEARTBEAT_INTERVAL"] = to_dict(
989
997
  self.auto_test_heartbeat_interval.value
@@ -1237,6 +1245,8 @@ class AllSiteSettings(FrontendSiteSettings):
1237
1245
  hide_empty_rubric_row_description=parsed.HIDE_EMPTY_RUBRIC_ROW_DESCRIPTION,
1238
1246
  default_submission_page_tab=parsed.DEFAULT_SUBMISSION_PAGE_TAB,
1239
1247
  analytics_enabled=parsed.ANALYTICS_ENABLED,
1248
+ hide_no_deadline_enabled=parsed.HIDE_NO_DEADLINE_ENABLED,
1249
+ retry_group_submission_grade_passback_enabled=parsed.RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED,
1240
1250
  auto_test_heartbeat_interval=parsed.AUTO_TEST_HEARTBEAT_INTERVAL,
1241
1251
  auto_test_heartbeat_max_missed=parsed.AUTO_TEST_HEARTBEAT_MAX_MISSED,
1242
1252
  auto_test_max_jobs_per_runner=parsed.AUTO_TEST_MAX_JOBS_PER_RUNNER,
@@ -311,6 +311,12 @@ class FrontendSiteSettings:
311
311
  #: Whether the Analytics tab should be available on assignments in this
312
312
  #: tenant.
313
313
  analytics_enabled: Maybe["bool"] = Nothing
314
+ #: Should we hide the "No deadline" message if no deadline or lock date is
315
+ #: set.
316
+ hide_no_deadline_enabled: Maybe["bool"] = Nothing
317
+ #: Should we retry passing back grades for group submissions when the
318
+ #: passback request failed for some but not all of the group members.
319
+ retry_group_submission_grade_passback_enabled: Maybe["bool"] = Nothing
314
320
 
315
321
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
316
322
 
@@ -1038,6 +1044,23 @@ class FrontendSiteSettings:
1038
1044
  " assignments in this tenant."
1039
1045
  ),
1040
1046
  ),
1047
+ rqa.OptionalArgument(
1048
+ "HIDE_NO_DEADLINE_ENABLED",
1049
+ rqa.SimpleValue.bool,
1050
+ doc=(
1051
+ 'Should we hide the "No deadline" message if no deadline'
1052
+ " or lock date is set."
1053
+ ),
1054
+ ),
1055
+ rqa.OptionalArgument(
1056
+ "RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED",
1057
+ rqa.SimpleValue.bool,
1058
+ doc=(
1059
+ "Should we retry passing back grades for group submissions"
1060
+ " when the passback request failed for some but not all of"
1061
+ " the group members."
1062
+ ),
1063
+ ),
1041
1064
  ).use_readable_describe(True)
1042
1065
  )
1043
1066
 
@@ -1295,6 +1318,14 @@ class FrontendSiteSettings:
1295
1318
  self.default_submission_page_tab
1296
1319
  )
1297
1320
  self.analytics_enabled = maybe_from_nullable(self.analytics_enabled)
1321
+ self.hide_no_deadline_enabled = maybe_from_nullable(
1322
+ self.hide_no_deadline_enabled
1323
+ )
1324
+ self.retry_group_submission_grade_passback_enabled = (
1325
+ maybe_from_nullable(
1326
+ self.retry_group_submission_grade_passback_enabled
1327
+ )
1328
+ )
1298
1329
 
1299
1330
  def to_dict(self) -> t.Dict[str, t.Any]:
1300
1331
  res: t.Dict[str, t.Any] = {}
@@ -1636,6 +1667,14 @@ class FrontendSiteSettings:
1636
1667
  )
1637
1668
  if self.analytics_enabled.is_just:
1638
1669
  res["ANALYTICS_ENABLED"] = to_dict(self.analytics_enabled.value)
1670
+ if self.hide_no_deadline_enabled.is_just:
1671
+ res["HIDE_NO_DEADLINE_ENABLED"] = to_dict(
1672
+ self.hide_no_deadline_enabled.value
1673
+ )
1674
+ if self.retry_group_submission_grade_passback_enabled.is_just:
1675
+ res["RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"] = to_dict(
1676
+ self.retry_group_submission_grade_passback_enabled.value
1677
+ )
1639
1678
  return res
1640
1679
 
1641
1680
  @classmethod
@@ -1733,6 +1772,8 @@ class FrontendSiteSettings:
1733
1772
  hide_empty_rubric_row_description=parsed.HIDE_EMPTY_RUBRIC_ROW_DESCRIPTION,
1734
1773
  default_submission_page_tab=parsed.DEFAULT_SUBMISSION_PAGE_TAB,
1735
1774
  analytics_enabled=parsed.ANALYTICS_ENABLED,
1775
+ hide_no_deadline_enabled=parsed.HIDE_NO_DEADLINE_ENABLED,
1776
+ retry_group_submission_grade_passback_enabled=parsed.RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED,
1736
1777
  )
1737
1778
  res.raw_data = d
1738
1779
  return res
@@ -0,0 +1,56 @@
1
+ """The module that defines the ``HideNoDeadlineEnabledSetting`` model.
2
+
3
+ SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
4
+ """
5
+
6
+ import typing as t
7
+ from dataclasses import dataclass, field
8
+
9
+ import cg_request_args as rqa
10
+
11
+ from ..utils import to_dict
12
+
13
+
14
+ @dataclass
15
+ class HideNoDeadlineEnabledSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['HIDE_NO_DEADLINE_ENABLED']"
19
+ value: "t.Optional[bool]"
20
+
21
+ raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
22
+
23
+ data_parser: t.ClassVar = rqa.Lazy(
24
+ lambda: rqa.FixedMapping(
25
+ rqa.RequiredArgument(
26
+ "name",
27
+ rqa.StringEnum("HIDE_NO_DEADLINE_ENABLED"),
28
+ doc="",
29
+ ),
30
+ rqa.RequiredArgument(
31
+ "value",
32
+ rqa.Nullable(rqa.SimpleValue.bool),
33
+ doc="",
34
+ ),
35
+ ).use_readable_describe(True)
36
+ )
37
+
38
+ def to_dict(self) -> t.Dict[str, t.Any]:
39
+ res: t.Dict[str, t.Any] = {
40
+ "name": to_dict(self.name),
41
+ "value": to_dict(self.value),
42
+ }
43
+ return res
44
+
45
+ @classmethod
46
+ def from_dict(
47
+ cls: t.Type["HideNoDeadlineEnabledSetting"], d: t.Dict[str, t.Any]
48
+ ) -> "HideNoDeadlineEnabledSetting":
49
+ parsed = cls.data_parser.try_parse(d)
50
+
51
+ res = cls(
52
+ name=parsed.name,
53
+ value=parsed.value,
54
+ )
55
+ res.raw_data = d
56
+ return res
@@ -11,6 +11,7 @@ import cg_request_args as rqa
11
11
  from .. import parsers
12
12
  from ..utils import to_dict
13
13
  from .extended_user import ExtendedUser
14
+ from .session_restrictions import SessionRestrictions
14
15
 
15
16
 
16
17
  @dataclass
@@ -19,8 +20,10 @@ class ResultDataPostLoginLinkLogin:
19
20
 
20
21
  #: The user that was logged in.
21
22
  user: "ExtendedUser"
22
- #: A JWT token that can be used to do authenticated requests.
23
+ #: A session token that can be used to do authenticated requests.
23
24
  access_token: "str"
25
+ #: The restrictions of this access token.
26
+ restrictions: "SessionRestrictions"
24
27
 
25
28
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
26
29
 
@@ -35,10 +38,15 @@ class ResultDataPostLoginLinkLogin:
35
38
  "access_token",
36
39
  rqa.SimpleValue.str,
37
40
  doc=(
38
- "A JWT token that can be used to do authenticated"
41
+ "A session token that can be used to do authenticated"
39
42
  " requests."
40
43
  ),
41
44
  ),
45
+ rqa.RequiredArgument(
46
+ "restrictions",
47
+ parsers.ParserFor.make(SessionRestrictions),
48
+ doc="The restrictions of this access token.",
49
+ ),
42
50
  ).use_readable_describe(True)
43
51
  )
44
52
 
@@ -46,6 +54,7 @@ class ResultDataPostLoginLinkLogin:
46
54
  res: t.Dict[str, t.Any] = {
47
55
  "user": to_dict(self.user),
48
56
  "access_token": to_dict(self.access_token),
57
+ "restrictions": to_dict(self.restrictions),
49
58
  }
50
59
  return res
51
60
 
@@ -58,6 +67,7 @@ class ResultDataPostLoginLinkLogin:
58
67
  res = cls(
59
68
  user=parsed.user,
60
69
  access_token=parsed.access_token,
70
+ restrictions=parsed.restrictions,
61
71
  )
62
72
  res.raw_data = d
63
73
  return res
@@ -11,6 +11,7 @@ import cg_request_args as rqa
11
11
  from .. import parsers
12
12
  from ..utils import to_dict
13
13
  from .extended_user import ExtendedUser
14
+ from .session_restrictions import SessionRestrictions
14
15
 
15
16
 
16
17
  @dataclass
@@ -19,8 +20,10 @@ class ResultDataPostUserLogin:
19
20
 
20
21
  #: The user that was logged in.
21
22
  user: "ExtendedUser"
22
- #: A JWT token that can be used to do authenticated requests.
23
+ #: A session token that can be used to do authenticated requests.
23
24
  access_token: "str"
25
+ #: The restrictions of this access token.
26
+ restrictions: "SessionRestrictions"
24
27
 
25
28
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
26
29
 
@@ -35,10 +38,15 @@ class ResultDataPostUserLogin:
35
38
  "access_token",
36
39
  rqa.SimpleValue.str,
37
40
  doc=(
38
- "A JWT token that can be used to do authenticated"
41
+ "A session token that can be used to do authenticated"
39
42
  " requests."
40
43
  ),
41
44
  ),
45
+ rqa.RequiredArgument(
46
+ "restrictions",
47
+ parsers.ParserFor.make(SessionRestrictions),
48
+ doc="The restrictions of this access token.",
49
+ ),
42
50
  ).use_readable_describe(True)
43
51
  )
44
52
 
@@ -46,6 +54,7 @@ class ResultDataPostUserLogin:
46
54
  res: t.Dict[str, t.Any] = {
47
55
  "user": to_dict(self.user),
48
56
  "access_token": to_dict(self.access_token),
57
+ "restrictions": to_dict(self.restrictions),
49
58
  }
50
59
  return res
51
60
 
@@ -58,6 +67,7 @@ class ResultDataPostUserLogin:
58
67
  res = cls(
59
68
  user=parsed.user,
60
69
  access_token=parsed.access_token,
70
+ restrictions=parsed.restrictions,
61
71
  )
62
72
  res.raw_data = d
63
73
  return res
@@ -11,6 +11,7 @@ import cg_request_args as rqa
11
11
  from .. import parsers
12
12
  from ..utils import to_dict
13
13
  from .extended_user import ExtendedUser
14
+ from .session_restrictions import SessionRestrictions
14
15
 
15
16
 
16
17
  @dataclass
@@ -19,8 +20,10 @@ class ResultDataPostUserRegister:
19
20
 
20
21
  #: The user that was logged in.
21
22
  user: "ExtendedUser"
22
- #: A JWT token that can be used to do authenticated requests.
23
+ #: A session token that can be used to do authenticated requests.
23
24
  access_token: "str"
25
+ #: The restrictions of this access token.
26
+ restrictions: "SessionRestrictions"
24
27
 
25
28
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
26
29
 
@@ -35,10 +38,15 @@ class ResultDataPostUserRegister:
35
38
  "access_token",
36
39
  rqa.SimpleValue.str,
37
40
  doc=(
38
- "A JWT token that can be used to do authenticated"
41
+ "A session token that can be used to do authenticated"
39
42
  " requests."
40
43
  ),
41
44
  ),
45
+ rqa.RequiredArgument(
46
+ "restrictions",
47
+ parsers.ParserFor.make(SessionRestrictions),
48
+ doc="The restrictions of this access token.",
49
+ ),
42
50
  ).use_readable_describe(True)
43
51
  )
44
52
 
@@ -46,6 +54,7 @@ class ResultDataPostUserRegister:
46
54
  res: t.Dict[str, t.Any] = {
47
55
  "user": to_dict(self.user),
48
56
  "access_token": to_dict(self.access_token),
57
+ "restrictions": to_dict(self.restrictions),
49
58
  }
50
59
  return res
51
60
 
@@ -58,6 +67,7 @@ class ResultDataPostUserRegister:
58
67
  res = cls(
59
68
  user=parsed.user,
60
69
  access_token=parsed.access_token,
70
+ restrictions=parsed.restrictions,
61
71
  )
62
72
  res.raw_data = d
63
73
  return res
@@ -0,0 +1,59 @@
1
+ """The module that defines the ``RetryGroupSubmissionGradePassbackEnabledSetting`` model.
2
+
3
+ SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
4
+ """
5
+
6
+ import typing as t
7
+ from dataclasses import dataclass, field
8
+
9
+ import cg_request_args as rqa
10
+
11
+ from ..utils import to_dict
12
+
13
+
14
+ @dataclass
15
+ class RetryGroupSubmissionGradePassbackEnabledSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED']"
19
+ value: "t.Optional[bool]"
20
+
21
+ raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
22
+
23
+ data_parser: t.ClassVar = rqa.Lazy(
24
+ lambda: rqa.FixedMapping(
25
+ rqa.RequiredArgument(
26
+ "name",
27
+ rqa.StringEnum(
28
+ "RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"
29
+ ),
30
+ doc="",
31
+ ),
32
+ rqa.RequiredArgument(
33
+ "value",
34
+ rqa.Nullable(rqa.SimpleValue.bool),
35
+ doc="",
36
+ ),
37
+ ).use_readable_describe(True)
38
+ )
39
+
40
+ def to_dict(self) -> t.Dict[str, t.Any]:
41
+ res: t.Dict[str, t.Any] = {
42
+ "name": to_dict(self.name),
43
+ "value": to_dict(self.value),
44
+ }
45
+ return res
46
+
47
+ @classmethod
48
+ def from_dict(
49
+ cls: t.Type["RetryGroupSubmissionGradePassbackEnabledSetting"],
50
+ d: t.Dict[str, t.Any],
51
+ ) -> "RetryGroupSubmissionGradePassbackEnabledSetting":
52
+ parsed = cls.data_parser.try_parse(d)
53
+
54
+ res = cls(
55
+ name=parsed.name,
56
+ value=parsed.value,
57
+ )
58
+ res.raw_data = d
59
+ return res