codegrade 16.1.86__tar.gz → 16.1.89__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 (600) hide show
  1. {codegrade-16.1.86 → codegrade-16.1.89}/PKG-INFO +1 -1
  2. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_rich_value.py +64 -60
  3. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/__init__.py +6 -1
  4. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/file.py +5 -0
  5. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/login_link.py +4 -8
  6. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/user.py +6 -14
  7. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/client.py +66 -2
  8. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/__init__.py +0 -6
  9. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/all_site_settings.py +0 -17
  10. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_lms_capabilities.py +9 -0
  11. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lms_capabilities.py +2 -0
  12. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/site_setting_input.py +0 -5
  13. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user_login_response.py +3 -3
  14. {codegrade-16.1.86 → codegrade-16.1.89}/pyproject.toml +1 -1
  15. {codegrade-16.1.86 → codegrade-16.1.89}/setup.py +1 -1
  16. codegrade-16.1.86/codegrade/models/lti_first_launch_content_id_enabled_setting.py +0 -57
  17. codegrade-16.1.86/codegrade/models/result_data_post_login_link_login.py +0 -80
  18. codegrade-16.1.86/codegrade/models/result_data_post_user_login.py +0 -80
  19. codegrade-16.1.86/codegrade/models/result_data_post_user_register.py +0 -80
  20. {codegrade-16.1.86 → codegrade-16.1.89}/README.md +0 -0
  21. {codegrade-16.1.86 → codegrade-16.1.89}/cg_dt_utils/__init__.py +0 -0
  22. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/__init__.py +0 -0
  23. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/_just.py +0 -0
  24. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/_maybe.py +0 -0
  25. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/_nothing.py +0 -0
  26. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/_type_helpers.py +0 -0
  27. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/cg_maybe_plugin.py +0 -0
  28. {codegrade-16.1.86 → codegrade-16.1.89}/cg_maybe/utils.py +0 -0
  29. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/__init__.py +0 -0
  30. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_any_value.py +0 -0
  31. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_base.py +0 -0
  32. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_convert.py +0 -0
  33. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_enum.py +0 -0
  34. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_form.py +0 -0
  35. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_lazy.py +0 -0
  36. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_list.py +0 -0
  37. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_literal.py +0 -0
  38. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_mapping.py +0 -0
  39. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_multipart.py +0 -0
  40. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_nullable.py +0 -0
  41. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_parse_utils.py +0 -0
  42. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_query.py +0 -0
  43. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_set.py +0 -0
  44. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_swagger_utils.py +0 -0
  45. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_swaggerize.py +0 -0
  46. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/_utils.py +0 -0
  47. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/exceptions.py +0 -0
  48. {codegrade-16.1.86 → codegrade-16.1.89}/cg_request_args/request_args_plugin.py +0 -0
  49. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/__init__.py +0 -0
  50. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/about.py +0 -0
  51. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/assignment.py +0 -0
  52. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/auto_test.py +0 -0
  53. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/comment.py +0 -0
  54. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/course.py +0 -0
  55. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/course_price.py +0 -0
  56. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/git_provider.py +0 -0
  57. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/group.py +0 -0
  58. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/group_set.py +0 -0
  59. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/lti.py +0 -0
  60. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/notification.py +0 -0
  61. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/oauth_provider.py +0 -0
  62. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/oauth_token.py +0 -0
  63. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/permission.py +0 -0
  64. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/plagiarism.py +0 -0
  65. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/role.py +0 -0
  66. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/saml.py +0 -0
  67. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/section.py +0 -0
  68. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/site_settings.py +0 -0
  69. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/snippet.py +0 -0
  70. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/sso_provider.py +0 -0
  71. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/submission.py +0 -0
  72. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/task_result.py +0 -0
  73. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/tenant.py +0 -0
  74. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/transaction.py +0 -0
  75. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/user_setting.py +0 -0
  76. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/_api/webhook.py +0 -0
  77. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/errors.py +0 -0
  78. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/_base_price.py +0 -0
  79. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/_saml_ui_logo_info.py +0 -0
  80. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/_submission_rubric_item_data_parser.py +0 -0
  81. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/about.py +0 -0
  82. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/abstract_role.py +0 -0
  83. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/access_token_modal_warning_time_setting.py +0 -0
  84. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/access_token_toast_warning_time_setting.py +0 -0
  85. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/add_users_section_data.py +0 -0
  86. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/ai_assistant_enabled_setting.py +0 -0
  87. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/all_auto_test_results.py +0 -0
  88. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/always_update_pii_with_lti_setting.py +0 -0
  89. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/analytics_enabled_setting.py +0 -0
  90. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/any_auto_test_step_as_json.py +0 -0
  91. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/any_error.py +0 -0
  92. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/any_non_redacted_auto_test_step_as_json.py +0 -0
  93. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/any_redacted_auto_test_step_as_json.py +0 -0
  94. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/api_codes.py +0 -0
  95. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment.py +0 -0
  96. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_anonymization_algo.py +0 -0
  97. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_default_grading_scale_points_setting.py +0 -0
  98. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_default_grading_scale_setting.py +0 -0
  99. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_description_enabled_setting.py +0 -0
  100. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_description_on_teachers_submissions_page_setting.py +0 -0
  101. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_done_type.py +0 -0
  102. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_export_column.py +0 -0
  103. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_feedback.py +0 -0
  104. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_grader.py +0 -0
  105. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_grading_scale_points_enabled_setting.py +0 -0
  106. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_kind.py +0 -0
  107. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_login_link.py +0 -0
  108. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_max_points_enabled_setting.py +0 -0
  109. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_peer_feedback_connection.py +0 -0
  110. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_peer_feedback_settings.py +0 -0
  111. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_percentage_decimals_setting.py +0 -0
  112. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_percentage_grading_settings.py +0 -0
  113. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_point_decimals_setting.py +0 -0
  114. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_points_grading_settings.py +0 -0
  115. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_section_timeframe.py +0 -0
  116. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_state_enum.py +0 -0
  117. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_submission_mode.py +0 -0
  118. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_template.py +0 -0
  119. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assignment_timeframes.py +0 -0
  120. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/assistant_tools_enabled_setting.py +0 -0
  121. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/at_image_caching_enabled_setting.py +0 -0
  122. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test.py +0 -0
  123. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_capture_points_message_setting.py +0 -0
  124. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_checkpoint_message_setting.py +0 -0
  125. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_code_quality_message_setting.py +0 -0
  126. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_enabled_setting.py +0 -0
  127. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_fixture.py +0 -0
  128. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_global_setup_output.py +0 -0
  129. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_global_setup_script.py +0 -0
  130. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_heartbeat_interval_setting.py +0 -0
  131. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_heartbeat_max_missed_setting.py +0 -0
  132. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_io_test_message_setting.py +0 -0
  133. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_io_test_sub_message_setting.py +0 -0
  134. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_concurrent_batch_runs_setting.py +0 -0
  135. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_global_setup_time_setting.py +0 -0
  136. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_jobs_per_runner_setting.py +0 -0
  137. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_per_student_setup_time_setting.py +0 -0
  138. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_result_not_started_setting.py +0 -0
  139. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_time_command_setting.py +0 -0
  140. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_max_unit_test_metadata_length_setting.py +0 -0
  141. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_quality_comment.py +0 -0
  142. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_result.py +0 -0
  143. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_result_state.py +0 -0
  144. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_result_with_extra_data.py +0 -0
  145. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_run.py +0 -0
  146. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_run_program_message_setting.py +0 -0
  147. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_runner.py +0 -0
  148. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_runner_state.py +0 -0
  149. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_set.py +0 -0
  150. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_base.py +0 -0
  151. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_base_as_json.py +0 -0
  152. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_base_input_as_json.py +0 -0
  153. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_log_base.py +0 -0
  154. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_result.py +0 -0
  155. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_result_state.py +0 -0
  156. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_step_validation_exception.py +0 -0
  157. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_suite.py +0 -0
  158. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/auto_test_unit_test_message_setting.py +0 -0
  159. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/automatic_lti1p3_assignment_import_setting.py +0 -0
  160. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/automatic_lti_role_enabled_setting.py +0 -0
  161. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_about.py +0 -0
  162. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_auto_test_quality_comment.py +0 -0
  163. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_comment_base.py +0 -0
  164. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_comment_base_with_extended_replies.py +0 -0
  165. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_comment_base_with_normal_replies.py +0 -0
  166. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_comment_reply.py +0 -0
  167. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_course_coupon.py +0 -0
  168. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_directory.py +0 -0
  169. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_error.py +0 -0
  170. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_file.py +0 -0
  171. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_lti1p1_provider.py +0 -0
  172. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_lti1p3_provider.py +0 -0
  173. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_lti_provider.py +0 -0
  174. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_notification.py +0 -0
  175. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_release_info.py +0 -0
  176. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_rubric_item.py +0 -0
  177. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/base_tenant_coupon.py +0 -0
  178. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/blackboard_zip_upload_enabled_setting.py +0 -0
  179. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/bulk_enroll_course_data.py +0 -0
  180. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/canvas_course_id_copying_enabled_setting.py +0 -0
  181. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/cg_ignore_version.py +0 -0
  182. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/change_user_role_course_data.py +0 -0
  183. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/check_points_as_json.py +0 -0
  184. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/check_points_data.py +0 -0
  185. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/check_points_extra.py +0 -0
  186. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/check_points_input_as_json.py +0 -0
  187. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/clone_result.py +0 -0
  188. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_editor_output_viewer_title_setting.py +0 -0
  189. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_editor_start_on_assignment_description_setting.py +0 -0
  190. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_as_json.py +0 -0
  191. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_base_data.py +0 -0
  192. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_data.py +0 -0
  193. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_extra.py +0 -0
  194. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_input_as_json.py +0 -0
  195. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/code_quality_penalties.py +0 -0
  196. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/column_range.py +0 -0
  197. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/comment_base.py +0 -0
  198. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/comment_reply.py +0 -0
  199. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/comment_reply_edit.py +0 -0
  200. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/comment_reply_type.py +0 -0
  201. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/comment_type.py +0 -0
  202. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/community_library_publishing_setting.py +0 -0
  203. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/community_library_setting.py +0 -0
  204. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/connect_repository_git_provider_data.py +0 -0
  205. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/copy_auto_test_data.py +0 -0
  206. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/copy_rubric_assignment_data.py +0 -0
  207. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/coupon_data_parser.py +0 -0
  208. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/coupon_with_code.py +0 -0
  209. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/coupon_without_code.py +0 -0
  210. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course.py +0 -0
  211. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_bulk_enroll_result.py +0 -0
  212. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_bulk_register_enabled_setting.py +0 -0
  213. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_coupon.py +0 -0
  214. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_coupon_usage.py +0 -0
  215. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_gradebook_enabled_setting.py +0 -0
  216. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_gradebook_render_warning_size_setting.py +0 -0
  217. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_of_course_price.py +0 -0
  218. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_of_tenant_coupon_usage.py +0 -0
  219. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_perm_map.py +0 -0
  220. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_permission.py +0 -0
  221. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_price.py +0 -0
  222. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_register_enabled_setting.py +0 -0
  223. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_registration_link.py +0 -0
  224. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_role.py +0 -0
  225. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_role_as_json_with_perms.py +0 -0
  226. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_section.py +0 -0
  227. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_section_division.py +0 -0
  228. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_section_division_connection.py +0 -0
  229. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_section_division_user.py +0 -0
  230. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_snippet.py +0 -0
  231. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_state.py +0 -0
  232. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/course_statistics_as_json.py +0 -0
  233. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_assignment_course_data.py +0 -0
  234. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_auto_test_data.py +0 -0
  235. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_comment_data.py +0 -0
  236. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_comment_reply_data.py +0 -0
  237. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_course_data.py +0 -0
  238. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_division_section_data.py +0 -0
  239. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_group_group_set_data.py +0 -0
  240. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_group_set_course_data.py +0 -0
  241. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_lti_data.py +0 -0
  242. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_output_html_proxy_auto_test_data.py +0 -0
  243. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_proxy_submission_data.py +0 -0
  244. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_repository_git_provider_data.py +0 -0
  245. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_role_course_data.py +0 -0
  246. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_section_course_data.py +0 -0
  247. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_snippet_course_data.py +0 -0
  248. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_snippet_data.py +0 -0
  249. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_sso_provider_data.py +0 -0
  250. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/create_tenant_data.py +0 -0
  251. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/csv_large_file_limit_setting.py +0 -0
  252. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/csv_too_many_errors_limit_setting.py +0 -0
  253. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/currency.py +0 -0
  254. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_as_json.py +0 -0
  255. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_data.py +0 -0
  256. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_extra.py +0 -0
  257. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_input_as_json.py +0 -0
  258. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_log.py +0 -0
  259. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/custom_output_log_base.py +0 -0
  260. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/default_course_ta_role_setting.py +0 -0
  261. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/default_course_teacher_role_setting.py +0 -0
  262. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/default_submission_page_tab_setting.py +0 -0
  263. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/deleted_comment_reply.py +0 -0
  264. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/deletion_type.py +0 -0
  265. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/directory_with_children.py +0 -0
  266. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/disabled_setting_exception.py +0 -0
  267. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/display_grades_enabled_setting.py +0 -0
  268. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/editor_enabled_for_teachers_setting.py +0 -0
  269. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/editor_enabled_setting.py +0 -0
  270. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/email_notification_types.py +0 -0
  271. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/email_students_enabled_setting.py +0 -0
  272. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/email_users_course_data.py +0 -0
  273. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/exam_login_max_length_setting.py +0 -0
  274. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/export_assignment_csv_data.py +0 -0
  275. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/export_assignment_data.py +0 -0
  276. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/export_assignment_files_data.py +0 -0
  277. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_auto_test_result.py +0 -0
  278. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_auto_test_run.py +0 -0
  279. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_course.py +0 -0
  280. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_course_registration_link.py +0 -0
  281. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_course_section.py +0 -0
  282. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_group.py +0 -0
  283. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_job.py +0 -0
  284. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_non_deleted_comment_reply.py +0 -0
  285. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_tenant.py +0 -0
  286. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_transaction.py +0 -0
  287. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_user.py +0 -0
  288. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extended_work.py +0 -0
  289. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extract_file_tree_directory.py +0 -0
  290. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/extract_file_tree_file.py +0 -0
  291. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/failed_to_send_email_exception.py +0 -0
  292. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/feedback_base.py +0 -0
  293. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/feedback_threads_initially_collapsed_setting.py +0 -0
  294. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/feedback_with_replies.py +0 -0
  295. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/feedback_without_replies.py +0 -0
  296. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/file_deletion.py +0 -0
  297. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/file_rule.py +0 -0
  298. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/file_rule_input_data.py +0 -0
  299. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/file_tree.py +0 -0
  300. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/file_type.py +0 -0
  301. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/finalized_lti1p1_provider.py +0 -0
  302. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/finalized_lti1p3_provider.py +0 -0
  303. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/first_day_of_week_from_locale_setting.py +0 -0
  304. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/first_phase_lti_launch_exception.py +0 -0
  305. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/fixed_availability.py +0 -0
  306. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/fixed_grade_availability.py +0 -0
  307. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/fixture_like.py +0 -0
  308. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/fraction.py +0 -0
  309. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/frontend_site_settings.py +0 -0
  310. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/general_feedback_comment_base.py +0 -0
  311. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/general_feedback_comment_base_with_extended_replies.py +0 -0
  312. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/general_feedback_extra.py +0 -0
  313. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/git_repositories_page.py +0 -0
  314. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/git_repository_like.py +0 -0
  315. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/git_user_info.py +0 -0
  316. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/github_template_repo_enabled_setting.py +0 -0
  317. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/global_perm_map.py +0 -0
  318. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/global_permission.py +0 -0
  319. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/grade_history.py +0 -0
  320. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/grade_origin.py +0 -0
  321. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/grading_notifications_enabled_setting.py +0 -0
  322. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/group.py +0 -0
  323. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/group_not_ready_for_submission_exception.py +0 -0
  324. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/group_set.py +0 -0
  325. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/groups_enabled_setting.py +0 -0
  326. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/has_unread_notifcation_json.py +0 -0
  327. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/health_information.py +0 -0
  328. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/hide_code_editor_filetree_controls_with_only_quiz_steps_setting.py +0 -0
  329. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/hide_code_editor_output_viewer_with_only_quiz_steps_setting.py +0 -0
  330. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/hide_empty_rubric_row_description_setting.py +0 -0
  331. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/hide_no_deadline_enabled_setting.py +0 -0
  332. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/hubspot_syncing_enabled_setting.py +0 -0
  333. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/ignore_handling.py +0 -0
  334. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/ignored_files_exception.py +0 -0
  335. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/import_into_assignment_data.py +0 -0
  336. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/import_into_course_data.py +0 -0
  337. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/incremental_rubric_submission_enabled_setting.py +0 -0
  338. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/inline_feedback_comment_base.py +0 -0
  339. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/inline_feedback_comment_base_with_extended_replies.py +0 -0
  340. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/inline_feedback_extra.py +0 -0
  341. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/inline_feedback_on_quizzes_enabled_setting.py +0 -0
  342. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/inline_rubric_viewer_enabled_setting.py +0 -0
  343. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/invalid_group_exception.py +0 -0
  344. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/invalid_io_cases_exception.py +0 -0
  345. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/invalid_options_exception.py +0 -0
  346. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_as_json.py +0 -0
  347. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_base_data.py +0 -0
  348. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_data.py +0 -0
  349. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_extra.py +0 -0
  350. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_input_as_json.py +0 -0
  351. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_input_case.py +0 -0
  352. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_log.py +0 -0
  353. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_option.py +0 -0
  354. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_step_log.py +0 -0
  355. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/io_test_step_log_base.py +0 -0
  356. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/is_admin_permission_enabled_setting.py +0 -0
  357. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/is_pearson_setting.py +0 -0
  358. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/job.py +0 -0
  359. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/json_create_auto_test.py +0 -0
  360. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/json_create_tenant.py +0 -0
  361. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/json_patch_auto_test.py +0 -0
  362. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/json_patch_submit_types_assignment.py +0 -0
  363. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_as_json.py +0 -0
  364. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_base_data.py +0 -0
  365. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_data.py +0 -0
  366. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_extra.py +0 -0
  367. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_input_as_json.py +0 -0
  368. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_log.py +0 -0
  369. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/junit_test_log_base.py +0 -0
  370. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/jupyter_notebook_editor_enabled_setting.py +0 -0
  371. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/jupyter_notebook_running_enabled_setting.py +0 -0
  372. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/jwt_access_token_expires_setting.py +0 -0
  373. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/legacy_features.py +0 -0
  374. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/line_range.py +0 -0
  375. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/linters_enabled_setting.py +0 -0
  376. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/login_token_before_time_setting.py +0 -0
  377. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/login_user_data.py +0 -0
  378. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/logout_response.py +0 -0
  379. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/logout_user_data.py +0 -0
  380. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p1_provider.py +0 -0
  381. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p1_provider_data.py +0 -0
  382. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_nonce_and_state_validation_enabled_setting.py +0 -0
  383. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_parse_most_privileged_role_setting.py +0 -0
  384. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_prevent_nonce_reuse_enabled_setting.py +0 -0
  385. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_provider.py +0 -0
  386. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_provider_data.py +0 -0
  387. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_provider_presentation_as_json.py +0 -0
  388. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti1p3_system_role_from_context_role_setting.py +0 -0
  389. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti_enabled_setting.py +0 -0
  390. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti_launch_data_logging_setting.py +0 -0
  391. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti_lock_date_copying_enabled_setting.py +0 -0
  392. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti_provider_base.py +0 -0
  393. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/lti_unset_deadline_lock_date_enabled_setting.py +0 -0
  394. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_document_update_size_setting.py +0 -0
  395. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_dynamo_file_size_setting.py +0 -0
  396. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_dynamo_submission_size_setting.py +0 -0
  397. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_file_size_setting.py +0 -0
  398. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_large_upload_size_setting.py +0 -0
  399. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_lines_setting.py +0 -0
  400. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_normal_upload_size_setting.py +0 -0
  401. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_number_of_files_setting.py +0 -0
  402. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_plagiarism_matches_setting.py +0 -0
  403. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/max_user_setting_amount_setting.py +0 -0
  404. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/min_password_score_setting.py +0 -0
  405. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/mirror_file_result.py +0 -0
  406. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/missing_cookie_error.py +0 -0
  407. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/missing_file.py +0 -0
  408. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/name_and_email_from_nrps_only_setting.py +0 -0
  409. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_allowed_initial_build_ids_setting.py +0 -0
  410. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_build_max_command_time_setting.py +0 -0
  411. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_build_output_limit_setting.py +0 -0
  412. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_copying_enabled_setting.py +0 -0
  413. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_current_initial_build_ids_setting.py +0 -0
  414. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_diff_viewer_enabled_setting.py +0 -0
  415. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_enabled_setting.py +0 -0
  416. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_initial_build_id_setting.py +0 -0
  417. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_max_dynamodb_size_setting.py +0 -0
  418. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_max_file_size_setting.py +0 -0
  419. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_max_output_files_size_setting.py +0 -0
  420. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_max_storage_size_setting.py +0 -0
  421. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_old_submission_age_setting.py +0 -0
  422. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_test_max_command_time_setting.py +0 -0
  423. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_test_output_limit_setting.py +0 -0
  424. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/new_auto_test_uncollapsing_step_output_delay_setting.py +0 -0
  425. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/no_permissions.py +0 -0
  426. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/non_deleted_comment_reply.py +0 -0
  427. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/non_finalized_lti1p1_provider.py +0 -0
  428. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/non_finalized_lti1p3_provider.py +0 -0
  429. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/non_present_preference.py +0 -0
  430. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification.py +0 -0
  431. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_comment_reply_notification_as_json.py +0 -0
  432. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_general_feedback_reply_notification_as_json.py +0 -0
  433. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_poll_time_setting.py +0 -0
  434. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_reasons.py +0 -0
  435. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_setting.py +0 -0
  436. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notification_setting_option.py +0 -0
  437. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/notifications_json.py +0 -0
  438. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/oauth_provider.py +0 -0
  439. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/oauth_token.py +0 -0
  440. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/option.py +0 -0
  441. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/options_input_data.py +0 -0
  442. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/output_viewer_animation_limit_lines_count_setting.py +0 -0
  443. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/output_viewer_auto_expand_failed_steps_setting.py +0 -0
  444. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/parse_api_exception.py +0 -0
  445. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch1_p1_provider_lti_data.py +0 -0
  446. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch1_p3_provider_lti_data.py +0 -0
  447. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_all_notification_data.py +0 -0
  448. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_assignment_data.py +0 -0
  449. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_auto_test_data.py +0 -0
  450. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_comment_reply_data.py +0 -0
  451. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_course_data.py +0 -0
  452. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_grader_submission_data.py +0 -0
  453. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_notification_data.py +0 -0
  454. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_notification_setting_user_setting_data.py +0 -0
  455. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_provider_lti_data.py +0 -0
  456. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_role_course_data.py +0 -0
  457. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_role_data.py +0 -0
  458. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_role_tenant_data.py +0 -0
  459. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_rubric_category_type_assignment_data.py +0 -0
  460. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_rubric_result_submission_data.py +0 -0
  461. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_section_data.py +0 -0
  462. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_settings_tenant_data.py +0 -0
  463. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_site_settings_data.py +0 -0
  464. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_snippet_course_data.py +0 -0
  465. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_snippet_data.py +0 -0
  466. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_submission_data.py +0 -0
  467. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_submit_types_assignment_data.py +0 -0
  468. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_tenant_data.py +0 -0
  469. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_ui_preference_user_setting_data.py +0 -0
  470. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/patch_user_data.py +0 -0
  471. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/pay_with_coupon_course_price_data.py +0 -0
  472. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/pearson_templates_setting.py +0 -0
  473. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/pearson_try_out_coding_question_enabled_setting.py +0 -0
  474. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/peer_feedback_enabled_setting.py +0 -0
  475. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/permission_exception.py +0 -0
  476. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_bulk_export_enabled_setting.py +0 -0
  477. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_bulk_export_max_cases_setting.py +0 -0
  478. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_case.py +0 -0
  479. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_pdf_export_enabled_setting.py +0 -0
  480. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_run.py +0 -0
  481. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_run_plagiarism_assignment_as_json.py +0 -0
  482. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_run_plagiarism_course_as_json.py +0 -0
  483. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/plagiarism_state.py +0 -0
  484. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/post_oauth_token_data.py +0 -0
  485. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/present_preference.py +0 -0
  486. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/prompt_engineering_step_enabled_setting.py +0 -0
  487. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/proxy.py +0 -0
  488. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/put_description_assignment_data.py +0 -0
  489. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/put_enroll_link_course_data.py +0 -0
  490. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/put_price_course_data.py +0 -0
  491. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/put_price_tenant_data.py +0 -0
  492. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/put_rubric_assignment_data.py +0 -0
  493. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/quality_comment_severity.py +0 -0
  494. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/quality_comments_in_code_editor_setting.py +0 -0
  495. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/quality_test_log.py +0 -0
  496. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/quality_test_log_base.py +0 -0
  497. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/quiz_single_question_mode_hide_run_button_enabled_setting.py +0 -0
  498. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/register_enabled_setting.py +0 -0
  499. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/register_user_data.py +0 -0
  500. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/register_user_with_link_course_data.py +0 -0
  501. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/release_info.py +0 -0
  502. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/release_message_max_time_setting.py +0 -0
  503. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/removed_permissions.py +0 -0
  504. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rename_group_group_data.py +0 -0
  505. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/render_html_enabled_setting.py +0 -0
  506. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/repository_connection_limit_reached_exception.py +0 -0
  507. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/reset_token_time_setting.py +0 -0
  508. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/result_data_get_auto_test_get.py +0 -0
  509. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/result_data_get_task_result_get_all.py +0 -0
  510. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/result_data_post_section_create_division.py +0 -0
  511. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/retry_group_submission_grade_passback_enabled_setting.py +0 -0
  512. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/role_as_json_with_perms.py +0 -0
  513. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/root_file_trees_json.py +0 -0
  514. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_description_type.py +0 -0
  515. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_enabled_for_teacher_on_submissions_page_setting.py +0 -0
  516. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_item.py +0 -0
  517. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_item_input_as_json.py +0 -0
  518. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_lock_reason.py +0 -0
  519. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_row_base.py +0 -0
  520. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_row_base_input_as_json.py +0 -0
  521. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubric_row_base_input_base_as_json.py +0 -0
  522. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rubrics_enabled_setting.py +0 -0
  523. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/rule_type.py +0 -0
  524. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/run_program_as_json.py +0 -0
  525. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/run_program_data.py +0 -0
  526. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/run_program_extra.py +0 -0
  527. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/run_program_input_as_json.py +0 -0
  528. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/run_program_log.py +0 -0
  529. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/saml2_provider_json.py +0 -0
  530. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/saml_ui_info.py +0 -0
  531. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/sections_in_submission_list_enabled_setting.py +0 -0
  532. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/send_registration_email_setting.py +0 -0
  533. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/server_time_correction_enabled_setting.py +0 -0
  534. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/server_time_diff_tolerance_setting.py +0 -0
  535. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/server_time_sync_interval_setting.py +0 -0
  536. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/session_restriction_context.py +0 -0
  537. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/session_restriction_data.py +0 -0
  538. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/setting_token_time_setting.py +0 -0
  539. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/setup_oauth_result.py +0 -0
  540. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/simple_submission_mode_enabled_setting.py +0 -0
  541. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/simple_submission_navigate_to_latest_editor_session_setting.py +0 -0
  542. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/site_email_setting.py +0 -0
  543. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/snippet.py +0 -0
  544. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/sso_infer_global_staff_role_setting.py +0 -0
  545. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/sso_username_decollision_enabled_setting.py +0 -0
  546. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/staged_assignment_importer_enabled_setting.py +0 -0
  547. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/start_payment_course_price_close_tab_data.py +0 -0
  548. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/start_payment_course_price_data.py +0 -0
  549. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/start_payment_course_price_redirect_data.py +0 -0
  550. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/started_transaction.py +0 -0
  551. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/student_payment_enabled_setting.py +0 -0
  552. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/student_payment_main_option_setting.py +0 -0
  553. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/student_view_enabled_setting.py +0 -0
  554. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/submission_validator_input_data.py +0 -0
  555. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/submissions_per_page_enabled_setting.py +0 -0
  556. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/task_result_state.py +0 -0
  557. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tax_behavior.py +0 -0
  558. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant.py +0 -0
  559. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_coupon.py +0 -0
  560. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_coupon_usage.py +0 -0
  561. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_coupon_with_code.py +0 -0
  562. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_coupon_without_code.py +0 -0
  563. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_course_statistics.py +0 -0
  564. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_of_tenant_price.py +0 -0
  565. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_permissions.py +0 -0
  566. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_price.py +0 -0
  567. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_role_as_json_with_perms.py +0 -0
  568. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/tenant_statistics.py +0 -0
  569. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/test_submission_copying_on_import_enabled_setting.py +0 -0
  570. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/timed_availability.py +0 -0
  571. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/timeframe_like.py +0 -0
  572. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/token_revoked_exception.py +0 -0
  573. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/transaction.py +0 -0
  574. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/transaction_state.py +0 -0
  575. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/types.py +0 -0
  576. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/update_peer_feedback_settings_assignment_data.py +0 -0
  577. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/update_set_auto_test_data.py +0 -0
  578. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/update_suite_auto_test_base_data.py +0 -0
  579. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/update_suite_auto_test_data.py +0 -0
  580. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/upgraded_lti_provider_exception.py +0 -0
  581. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/upload_submission_assignment_data.py +0 -0
  582. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user.py +0 -0
  583. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user_course.py +0 -0
  584. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user_info_with_role.py +0 -0
  585. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user_input.py +0 -0
  586. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/user_without_group.py +0 -0
  587. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/warning_for_missing_newline_enabled_setting.py +0 -0
  588. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/weak_password_exception.py +0 -0
  589. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/weak_password_feedback.py +0 -0
  590. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/webhook_base.py +0 -0
  591. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/webhook_configuration_disabled_as_json.py +0 -0
  592. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/webhook_configuration_enabled_as_json.py +0 -0
  593. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/work.py +0 -0
  594. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/work_origin.py +0 -0
  595. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/work_rubric_item.py +0 -0
  596. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/work_rubric_result_as_json.py +0 -0
  597. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/models/work_rubric_result_points_as_json.py +0 -0
  598. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/parsers.py +0 -0
  599. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/py.typed +0 -0
  600. {codegrade-16.1.86 → codegrade-16.1.89}/codegrade/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codegrade
3
- Version: 16.1.86
3
+ Version: 16.1.89
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.9.0,<4.0
@@ -2,6 +2,7 @@
2
2
  This module contains parsers for values that should be transformed or
3
3
  restricted in any way.
4
4
  """
5
+
5
6
  import re
6
7
  import uuid
7
8
  import typing as t
@@ -27,15 +28,15 @@ class _GEComparable(Protocol):
27
28
  ...
28
29
 
29
30
 
30
- _GEComparableT = t.TypeVar('_GEComparableT', bound=_GEComparable)
31
+ _GEComparableT = t.TypeVar("_GEComparableT", bound=_GEComparable)
31
32
 
32
- __all__ = ('RichValue', )
33
+ __all__ = ("RichValue", )
33
34
 
34
35
 
35
36
  class _NumberAsString(_Transform[int, str]):
36
37
  __slots__ = ()
37
38
 
38
- def __init__(self, name: str = '_NumberAsString') -> None:
39
+ def __init__(self, name: str = "_NumberAsString") -> None:
39
40
  super().__init__(
40
41
  SimpleValue.str,
41
42
  self.__to_int,
@@ -56,12 +57,12 @@ class _UUID(_Transform[uuid.UUID, str]):
56
57
  __slots__ = ()
57
58
 
58
59
  def __init__(self) -> None:
59
- super().__init__(SimpleValue.str, self.__transform_to_uuid, 'UUID')
60
+ super().__init__(SimpleValue.str, self.__transform_to_uuid, "UUID")
60
61
 
61
62
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
62
63
  return {
63
64
  **self._parser.to_open_api(schema),
64
- 'format': 'uuid',
65
+ "format": "uuid",
65
66
  }
66
67
 
67
68
  def __transform_to_uuid(self, value: str) -> uuid.UUID:
@@ -72,7 +73,7 @@ class _UUID(_Transform[uuid.UUID, str]):
72
73
  self,
73
74
  value,
74
75
  extra={
75
- 'message': "which can't be parsed as a valid uuid",
76
+ "message": "which can't be parsed as a valid uuid",
76
77
  },
77
78
  ) from exc
78
79
 
@@ -81,23 +82,23 @@ class _Date(_Transform[datetime.date, str]):
81
82
  __slots__ = ()
82
83
 
83
84
  _ISO8601_DATE_RE = re.compile(
84
- r'^(?P<year>\d+)-(?P<month>\d\d)-(?P<day>\d\d)$'
85
+ r"^(?P<year>\d+)-(?P<month>\d\d)-(?P<day>\d\d)$"
85
86
  )
86
87
 
87
88
  def __init__(self) -> None:
88
- super().__init__(SimpleValue.str, self.__transform_to_date, 'Date')
89
+ super().__init__(SimpleValue.str, self.__transform_to_date, "Date")
89
90
 
90
91
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
91
92
  return {
92
93
  **self._parser.to_open_api(schema),
93
- 'format': 'date',
94
+ "format": "date",
94
95
  }
95
96
 
96
97
  def __transform_to_date(self, value: str) -> datetime.date:
97
98
  match = self._ISO8601_DATE_RE.match(value)
98
99
  if match is None:
99
100
  raise SimpleParseError(self, value)
100
- year, month, day = map(int, match.group('year', 'month', 'day'))
101
+ year, month, day = map(int, match.group("year", "month", "day"))
101
102
  try:
102
103
  return datetime.date(year=year, month=month, day=day)
103
104
  except ValueError as exc:
@@ -109,17 +110,18 @@ class _DateTime(_Transform[DatetimeWithTimezone, str]):
109
110
 
110
111
  def __init__(self) -> None:
111
112
  super().__init__(
112
- SimpleValue.str, self.__transform_to_datetime, 'DateTime'
113
+ SimpleValue.str, self.__transform_to_datetime, "DateTime"
113
114
  )
114
115
 
115
116
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
116
117
  return {
117
118
  **self._parser.to_open_api(schema),
118
- 'format': 'date-time',
119
+ "format": "date-time",
119
120
  }
120
121
 
121
122
  def __transform_to_datetime(self, value: str) -> DatetimeWithTimezone:
122
123
  import dateutil.parser
124
+
123
125
  try:
124
126
  parsed = dateutil.parser.isoparse(value)
125
127
  except (ValueError, OverflowError) as exc:
@@ -127,7 +129,7 @@ class _DateTime(_Transform[DatetimeWithTimezone, str]):
127
129
  self,
128
130
  value,
129
131
  extra={
130
- 'message': "which can't be parsed as a valid datetime",
132
+ "message": "which can't be parsed as a valid datetime",
131
133
  },
132
134
  ) from exc
133
135
  else:
@@ -154,7 +156,7 @@ class _EmailList(_Constraint[str]):
154
156
 
155
157
  @property
156
158
  def name(self) -> str:
157
- return 'as email list'
159
+ return "as email list"
158
160
 
159
161
 
160
162
  class _Password(SimpleValueFactory[str]):
@@ -164,12 +166,12 @@ class _Password(SimpleValueFactory[str]):
164
166
  super().__init__(str)
165
167
 
166
168
  def describe(self) -> str:
167
- return f'password as {super().describe()}'
169
+ return f"password as {super().describe()}"
168
170
 
169
171
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
170
172
  return {
171
173
  **super()._to_open_api(schema),
172
- 'format': 'password',
174
+ "format": "password",
173
175
  }
174
176
 
175
177
  def try_parse(self, value: object) -> str:
@@ -177,38 +179,38 @@ class _Password(SimpleValueFactory[str]):
177
179
  return super().try_parse(value)
178
180
  except ParseError:
179
181
  # Don't raise from as that might leak the value
180
- raise SimpleParseError(self, found='REDACTED') # pylint: disable=raise-missing-from
182
+ raise SimpleParseError(self, found="REDACTED") # pylint: disable=raise-missing-from
181
183
 
182
184
 
183
185
  class _TimeDeltaFactory(_Transform[datetime.timedelta, t.Union[str, float]]):
184
- """Factory to create a ISO timedelta parser.
185
- """
186
+ """Factory to create a ISO timedelta parser."""
187
+
186
188
  __slots__ = ()
187
189
 
188
190
  # The regex below are copied from Pydantic
189
191
  _ISO8601_DURATION_RE = re.compile(
190
- r'^(?P<sign>[-+]?)'
191
- r'P'
192
- r'(?:(?P<days>\d+(.\d+)?)D)?'
193
- r'(?:T'
194
- r'(?:(?P<hours>\d+(.\d+)?)H)?'
195
- r'(?:(?P<minutes>\d+(.\d+)?)M)?'
196
- r'(?:(?P<seconds>\d+(.\d+)?)S)?'
197
- r')?'
198
- r'$'
192
+ r"^(?P<sign>[-+]?)"
193
+ r"P"
194
+ r"(?:(?P<days>\d+(.\d+)?)D)?"
195
+ r"(?:T"
196
+ r"(?:(?P<hours>\d+(.\d+)?)H)?"
197
+ r"(?:(?P<minutes>\d+(.\d+)?)M)?"
198
+ r"(?:(?P<seconds>\d+(.\d+)?)S)?"
199
+ r")?"
200
+ r"$"
199
201
  )
200
202
 
201
203
  def __init__(self, parser: Parser[t.Union[str, float]]) -> None:
202
204
  super().__init__(
203
205
  parser,
204
206
  self.__to_timedelta,
205
- 'TimeDelta',
207
+ "TimeDelta",
206
208
  )
207
209
 
208
210
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
209
211
  return {
210
212
  **SimpleValue.float.to_open_api(schema),
211
- 'format': 'time-delta',
213
+ "format": "time-delta",
212
214
  }
213
215
 
214
216
  def __to_timedelta(self, value: t.Union[str, float]) -> datetime.timedelta:
@@ -223,14 +225,14 @@ class _TimeDeltaFactory(_Transform[datetime.timedelta, t.Union[str, float]]):
223
225
 
224
226
  groupdict: t.Mapping[str, t.Optional[str]] = match.groupdict()
225
227
  groups = {k: v for k, v in groupdict.items() if v is not None}
226
- sign = -1 if groups.get('sign', None) == '-' else 1
228
+ sign = -1 if groups.get("sign", None) == "-" else 1
227
229
 
228
230
  return sign * datetime.timedelta(
229
- days=float(groups.get('days', 0)),
230
- hours=float(groups.get('hours', 0)),
231
- minutes=float(groups.get('minutes', 0)),
232
- seconds=float(groups.get('seconds', 0)),
233
- microseconds=float(groups.get('microseconds', 0)),
231
+ days=float(groups.get("days", 0)),
232
+ hours=float(groups.get("hours", 0)),
233
+ minutes=float(groups.get("minutes", 0)),
234
+ seconds=float(groups.get("seconds", 0)),
235
+ microseconds=float(groups.get("microseconds", 0)),
234
236
  )
235
237
 
236
238
 
@@ -247,7 +249,7 @@ class _NonEmptyString(SimpleValueFactory[str]):
247
249
  self,
248
250
  value,
249
251
  extra={
250
- 'message': "which is empty",
252
+ "message": "which is empty",
251
253
  },
252
254
  )
253
255
  return nonempty
@@ -260,27 +262,29 @@ class _StringWithoutNullByte(SimpleValueFactory[str]):
260
262
  super().__init__(str)
261
263
 
262
264
  def try_parse(self, value: object) -> str:
263
- return super().try_parse(value).replace('\0', '')
265
+ return super().try_parse(value).replace("\0", "")
264
266
 
265
267
 
266
268
  class _Fraction(Parser[fractions.Fraction]):
267
269
  __slots__ = ()
268
270
 
269
- _SUB_PARSER = FixedMapping(
270
- RequiredArgument(
271
- 'n',
272
- _NumberAsString(),
273
- 'The numerator of the rational.',
274
- ),
275
- RequiredArgument(
276
- 'd',
277
- _NumberAsString(),
278
- 'The denominator of the rational.',
279
- ),
280
- ).as_schema('Fraction').add_open_api_metadata('x-is-fraction', True)
271
+ _SUB_PARSER = (
272
+ FixedMapping(
273
+ RequiredArgument(
274
+ "n",
275
+ _NumberAsString(),
276
+ "The numerator of the rational.",
277
+ ),
278
+ RequiredArgument(
279
+ "d",
280
+ _NumberAsString(),
281
+ "The denominator of the rational.",
282
+ ),
283
+ ).as_schema("Fraction").add_open_api_metadata("x-is-fraction", True)
284
+ )
281
285
 
282
286
  def describe(self) -> str:
283
- return 'Fraction'
287
+ return "Fraction"
284
288
 
285
289
  def _to_open_api(self, schema: t.Any) -> t.Mapping[str, t.Any]:
286
290
  return self._SUB_PARSER.to_open_api(schema)
@@ -293,22 +297,22 @@ class _Fraction(Parser[fractions.Fraction]):
293
297
  class _Decimal(_Transform[decimal.Decimal, str]):
294
298
  __slots__ = ()
295
299
 
296
- _REGEX = r'^[+-]?\d+([.]\d+)?$'
300
+ _REGEX = r"^[+-]?\d+([.]\d+)?$"
297
301
  _COMPILED_REGEX = re.compile(_REGEX)
298
302
 
299
303
  def __init__(self) -> None:
300
304
  super().__init__(
301
305
  parser=SimpleValue.str,
302
306
  transform=self._transform,
303
- transform_name='Decimal',
307
+ transform_name="Decimal",
304
308
  )
305
309
 
306
310
  def _to_open_api(self, schema: t.Any) -> t.Mapping[str, t.Any]:
307
311
  base = self._parser.to_open_api(schema)
308
312
  return {
309
313
  **base,
310
- 'pattern': self._REGEX,
311
- 'format': 'decimal',
314
+ "pattern": self._REGEX,
315
+ "format": "decimal",
312
316
  }
313
317
 
314
318
  def _transform(self, value: str) -> decimal.Decimal:
@@ -347,9 +351,9 @@ class RichValue:
347
351
  Fraction = _Fraction()
348
352
 
349
353
  class ValueGte(_Constraint[_GEComparableT], t.Generic[_GEComparableT]):
350
- """Parse a number that is gte than a given minimum.
351
- """
352
- __slots__ = ('__minimum', )
354
+ """Parse a number that is gte than a given minimum."""
355
+
356
+ __slots__ = ("__minimum", )
353
357
 
354
358
  def __init__(
355
359
  self, parser: Parser[_GEComparableT], minimum: _GEComparableT
@@ -359,7 +363,7 @@ class RichValue:
359
363
 
360
364
  @property
361
365
  def name(self) -> str:
362
- return f'larger than {self.__minimum}'
366
+ return f"larger than {self.__minimum}"
363
367
 
364
368
  def ok(self, value: _GEComparableT) -> bool:
365
369
  return value >= self.__minimum
@@ -367,5 +371,5 @@ class RichValue:
367
371
  def _to_open_api(self, schema: OpenAPISchema) -> t.Mapping[str, t.Any]:
368
372
  return {
369
373
  **self._parser.to_open_api(schema),
370
- 'minimum': self.__minimum,
374
+ "minimum": self.__minimum,
371
375
  }
@@ -8,7 +8,7 @@ from functools import wraps
8
8
  from .client import AuthenticatedClient, Client
9
9
 
10
10
  __all__ = ("login", "AuthenticatedClient", "Client", "login_from_cli")
11
- __version__ = "16.1.86"
11
+ __version__ = "16.1.89"
12
12
 
13
13
 
14
14
  @wraps(AuthenticatedClient.get)
@@ -21,6 +21,11 @@ def login_from_cli(*args, **kwargs):
21
21
  return AuthenticatedClient.get_from_cli(*args, **kwargs)
22
22
 
23
23
 
24
+ @wraps(AuthenticatedClient.get_from_cli_for_course)
25
+ def login_from_cli_for_course(*args, **kwargs):
26
+ return AuthenticatedClient.get_from_cli_for_course(*args, **kwargs)
27
+
28
+
24
29
  login.__name__ = "login"
25
30
  login.__doc__ = """Get an :class:`.AuthenticatedClient` by logging in with your
26
31
  username and password.
@@ -94,6 +94,7 @@ class FileService(t.Generic[_ClientT]):
94
94
  *,
95
95
  max_age: Maybe["int"] = Nothing,
96
96
  filename: "str" = "uploaded_file",
97
+ ephemeral: "bool" = False,
97
98
  extra_parameters: t.Optional[
98
99
  t.Mapping[str, t.Union[str, bool, int, float]]
99
100
  ] = None,
@@ -103,6 +104,9 @@ class FileService(t.Generic[_ClientT]):
103
104
  :param max_age: The maximum amount of time (in seconds) this file will
104
105
  stay valid and can be retrieved.
105
106
  :param filename: The name of the uploaded file.
107
+ :param ephemeral: If set this file will be never saved to persistent
108
+ storage. The maximum size of file that can be uploaded like this is
109
+ 1mb.
106
110
  :param extra_parameters: The extra query parameters you might want to
107
111
  add. By default no extra query parameters are added.
108
112
 
@@ -113,6 +117,7 @@ class FileService(t.Generic[_ClientT]):
113
117
  params: t.Dict[str, t.Any] = {
114
118
  **(extra_parameters or {}),
115
119
  "filename": utils.to_dict(filename),
120
+ "ephemeral": utils.to_dict(ephemeral),
116
121
  }
117
122
  maybe_from_nullable(t.cast(t.Any, max_age)).if_just(
118
123
  lambda val: params.__setitem__("max_age", val)
@@ -15,9 +15,7 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
15
15
  import codegrade
16
16
 
17
17
  from ..models.assignment_login_link import AssignmentLoginLink
18
- from ..models.result_data_post_login_link_login import (
19
- ResultDataPostLoginLinkLogin,
20
- )
18
+ from ..models.user_login_response import UserLoginResponse
21
19
 
22
20
 
23
21
  _ClientT = t.TypeVar("_ClientT", bound="codegrade.client._BaseClient")
@@ -84,7 +82,7 @@ class LoginLinkService(t.Generic[_ClientT]):
84
82
  extra_parameters: t.Optional[
85
83
  t.Mapping[str, t.Union[str, bool, int, float]]
86
84
  ] = None,
87
- ) -> "ResultDataPostLoginLinkLogin":
85
+ ) -> "UserLoginResponse":
88
86
  """Login with the given login link.
89
87
 
90
88
  This will only work when the assignment connected to this link is
@@ -114,13 +112,11 @@ class LoginLinkService(t.Generic[_ClientT]):
114
112
 
115
113
  if utils.response_code_matches(resp.status_code, 200):
116
114
  # fmt: off
117
- from ..models.result_data_post_login_link_login import (
118
- ResultDataPostLoginLinkLogin,
119
- )
115
+ from ..models.user_login_response import UserLoginResponse
120
116
 
121
117
  # fmt: on
122
118
  return parsers.JsonResponseParser(
123
- parsers.ParserFor.make(ResultDataPostLoginLinkLogin)
119
+ parsers.ParserFor.make(UserLoginResponse)
124
120
  ).try_parse(resp)
125
121
 
126
122
  from ..models.any_error import AnyError
@@ -23,10 +23,6 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
23
23
  from ..models.logout_user_data import LogoutUserData
24
24
  from ..models.patch_user_data import PatchUserData
25
25
  from ..models.register_user_data import RegisterUserData
26
- from ..models.result_data_post_user_login import ResultDataPostUserLogin
27
- from ..models.result_data_post_user_register import (
28
- ResultDataPostUserRegister,
29
- )
30
26
  from ..models.session_restriction_data import SessionRestrictionData
31
27
  from ..models.tenant_coupon_usage import TenantCouponUsage
32
28
  from ..models.user import User
@@ -262,7 +258,7 @@ class UserService(t.Generic[_ClientT]):
262
258
  extra_parameters: t.Optional[
263
259
  t.Mapping[str, t.Union[str, bool, int, float]]
264
260
  ] = None,
265
- ) -> "ResultDataPostUserLogin":
261
+ ) -> "UserLoginResponse":
266
262
  """Login using your username and password.
267
263
 
268
264
  `permissions` to the user. The value will be a mapping indicating which
@@ -293,13 +289,11 @@ class UserService(t.Generic[_ClientT]):
293
289
 
294
290
  if utils.response_code_matches(resp.status_code, 200):
295
291
  # fmt: off
296
- from ..models.result_data_post_user_login import (
297
- ResultDataPostUserLogin,
298
- )
292
+ from ..models.user_login_response import UserLoginResponse
299
293
 
300
294
  # fmt: on
301
295
  return parsers.JsonResponseParser(
302
- parsers.ParserFor.make(ResultDataPostUserLogin)
296
+ parsers.ParserFor.make(UserLoginResponse)
303
297
  ).try_parse(resp)
304
298
 
305
299
  from ..models.any_error import AnyError
@@ -321,7 +315,7 @@ class UserService(t.Generic[_ClientT]):
321
315
  extra_parameters: t.Optional[
322
316
  t.Mapping[str, t.Union[str, bool, int, float]]
323
317
  ] = None,
324
- ) -> "ResultDataPostUserRegister":
318
+ ) -> "UserLoginResponse":
325
319
  """Create a new user.
326
320
 
327
321
  :param json_body: The body of the request. See
@@ -346,13 +340,11 @@ class UserService(t.Generic[_ClientT]):
346
340
 
347
341
  if utils.response_code_matches(resp.status_code, 200):
348
342
  # fmt: off
349
- from ..models.result_data_post_user_register import (
350
- ResultDataPostUserRegister,
351
- )
343
+ from ..models.user_login_response import UserLoginResponse
352
344
 
353
345
  # fmt: on
354
346
  return parsers.JsonResponseParser(
355
- parsers.ParserFor.make(ResultDataPostUserRegister)
347
+ parsers.ParserFor.make(UserLoginResponse)
356
348
  ).try_parse(resp)
357
349
 
358
350
  from ..models.any_error import AnyError
@@ -11,8 +11,12 @@ import typing as t
11
11
  import uuid
12
12
  from types import TracebackType
13
13
 
14
+ import cg_maybe
14
15
  import httpx
15
16
 
17
+ from codegrade.models import CoursePermission as _CoursePermission
18
+ from codegrade.models import SessionRestrictionData as _SessionRestrictionData
19
+
16
20
  from .utils import maybe_input, select_from_list
17
21
 
18
22
  _DEFAULT_HOST = os.getenv("CG_HOST", "https://app.codegra.de")
@@ -539,7 +543,7 @@ class Client(_BaseClient):
539
543
  return httpx.Client(
540
544
  base_url=self.base_url,
541
545
  headers={
542
- "User-Agent": "CodeGradeAPI/16.1.86",
546
+ "User-Agent": "CodeGradeAPI/16.1.89",
543
547
  },
544
548
  follow_redirects=True,
545
549
  )
@@ -559,7 +563,7 @@ class AuthenticatedClient(_BaseClient):
559
563
  base_url=self.base_url,
560
564
  headers={
561
565
  "Authorization": f"Bearer {self.token}",
562
- "User-Agent": "CodeGradeAPI/16.1.86",
566
+ "User-Agent": "CodeGradeAPI/16.1.89",
563
567
  },
564
568
  follow_redirects=True,
565
569
  )
@@ -702,3 +706,63 @@ class AuthenticatedClient(_BaseClient):
702
706
  return cls.get(
703
707
  username=username, password=password, host=host, tenant=tenant.id
704
708
  )
709
+
710
+ def restrict(
711
+ client,
712
+ *,
713
+ course_id: t.Optional[int] = None,
714
+ removed_permissions: t.Sequence[_CoursePermission] = (),
715
+ ) -> None:
716
+ """Restrict this authenticated client to a specific course and/or
717
+ reduced permissions.
718
+
719
+ :param course_id: If provided, restrict access to only this course.
720
+ :param removed_permissions: If provided, remove specific permissions in
721
+ the current session.
722
+ """
723
+ restriction = _SessionRestrictionData(
724
+ for_context=cg_maybe.from_nullable(course_id).map(
725
+ lambda cid: {"course_id": cid}
726
+ ),
727
+ removed_permissions=(
728
+ cg_maybe.of({"course": removed_permissions})
729
+ if removed_permissions
730
+ else cg_maybe.Nothing
731
+ ),
732
+ )
733
+
734
+ restricted_login = client.user.restrict(restriction)
735
+ client.user.logout({"token": client.token})
736
+ client.token = restricted_login.access_token
737
+ client.http.headers["Authorization"] = f"Bearer {client.token}"
738
+
739
+ @classmethod
740
+ def get_from_cli_for_course(
741
+ cls, course_id: t.Optional[int] = None
742
+ ) -> "AuthenticatedClient":
743
+ """Get an :class:`.AuthenticatedClient` by logging in through command
744
+ line interface for a specific course.
745
+
746
+ :param course_id: The optional ID of the course you want to log into.
747
+
748
+ :returns: A new ``AuthenticatedClient``.
749
+ """
750
+ client = cls.get_from_cli()
751
+
752
+ if course_id is not None:
753
+ client.restrict(course_id=course_id, removed_permissions=[])
754
+ return client
755
+
756
+ course = select_from_list(
757
+ "Select your course",
758
+ # Sort so that the newest course will be at the bottom, supporting
759
+ # the common case of selecting one of the latest courses.
760
+ sorted(
761
+ client.course.get_all(extended=False, limit=cg_maybe.of(200)),
762
+ key=lambda c: c.created_at,
763
+ ),
764
+ lambda c: c.name,
765
+ ).try_extract(sys.exit)
766
+
767
+ client.restrict(course_id=course.id, removed_permissions=[])
768
+ return client
@@ -446,9 +446,6 @@ from .lti1p3_system_role_from_context_role_setting import (
446
446
  Lti1p3SystemRoleFromContextRoleSetting,
447
447
  )
448
448
  from .lti_enabled_setting import LtiEnabledSetting
449
- from .lti_first_launch_content_id_enabled_setting import (
450
- LtiFirstLaunchContentIdEnabledSetting,
451
- )
452
449
  from .lti_launch_data_logging_setting import LtiLaunchDataLoggingSetting
453
450
  from .lti_lock_date_copying_enabled_setting import (
454
451
  LtiLockDateCopyingEnabledSetting,
@@ -639,12 +636,9 @@ from .repository_connection_limit_reached_exception import (
639
636
  from .reset_token_time_setting import ResetTokenTimeSetting
640
637
  from .result_data_get_auto_test_get import ResultDataGetAutoTestGet
641
638
  from .result_data_get_task_result_get_all import ResultDataGetTaskResultGetAll
642
- from .result_data_post_login_link_login import ResultDataPostLoginLinkLogin
643
639
  from .result_data_post_section_create_division import (
644
640
  ResultDataPostSectionCreateDivision,
645
641
  )
646
- from .result_data_post_user_login import ResultDataPostUserLogin
647
- from .result_data_post_user_register import ResultDataPostUserRegister
648
642
  from .retry_group_submission_grade_passback_enabled_setting import (
649
643
  RetryGroupSubmissionGradePassbackEnabledSetting,
650
644
  )
@@ -118,10 +118,6 @@ class AllSiteSettings(FrontendSiteSettings):
118
118
  #: Prefer the most privileged role in the LTI 1.3 roles claim sent by the
119
119
  #: LMS, instead of the first role that matches any of our definitions.
120
120
  lti_1p3_parse_most_privileged_role: Maybe["bool"] = Nothing
121
- #: Whether we act upon the custom claims parameter for content id, which we
122
- #: then use to import an item from the community library. This feature
123
- #: enables that we check for this content id in the launch parameters.
124
- lti_first_launch_content_id_enabled: Maybe["bool"] = Nothing
125
121
  #: Enable logging of LTI launch data. NEVER ENABLE THIS SITE-WIDE, only for
126
122
  #: a single tenant, and disable this feature after you've gotten the data
127
123
  #: you need.
@@ -320,11 +316,6 @@ class AllSiteSettings(FrontendSiteSettings):
320
316
  rqa.SimpleValue.bool,
321
317
  doc="Prefer the most privileged role in the LTI 1.3 roles claim sent by the LMS, instead of the first role that matches any of our definitions.",
322
318
  ),
323
- rqa.OptionalArgument(
324
- "LTI_FIRST_LAUNCH_CONTENT_ID_ENABLED",
325
- rqa.SimpleValue.bool,
326
- doc="Whether we act upon the custom claims parameter for content id, which we then use to import an item from the community library. This feature enables that we check for this content id in the launch parameters.",
327
- ),
328
319
  rqa.OptionalArgument(
329
320
  "LTI_LAUNCH_DATA_LOGGING",
330
321
  rqa.SimpleValue.bool,
@@ -468,9 +459,6 @@ class AllSiteSettings(FrontendSiteSettings):
468
459
  self.lti_1p3_parse_most_privileged_role = maybe_from_nullable(
469
460
  self.lti_1p3_parse_most_privileged_role
470
461
  )
471
- self.lti_first_launch_content_id_enabled = maybe_from_nullable(
472
- self.lti_first_launch_content_id_enabled
473
- )
474
462
  self.lti_launch_data_logging = maybe_from_nullable(
475
463
  self.lti_launch_data_logging
476
464
  )
@@ -1028,10 +1016,6 @@ class AllSiteSettings(FrontendSiteSettings):
1028
1016
  res["LTI_1P3_PARSE_MOST_PRIVILEGED_ROLE"] = to_dict(
1029
1017
  self.lti_1p3_parse_most_privileged_role.value
1030
1018
  )
1031
- if self.lti_first_launch_content_id_enabled.is_just:
1032
- res["LTI_FIRST_LAUNCH_CONTENT_ID_ENABLED"] = to_dict(
1033
- self.lti_first_launch_content_id_enabled.value
1034
- )
1035
1019
  if self.lti_launch_data_logging.is_just:
1036
1020
  res["LTI_LAUNCH_DATA_LOGGING"] = to_dict(
1037
1021
  self.lti_launch_data_logging.value
@@ -1214,7 +1198,6 @@ class AllSiteSettings(FrontendSiteSettings):
1214
1198
  lti_unset_deadline_lock_date_enabled=parsed.LTI_UNSET_DEADLINE_LOCK_DATE_ENABLED,
1215
1199
  lti_1p3_system_role_from_context_role=parsed.LTI_1P3_SYSTEM_ROLE_FROM_CONTEXT_ROLE,
1216
1200
  lti_1p3_parse_most_privileged_role=parsed.LTI_1P3_PARSE_MOST_PRIVILEGED_ROLE,
1217
- lti_first_launch_content_id_enabled=parsed.LTI_FIRST_LAUNCH_CONTENT_ID_ENABLED,
1218
1201
  lti_launch_data_logging=parsed.LTI_LAUNCH_DATA_LOGGING,
1219
1202
  pearson_templates=parsed.PEARSON_TEMPLATES,
1220
1203
  default_course_teacher_role=parsed.DEFAULT_COURSE_TEACHER_ROLE,
@@ -43,6 +43,8 @@ class BaseLMSCapabilities:
43
43
  #: Should the name of the assignment be set within CodeGrade and not copied
44
44
  #: from the LMS?
45
45
  set_name: "bool"
46
+ #: Are we allowed to set the max attempts within CodeGrade.
47
+ set_max_attempts: "bool"
46
48
  #: The name of the iframe `postMessage` we can send to the LMS to notify
47
49
  #: that we want to set cookies in a full window. This property is ugly,
48
50
  #: and shows that these capabilities are not really a very good
@@ -115,6 +117,11 @@ class BaseLMSCapabilities:
115
117
  rqa.SimpleValue.bool,
116
118
  doc="Should the name of the assignment be set within CodeGrade and not copied from the LMS?",
117
119
  ),
120
+ rqa.RequiredArgument(
121
+ "set_max_attempts",
122
+ rqa.SimpleValue.bool,
123
+ doc="Are we allowed to set the max attempts within CodeGrade.",
124
+ ),
118
125
  rqa.RequiredArgument(
119
126
  "cookie_post_message",
120
127
  rqa.Nullable(rqa.SimpleValue.str),
@@ -151,6 +158,7 @@ class BaseLMSCapabilities:
151
158
  "set_state": to_dict(self.set_state),
152
159
  "set_available_at": to_dict(self.set_available_at),
153
160
  "set_name": to_dict(self.set_name),
161
+ "set_max_attempts": to_dict(self.set_max_attempts),
154
162
  "cookie_post_message": to_dict(self.cookie_post_message),
155
163
  "supported_custom_replacement_groups": to_dict(
156
164
  self.supported_custom_replacement_groups
@@ -176,6 +184,7 @@ class BaseLMSCapabilities:
176
184
  set_state=parsed.set_state,
177
185
  set_available_at=parsed.set_available_at,
178
186
  set_name=parsed.set_name,
187
+ set_max_attempts=parsed.set_max_attempts,
179
188
  cookie_post_message=parsed.cookie_post_message,
180
189
  supported_custom_replacement_groups=parsed.supported_custom_replacement_groups,
181
190
  use_id_in_urls=parsed.use_id_in_urls,