codegrade 16.1.37__tar.gz → 16.1.39__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 (565) hide show
  1. {codegrade-16.1.37 → codegrade-16.1.39}/PKG-INFO +1 -1
  2. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_base.py +9 -4
  3. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/__init__.py +1 -1
  4. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/client.py +2 -2
  5. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/__init__.py +7 -0
  6. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/all_site_settings.py +12 -2
  7. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment.py +10 -0
  8. codegrade-16.1.39/codegrade/models/assignment_submission_mode.py +10 -0
  9. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/frontend_site_settings.py +49 -0
  10. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_assignment_data.py +16 -4
  11. codegrade-16.1.39/codegrade/models/simple_submission_mode_enabled_setting.py +57 -0
  12. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/site_setting_input.py +10 -0
  13. codegrade-16.1.39/codegrade/models/submissions_page_v2_enabled_setting.py +56 -0
  14. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/update_peer_feedback_settings_assignment_data.py +2 -2
  15. {codegrade-16.1.37 → codegrade-16.1.39}/pyproject.toml +1 -1
  16. {codegrade-16.1.37 → codegrade-16.1.39}/setup.py +1 -1
  17. {codegrade-16.1.37 → codegrade-16.1.39}/README.md +0 -0
  18. {codegrade-16.1.37 → codegrade-16.1.39}/cg_dt_utils/__init__.py +0 -0
  19. {codegrade-16.1.37 → codegrade-16.1.39}/cg_dt_utils/py.typed +0 -0
  20. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/__init__.py +0 -0
  21. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/_just.py +0 -0
  22. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/_maybe.py +0 -0
  23. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/_nothing.py +0 -0
  24. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/_type_helpers.py +0 -0
  25. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/cg_maybe_plugin.py +0 -0
  26. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/py.typed +0 -0
  27. {codegrade-16.1.37 → codegrade-16.1.39}/cg_maybe/utils.py +0 -0
  28. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/__init__.py +0 -0
  29. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_any_value.py +0 -0
  30. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_convert.py +0 -0
  31. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_enum.py +0 -0
  32. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_form.py +0 -0
  33. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_lazy.py +0 -0
  34. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_list.py +0 -0
  35. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_literal.py +0 -0
  36. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_mapping.py +0 -0
  37. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_multipart.py +0 -0
  38. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_nullable.py +0 -0
  39. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_parse_utils.py +0 -0
  40. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_query.py +0 -0
  41. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_rich_value.py +0 -0
  42. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_swagger_utils.py +0 -0
  43. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_swaggerize.py +0 -0
  44. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/_utils.py +0 -0
  45. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/exceptions.py +0 -0
  46. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/py.typed +0 -0
  47. {codegrade-16.1.37 → codegrade-16.1.39}/cg_request_args/request_args_plugin.py +0 -0
  48. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/__init__.py +0 -0
  49. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/about.py +0 -0
  50. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/assignment.py +0 -0
  51. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/auto_test.py +0 -0
  52. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/comment.py +0 -0
  53. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/course.py +0 -0
  54. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/course_price.py +0 -0
  55. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/file.py +0 -0
  56. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/git_provider.py +0 -0
  57. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/group.py +0 -0
  58. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/group_set.py +0 -0
  59. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/login_link.py +0 -0
  60. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/lti.py +0 -0
  61. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/notification.py +0 -0
  62. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/oauth_provider.py +0 -0
  63. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/oauth_token.py +0 -0
  64. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/permission.py +0 -0
  65. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/plagiarism.py +0 -0
  66. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/role.py +0 -0
  67. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/section.py +0 -0
  68. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/site_settings.py +0 -0
  69. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/snippet.py +0 -0
  70. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/sso_provider.py +0 -0
  71. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/submission.py +0 -0
  72. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/task_result.py +0 -0
  73. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/tenant.py +0 -0
  74. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/transaction.py +0 -0
  75. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/user.py +0 -0
  76. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/user_setting.py +0 -0
  77. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/_api/webhook.py +0 -0
  78. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/errors.py +0 -0
  79. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/_base_price.py +0 -0
  80. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/_saml_ui_logo_info.py +0 -0
  81. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/_submission_rubric_item_data_parser.py +0 -0
  82. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/about.py +0 -0
  83. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/abstract_role.py +0 -0
  84. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/add_users_section_data.py +0 -0
  85. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/all_auto_test_results.py +0 -0
  86. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/any_auto_test_step_as_json.py +0 -0
  87. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/any_error.py +0 -0
  88. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/any_non_redacted_auto_test_step_as_json.py +0 -0
  89. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/any_redacted_auto_test_step_as_json.py +0 -0
  90. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/api_codes.py +0 -0
  91. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_anonymization_algo.py +0 -0
  92. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_default_grading_scale_points_setting.py +0 -0
  93. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_default_grading_scale_setting.py +0 -0
  94. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_description_enabled_setting.py +0 -0
  95. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_description_on_teachers_submissions_page_setting.py +0 -0
  96. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_done_type.py +0 -0
  97. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_export_column.py +0 -0
  98. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_feedback.py +0 -0
  99. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_grader.py +0 -0
  100. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_grading_scale_points_enabled_setting.py +0 -0
  101. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_kind.py +0 -0
  102. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_login_link.py +0 -0
  103. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_max_points_enabled_setting.py +0 -0
  104. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_peer_feedback_connection.py +0 -0
  105. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_peer_feedback_settings.py +0 -0
  106. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_percentage_decimals_setting.py +0 -0
  107. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_percentage_grading_settings.py +0 -0
  108. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_point_decimals_setting.py +0 -0
  109. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_points_grading_settings.py +0 -0
  110. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_section_timeframe.py +0 -0
  111. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_state_enum.py +0 -0
  112. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_template.py +0 -0
  113. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/assignment_timeframes.py +0 -0
  114. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/at_image_caching_enabled_setting.py +0 -0
  115. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test.py +0 -0
  116. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_capture_points_message_setting.py +0 -0
  117. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_checkpoint_message_setting.py +0 -0
  118. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_code_quality_message_setting.py +0 -0
  119. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_enabled_setting.py +0 -0
  120. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_fixture.py +0 -0
  121. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_global_setup_output.py +0 -0
  122. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_global_setup_script.py +0 -0
  123. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_heartbeat_interval_setting.py +0 -0
  124. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_heartbeat_max_missed_setting.py +0 -0
  125. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_io_test_message_setting.py +0 -0
  126. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_io_test_sub_message_setting.py +0 -0
  127. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_concurrent_batch_runs_setting.py +0 -0
  128. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_global_setup_time_setting.py +0 -0
  129. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_jobs_per_runner_setting.py +0 -0
  130. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_per_student_setup_time_setting.py +0 -0
  131. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_result_not_started_setting.py +0 -0
  132. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_time_command_setting.py +0 -0
  133. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_max_unit_test_metadata_length_setting.py +0 -0
  134. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_quality_comment.py +0 -0
  135. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_result.py +0 -0
  136. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_result_state.py +0 -0
  137. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_result_with_extra_data.py +0 -0
  138. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_run.py +0 -0
  139. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_run_program_message_setting.py +0 -0
  140. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_runner.py +0 -0
  141. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_runner_state.py +0 -0
  142. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_set.py +0 -0
  143. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_base.py +0 -0
  144. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_base_as_json.py +0 -0
  145. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_base_input_as_json.py +0 -0
  146. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_log_base.py +0 -0
  147. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_result.py +0 -0
  148. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_result_state.py +0 -0
  149. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_step_validation_exception.py +0 -0
  150. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_suite.py +0 -0
  151. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/auto_test_unit_test_message_setting.py +0 -0
  152. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/automatic_lti1p3_assignment_import_setting.py +0 -0
  153. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/automatic_lti_role_enabled_setting.py +0 -0
  154. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_about.py +0 -0
  155. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_auto_test_quality_comment.py +0 -0
  156. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_comment_base.py +0 -0
  157. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_comment_base_with_extended_replies.py +0 -0
  158. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_comment_base_with_normal_replies.py +0 -0
  159. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_comment_reply.py +0 -0
  160. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_course_coupon.py +0 -0
  161. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_directory.py +0 -0
  162. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_error.py +0 -0
  163. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_file.py +0 -0
  164. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_lms_capabilities.py +0 -0
  165. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_lti1p1_provider.py +0 -0
  166. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_lti1p3_provider.py +0 -0
  167. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_lti_provider.py +0 -0
  168. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_notification.py +0 -0
  169. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_release_info.py +0 -0
  170. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_rubric_item.py +0 -0
  171. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/base_tenant_coupon.py +0 -0
  172. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/blackboard_zip_upload_enabled_setting.py +0 -0
  173. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/bulk_enroll_course_data.py +0 -0
  174. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/canvas_course_id_copying_enabled_setting.py +0 -0
  175. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/cg_ignore_version.py +0 -0
  176. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/change_user_role_course_data.py +0 -0
  177. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/check_points_as_json.py +0 -0
  178. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/check_points_data.py +0 -0
  179. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/check_points_extra.py +0 -0
  180. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/check_points_input_as_json.py +0 -0
  181. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/clone_result.py +0 -0
  182. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_as_json.py +0 -0
  183. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_base_data.py +0 -0
  184. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_data.py +0 -0
  185. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_extra.py +0 -0
  186. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_input_as_json.py +0 -0
  187. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/code_quality_penalties.py +0 -0
  188. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/column_range.py +0 -0
  189. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/comment_base.py +0 -0
  190. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/comment_reply.py +0 -0
  191. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/comment_reply_edit.py +0 -0
  192. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/comment_reply_type.py +0 -0
  193. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/comment_type.py +0 -0
  194. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/community_library_publishing_setting.py +0 -0
  195. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/community_library_setting.py +0 -0
  196. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/connect_repository_git_provider_data.py +0 -0
  197. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/copy_auto_test_data.py +0 -0
  198. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/copy_rubric_assignment_data.py +0 -0
  199. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/coupon_data_parser.py +0 -0
  200. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/coupon_with_code.py +0 -0
  201. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/coupon_without_code.py +0 -0
  202. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course.py +0 -0
  203. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_bulk_enroll_result.py +0 -0
  204. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_bulk_register_enabled_setting.py +0 -0
  205. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_coupon.py +0 -0
  206. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_coupon_usage.py +0 -0
  207. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_gradebook_enabled_setting.py +0 -0
  208. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_gradebook_render_warning_size_setting.py +0 -0
  209. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_of_course_price.py +0 -0
  210. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_of_tenant_coupon_usage.py +0 -0
  211. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_perm_map.py +0 -0
  212. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_permission.py +0 -0
  213. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_price.py +0 -0
  214. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_register_enabled_setting.py +0 -0
  215. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_register_response.py +0 -0
  216. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_registration_link.py +0 -0
  217. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_role.py +0 -0
  218. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_role_as_json_with_perms.py +0 -0
  219. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_section.py +0 -0
  220. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_section_division.py +0 -0
  221. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_section_division_connection.py +0 -0
  222. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_section_division_user.py +0 -0
  223. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_snippet.py +0 -0
  224. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_state.py +0 -0
  225. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/course_statistics_as_json.py +0 -0
  226. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_assignment_course_data.py +0 -0
  227. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_auto_test_data.py +0 -0
  228. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_comment_data.py +0 -0
  229. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_comment_reply_data.py +0 -0
  230. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_course_data.py +0 -0
  231. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_division_section_data.py +0 -0
  232. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_group_group_set_data.py +0 -0
  233. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_group_set_course_data.py +0 -0
  234. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_lti_data.py +0 -0
  235. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_output_html_proxy_auto_test_data.py +0 -0
  236. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_proxy_submission_data.py +0 -0
  237. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_repository_git_provider_data.py +0 -0
  238. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_role_course_data.py +0 -0
  239. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_section_course_data.py +0 -0
  240. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_snippet_course_data.py +0 -0
  241. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_snippet_data.py +0 -0
  242. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_sso_provider_data.py +0 -0
  243. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/create_tenant_data.py +0 -0
  244. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/csv_large_file_limit_setting.py +0 -0
  245. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/csv_too_many_errors_limit_setting.py +0 -0
  246. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/currency.py +0 -0
  247. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_as_json.py +0 -0
  248. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_data.py +0 -0
  249. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_extra.py +0 -0
  250. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_input_as_json.py +0 -0
  251. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_log.py +0 -0
  252. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/custom_output_log_base.py +0 -0
  253. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/deleted_comment_reply.py +0 -0
  254. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/deletion_type.py +0 -0
  255. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/directory_with_children.py +0 -0
  256. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/disabled_setting_exception.py +0 -0
  257. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/editor_enabled_for_teachers_setting.py +0 -0
  258. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/editor_enabled_setting.py +0 -0
  259. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/email_notification_types.py +0 -0
  260. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/email_students_enabled_setting.py +0 -0
  261. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/email_users_course_data.py +0 -0
  262. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/exam_login_max_length_setting.py +0 -0
  263. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/export_assignment_csv_data.py +0 -0
  264. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/export_assignment_data.py +0 -0
  265. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/export_assignment_files_data.py +0 -0
  266. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_auto_test_result.py +0 -0
  267. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_auto_test_run.py +0 -0
  268. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_course.py +0 -0
  269. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_course_registration_link.py +0 -0
  270. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_course_section.py +0 -0
  271. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_group.py +0 -0
  272. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_job.py +0 -0
  273. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_non_deleted_comment_reply.py +0 -0
  274. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_tenant.py +0 -0
  275. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_transaction.py +0 -0
  276. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_user.py +0 -0
  277. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extended_work.py +0 -0
  278. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extract_file_tree_directory.py +0 -0
  279. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/extract_file_tree_file.py +0 -0
  280. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/failed_to_send_email_exception.py +0 -0
  281. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/feedback_base.py +0 -0
  282. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/feedback_threads_initially_collapsed_setting.py +0 -0
  283. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/feedback_with_replies.py +0 -0
  284. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/feedback_without_replies.py +0 -0
  285. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/file_deletion.py +0 -0
  286. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/file_rule.py +0 -0
  287. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/file_rule_input_data.py +0 -0
  288. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/file_tree.py +0 -0
  289. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/file_type.py +0 -0
  290. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/finalized_lti1p1_provider.py +0 -0
  291. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/finalized_lti1p3_provider.py +0 -0
  292. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/first_phase_lti_launch_exception.py +0 -0
  293. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/fixed_availability.py +0 -0
  294. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/fixed_grade_availability.py +0 -0
  295. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/fixture_like.py +0 -0
  296. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/fraction.py +0 -0
  297. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/general_feedback_comment_base.py +0 -0
  298. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/general_feedback_comment_base_with_extended_replies.py +0 -0
  299. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/general_feedback_extra.py +0 -0
  300. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/git_repositories_page.py +0 -0
  301. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/git_repository_like.py +0 -0
  302. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/git_user_info.py +0 -0
  303. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/github_template_repo_enabled_setting.py +0 -0
  304. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/global_perm_map.py +0 -0
  305. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/global_permission.py +0 -0
  306. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/grade_history.py +0 -0
  307. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/grade_origin.py +0 -0
  308. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/grading_notifications_enabled_setting.py +0 -0
  309. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/group.py +0 -0
  310. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/group_not_ready_for_submission_exception.py +0 -0
  311. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/group_set.py +0 -0
  312. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/groups_enabled_setting.py +0 -0
  313. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/has_unread_notifcation_json.py +0 -0
  314. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/health_information.py +0 -0
  315. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/ignore_handling.py +0 -0
  316. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/ignored_files_exception.py +0 -0
  317. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/import_into_assignment_data.py +0 -0
  318. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/import_into_course_data.py +0 -0
  319. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/incremental_rubric_submission_enabled_setting.py +0 -0
  320. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/inline_feedback_comment_base.py +0 -0
  321. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/inline_feedback_comment_base_with_extended_replies.py +0 -0
  322. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/inline_feedback_extra.py +0 -0
  323. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/inline_rubric_viewer_enabled_setting.py +0 -0
  324. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/invalid_group_exception.py +0 -0
  325. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/invalid_io_cases_exception.py +0 -0
  326. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/invalid_options_exception.py +0 -0
  327. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_as_json.py +0 -0
  328. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_base_data.py +0 -0
  329. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_data.py +0 -0
  330. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_extra.py +0 -0
  331. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_input_as_json.py +0 -0
  332. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_input_case.py +0 -0
  333. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_log.py +0 -0
  334. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_option.py +0 -0
  335. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_step_log.py +0 -0
  336. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/io_test_step_log_base.py +0 -0
  337. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/is_admin_permission_enabled_setting.py +0 -0
  338. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/job.py +0 -0
  339. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/json_create_auto_test.py +0 -0
  340. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/json_create_tenant.py +0 -0
  341. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/json_patch_auto_test.py +0 -0
  342. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/json_patch_submit_types_assignment.py +0 -0
  343. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_as_json.py +0 -0
  344. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_base_data.py +0 -0
  345. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_data.py +0 -0
  346. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_extra.py +0 -0
  347. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_input_as_json.py +0 -0
  348. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_log.py +0 -0
  349. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/junit_test_log_base.py +0 -0
  350. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/jwt_access_token_expires_setting.py +0 -0
  351. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/legacy_features.py +0 -0
  352. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/line_range.py +0 -0
  353. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/linter_comment.py +0 -0
  354. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/linters_enabled_setting.py +0 -0
  355. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lms_capabilities.py +0 -0
  356. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/login_token_before_time_setting.py +0 -0
  357. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/login_user_data.py +0 -0
  358. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/logout_response.py +0 -0
  359. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/logout_user_data.py +0 -0
  360. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p1_provider.py +0 -0
  361. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p1_provider_data.py +0 -0
  362. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p3_parse_most_privileged_role_setting.py +0 -0
  363. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p3_provider.py +0 -0
  364. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p3_provider_data.py +0 -0
  365. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p3_provider_presentation_as_json.py +0 -0
  366. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti1p3_system_role_from_context_role_setting.py +0 -0
  367. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti_enabled_setting.py +0 -0
  368. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti_first_launch_content_id_enabled_setting.py +0 -0
  369. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti_lock_date_copying_enabled_setting.py +0 -0
  370. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti_provider_base.py +0 -0
  371. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/lti_unset_deadline_lock_date_enabled_setting.py +0 -0
  372. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_document_update_size_setting.py +0 -0
  373. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_dynamo_file_size_setting.py +0 -0
  374. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_dynamo_submission_size_setting.py +0 -0
  375. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_file_size_setting.py +0 -0
  376. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_large_upload_size_setting.py +0 -0
  377. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_lines_setting.py +0 -0
  378. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_mirror_file_age_setting.py +0 -0
  379. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_normal_upload_size_setting.py +0 -0
  380. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_number_of_files_setting.py +0 -0
  381. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_plagiarism_matches_setting.py +0 -0
  382. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/max_user_setting_amount_setting.py +0 -0
  383. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/min_password_score_setting.py +0 -0
  384. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/mirror_file_result.py +0 -0
  385. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/missing_cookie_error.py +0 -0
  386. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/missing_file.py +0 -0
  387. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_allowed_initial_build_ids_setting.py +0 -0
  388. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_build_max_command_time_setting.py +0 -0
  389. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_build_output_limit_setting.py +0 -0
  390. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_copying_enabled_setting.py +0 -0
  391. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_current_initial_build_ids_setting.py +0 -0
  392. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_diff_viewer_enabled_setting.py +0 -0
  393. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_enabled_setting.py +0 -0
  394. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_initial_build_id_setting.py +0 -0
  395. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_max_dynamodb_size_setting.py +0 -0
  396. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_max_file_size_setting.py +0 -0
  397. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_max_output_files_size_setting.py +0 -0
  398. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_max_storage_size_setting.py +0 -0
  399. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_old_submission_age_setting.py +0 -0
  400. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_test_max_command_time_setting.py +0 -0
  401. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_test_output_limit_setting.py +0 -0
  402. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/new_auto_test_uncollapsing_step_output_delay_setting.py +0 -0
  403. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/no_permissions.py +0 -0
  404. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/non_deleted_comment_reply.py +0 -0
  405. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/non_finalized_lti1p1_provider.py +0 -0
  406. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/non_finalized_lti1p3_provider.py +0 -0
  407. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/non_present_preference.py +0 -0
  408. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification.py +0 -0
  409. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_comment_reply_notification_as_json.py +0 -0
  410. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_general_feedback_reply_notification_as_json.py +0 -0
  411. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_poll_time_setting.py +0 -0
  412. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_reasons.py +0 -0
  413. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_setting.py +0 -0
  414. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notification_setting_option.py +0 -0
  415. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/notifications_json.py +0 -0
  416. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/oauth_provider.py +0 -0
  417. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/oauth_token.py +0 -0
  418. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/option.py +0 -0
  419. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/options_input_data.py +0 -0
  420. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/output_viewer_animation_limit_lines_count_setting.py +0 -0
  421. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/parse_api_exception.py +0 -0
  422. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch1_p1_provider_lti_data.py +0 -0
  423. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch1_p3_provider_lti_data.py +0 -0
  424. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_all_notification_data.py +0 -0
  425. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_auto_test_data.py +0 -0
  426. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_comment_reply_data.py +0 -0
  427. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_course_data.py +0 -0
  428. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_grader_submission_data.py +0 -0
  429. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_notification_data.py +0 -0
  430. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_notification_setting_user_setting_data.py +0 -0
  431. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_provider_lti_data.py +0 -0
  432. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_role_course_data.py +0 -0
  433. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_role_data.py +0 -0
  434. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_role_tenant_data.py +0 -0
  435. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_rubric_category_type_assignment_data.py +0 -0
  436. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_rubric_result_submission_data.py +0 -0
  437. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_section_data.py +0 -0
  438. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_settings_tenant_data.py +0 -0
  439. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_site_settings_data.py +0 -0
  440. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_snippet_course_data.py +0 -0
  441. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_snippet_data.py +0 -0
  442. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_submission_data.py +0 -0
  443. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_submit_types_assignment_data.py +0 -0
  444. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_tenant_data.py +0 -0
  445. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_ui_preference_user_setting_data.py +0 -0
  446. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/patch_user_data.py +0 -0
  447. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/pay_with_coupon_course_price_data.py +0 -0
  448. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/peer_feedback_enabled_setting.py +0 -0
  449. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/permission_exception.py +0 -0
  450. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_bulk_export_enabled_setting.py +0 -0
  451. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_bulk_export_max_cases_setting.py +0 -0
  452. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_case.py +0 -0
  453. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_pdf_export_enabled_setting.py +0 -0
  454. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_run.py +0 -0
  455. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_run_plagiarism_assignment_as_json.py +0 -0
  456. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_run_plagiarism_course_as_json.py +0 -0
  457. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/plagiarism_state.py +0 -0
  458. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/post_oauth_token_data.py +0 -0
  459. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/present_preference.py +0 -0
  460. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/proxy.py +0 -0
  461. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/put_description_assignment_data.py +0 -0
  462. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/put_enroll_link_course_data.py +0 -0
  463. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/put_price_course_data.py +0 -0
  464. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/put_price_tenant_data.py +0 -0
  465. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/put_rubric_assignment_data.py +0 -0
  466. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/quality_comment_severity.py +0 -0
  467. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/quality_comments_in_code_editor_setting.py +0 -0
  468. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/quality_test_log.py +0 -0
  469. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/quality_test_log_base.py +0 -0
  470. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/register_enabled_setting.py +0 -0
  471. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/register_user_data.py +0 -0
  472. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/register_user_with_link_course_data.py +0 -0
  473. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/release_info.py +0 -0
  474. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/release_message_max_time_setting.py +0 -0
  475. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rename_group_group_data.py +0 -0
  476. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/render_html_enabled_setting.py +0 -0
  477. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/repository_connection_limit_reached_exception.py +0 -0
  478. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/reset_token_time_setting.py +0 -0
  479. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_get_auto_test_get.py +0 -0
  480. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_get_task_result_get_all.py +0 -0
  481. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_post_login_link_login.py +0 -0
  482. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_post_section_create_division.py +0 -0
  483. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_post_user_login.py +0 -0
  484. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/result_data_post_user_register.py +0 -0
  485. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/role_as_json_with_perms.py +0 -0
  486. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/root_file_trees_json.py +0 -0
  487. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_description_type.py +0 -0
  488. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_enabled_for_teacher_on_submissions_page_setting.py +0 -0
  489. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_item.py +0 -0
  490. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_item_input_as_json.py +0 -0
  491. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_lock_reason.py +0 -0
  492. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_row_base.py +0 -0
  493. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_row_base_input_as_json.py +0 -0
  494. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubric_row_base_input_base_as_json.py +0 -0
  495. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rubrics_enabled_setting.py +0 -0
  496. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/rule_type.py +0 -0
  497. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/run_program_as_json.py +0 -0
  498. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/run_program_data.py +0 -0
  499. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/run_program_extra.py +0 -0
  500. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/run_program_input_as_json.py +0 -0
  501. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/run_program_log.py +0 -0
  502. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/saml2_provider_json.py +0 -0
  503. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/saml_ui_info.py +0 -0
  504. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/sections_in_submission_list_enabled_setting.py +0 -0
  505. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/send_registration_email_setting.py +0 -0
  506. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/server_time_correction_enabled_setting.py +0 -0
  507. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/server_time_diff_tolerance_setting.py +0 -0
  508. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/server_time_sync_interval_setting.py +0 -0
  509. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/setting_token_time_setting.py +0 -0
  510. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/setup_oauth_result.py +0 -0
  511. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/site_email_setting.py +0 -0
  512. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/snippet.py +0 -0
  513. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/sso_infer_global_staff_role_setting.py +0 -0
  514. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/sso_username_decollision_enabled_setting.py +0 -0
  515. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/staged_assignment_importer_enabled_setting.py +0 -0
  516. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/start_payment_course_price_close_tab_data.py +0 -0
  517. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/start_payment_course_price_data.py +0 -0
  518. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/start_payment_course_price_redirect_data.py +0 -0
  519. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/started_transaction.py +0 -0
  520. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/student_payment_enabled_setting.py +0 -0
  521. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/submission_validator_input_data.py +0 -0
  522. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/submissions_per_page_enabled_setting.py +0 -0
  523. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/task_result_state.py +0 -0
  524. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tax_behavior.py +0 -0
  525. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant.py +0 -0
  526. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_coupon.py +0 -0
  527. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_coupon_usage.py +0 -0
  528. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_coupon_with_code.py +0 -0
  529. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_coupon_without_code.py +0 -0
  530. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_course_statistics.py +0 -0
  531. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_of_tenant_price.py +0 -0
  532. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_permissions.py +0 -0
  533. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_price.py +0 -0
  534. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_role_as_json_with_perms.py +0 -0
  535. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/tenant_statistics.py +0 -0
  536. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/test_submission_copying_on_import_enabled_setting.py +0 -0
  537. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/timed_availability.py +0 -0
  538. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/timeframe_like.py +0 -0
  539. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/token_revoked_exception.py +0 -0
  540. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/transaction.py +0 -0
  541. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/transaction_state.py +0 -0
  542. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/types.py +0 -0
  543. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/update_set_auto_test_data.py +0 -0
  544. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/update_suite_auto_test_base_data.py +0 -0
  545. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/update_suite_auto_test_data.py +0 -0
  546. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/upgraded_lti_provider_exception.py +0 -0
  547. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/upload_submission_assignment_data.py +0 -0
  548. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/user.py +0 -0
  549. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/user_course.py +0 -0
  550. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/user_info_with_role.py +0 -0
  551. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/user_input.py +0 -0
  552. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/user_without_group.py +0 -0
  553. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/weak_password_exception.py +0 -0
  554. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/weak_password_feedback.py +0 -0
  555. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/webhook_base.py +0 -0
  556. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/webhook_configuration_disabled_as_json.py +0 -0
  557. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/webhook_configuration_enabled_as_json.py +0 -0
  558. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/work.py +0 -0
  559. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/work_origin.py +0 -0
  560. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/work_rubric_item.py +0 -0
  561. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/work_rubric_result_as_json.py +0 -0
  562. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/models/work_rubric_result_points_as_json.py +0 -0
  563. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/parsers.py +0 -0
  564. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/py.typed +0 -0
  565. {codegrade-16.1.37 → codegrade-16.1.39}/codegrade/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codegrade
3
- Version: 16.1.37
3
+ Version: 16.1.39
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.7.0,<4.0
@@ -210,10 +210,15 @@ class Parser(t.Generic[_T_COV]):
210
210
 
211
211
  :returns: The parsed data.
212
212
  """
213
- if log_replacer is None:
214
- logger.info(msg, request_data=json)
215
- elif isinstance(json, dict):
216
- to_log = {k: log_replacer(k, v) for k, v in json.items()}
213
+ if isinstance(json, dict):
214
+ to_log: t.Dict[str, object] = {}
215
+ for key, value in json.items():
216
+ if isinstance(key, str) and 'pass' in key.lower():
217
+ to_log[key] = '<PASSWORD>'
218
+ elif log_replacer is None:
219
+ to_log[key] = value
220
+ else:
221
+ to_log[key] = log_replacer(key, value)
217
222
  logger.info(msg, request_data=to_log)
218
223
  else:
219
224
  # The replacers are used for top level objects, in this case it is
@@ -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.37"
10
+ __version__ = "16.1.39"
11
11
 
12
12
 
13
13
  @wraps(AuthenticatedClient.get)
@@ -526,7 +526,7 @@ class Client(_BaseClient):
526
526
  return httpx.Client(
527
527
  base_url=self.base_url,
528
528
  headers={
529
- "User-Agent": "CodeGradeAPI/16.1.37",
529
+ "User-Agent": "CodeGradeAPI/16.1.39",
530
530
  },
531
531
  )
532
532
 
@@ -545,7 +545,7 @@ class AuthenticatedClient(_BaseClient):
545
545
  base_url=self.base_url,
546
546
  headers={
547
547
  "Authorization": f"Bearer {self.token}",
548
- "User-Agent": "CodeGradeAPI/16.1.37",
548
+ "User-Agent": "CodeGradeAPI/16.1.39",
549
549
  },
550
550
  )
551
551
 
@@ -60,6 +60,7 @@ from .assignment_point_decimals_setting import AssignmentPointDecimalsSetting
60
60
  from .assignment_points_grading_settings import AssignmentPointsGradingSettings
61
61
  from .assignment_section_timeframe import AssignmentSectionTimeframe
62
62
  from .assignment_state_enum import AssignmentStateEnum
63
+ from .assignment_submission_mode import AssignmentSubmissionMode
63
64
  from .assignment_template import AssignmentTemplate
64
65
  from .assignment_timeframes import AssignmentTimeframes
65
66
  from .at_image_caching_enabled_setting import AtImageCachingEnabledSetting
@@ -607,6 +608,9 @@ from .server_time_diff_tolerance_setting import ServerTimeDiffToleranceSetting
607
608
  from .server_time_sync_interval_setting import ServerTimeSyncIntervalSetting
608
609
  from .setting_token_time_setting import SettingTokenTimeSetting
609
610
  from .setup_oauth_result import SetupOAuthResult
611
+ from .simple_submission_mode_enabled_setting import (
612
+ SimpleSubmissionModeEnabledSetting,
613
+ )
610
614
  from .site_email_setting import SiteEmailSetting
611
615
  from .site_setting_input import SiteSettingInput
612
616
  from .snippet import Snippet
@@ -627,6 +631,9 @@ from .start_payment_course_price_redirect_data import (
627
631
  from .started_transaction import StartedTransaction
628
632
  from .student_payment_enabled_setting import StudentPaymentEnabledSetting
629
633
  from .submission_validator_input_data import SubmissionValidatorInputData
634
+ from .submissions_page_v2_enabled_setting import (
635
+ SubmissionsPageV2EnabledSetting,
636
+ )
630
637
  from .submissions_per_page_enabled_setting import (
631
638
  SubmissionsPerPageEnabledSetting,
632
639
  )
@@ -122,7 +122,7 @@ class AllSiteSettings(FrontendSiteSettings):
122
122
  #: LMS, instead of the first role that matches any of our definitions.
123
123
  lti_1p3_parse_most_privileged_role: Maybe["bool"] = Nothing
124
124
  #: Whether we act upon the custom claims parameter for content id, which we
125
- #: then use to import an item from the community libary. This feature
125
+ #: then use to import an item from the community library. This feature
126
126
  #: enables that we check for this content id in the launch parameters.
127
127
  lti_first_launch_content_id_enabled: Maybe["bool"] = Nothing
128
128
 
@@ -423,7 +423,7 @@ class AllSiteSettings(FrontendSiteSettings):
423
423
  doc=(
424
424
  "Whether we act upon the custom claims parameter for"
425
425
  " content id, which we then use to import an item from"
426
- " the community libary. This feature enables that we"
426
+ " the community library. This feature enables that we"
427
427
  " check for this content id in the launch parameters."
428
428
  ),
429
429
  ),
@@ -825,6 +825,14 @@ class AllSiteSettings(FrontendSiteSettings):
825
825
  res["INLINE_RUBRIC_VIEWER_ENABLED"] = to_dict(
826
826
  self.inline_rubric_viewer_enabled.value
827
827
  )
828
+ if self.submissions_page_v2_enabled.is_just:
829
+ res["SUBMISSIONS_PAGE_V2_ENABLED"] = to_dict(
830
+ self.submissions_page_v2_enabled.value
831
+ )
832
+ if self.simple_submission_mode_enabled.is_just:
833
+ res["SIMPLE_SUBMISSION_MODE_ENABLED"] = to_dict(
834
+ self.simple_submission_mode_enabled.value
835
+ )
828
836
  if self.auto_test_heartbeat_interval.is_just:
829
837
  res["AUTO_TEST_HEARTBEAT_INTERVAL"] = to_dict(
830
838
  self.auto_test_heartbeat_interval.value
@@ -1039,6 +1047,8 @@ class AllSiteSettings(FrontendSiteSettings):
1039
1047
  assignment_description_on_teachers_submissions_page=parsed.ASSIGNMENT_DESCRIPTION_ON_TEACHERS_SUBMISSIONS_PAGE,
1040
1048
  submissions_per_page_enabled=parsed.SUBMISSIONS_PER_PAGE_ENABLED,
1041
1049
  inline_rubric_viewer_enabled=parsed.INLINE_RUBRIC_VIEWER_ENABLED,
1050
+ submissions_page_v2_enabled=parsed.SUBMISSIONS_PAGE_V2_ENABLED,
1051
+ simple_submission_mode_enabled=parsed.SIMPLE_SUBMISSION_MODE_ENABLED,
1042
1052
  auto_test_heartbeat_interval=parsed.AUTO_TEST_HEARTBEAT_INTERVAL,
1043
1053
  auto_test_heartbeat_max_missed=parsed.AUTO_TEST_HEARTBEAT_MAX_MISSED,
1044
1054
  auto_test_max_jobs_per_runner=parsed.AUTO_TEST_MAX_JOBS_PER_RUNNER,
@@ -18,6 +18,7 @@ from .assignment_percentage_grading_settings import (
18
18
  AssignmentPercentageGradingSettings,
19
19
  )
20
20
  from .assignment_points_grading_settings import AssignmentPointsGradingSettings
21
+ from .assignment_submission_mode import AssignmentSubmissionMode
21
22
  from .cg_ignore_version import CGIgnoreVersion
22
23
  from .fixed_grade_availability import FixedGradeAvailability
23
24
  from .group_set import GroupSet
@@ -141,6 +142,8 @@ class Assignment(TimeframeLike):
141
142
  grade_availability: "FixedGradeAvailability"
142
143
  #: Does this assignment have multiple timeframes.
143
144
  has_multiple_timeframes: "bool"
145
+ #: Which submission mode is set for the assignment.
146
+ submission_mode: "AssignmentSubmissionMode"
144
147
 
145
148
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
146
149
 
@@ -440,6 +443,11 @@ class Assignment(TimeframeLike):
440
443
  rqa.SimpleValue.bool,
441
444
  doc="Does this assignment have multiple timeframes.",
442
445
  ),
446
+ rqa.RequiredArgument(
447
+ "submission_mode",
448
+ rqa.EnumValue(AssignmentSubmissionMode),
449
+ doc="Which submission mode is set for the assignment.",
450
+ ),
443
451
  )
444
452
  ).use_readable_describe(True)
445
453
  )
@@ -484,6 +492,7 @@ class Assignment(TimeframeLike):
484
492
  "file_to_load_first": to_dict(self.file_to_load_first),
485
493
  "grade_availability": to_dict(self.grade_availability),
486
494
  "has_multiple_timeframes": to_dict(self.has_multiple_timeframes),
495
+ "submission_mode": to_dict(self.submission_mode),
487
496
  "availability": to_dict(self.availability),
488
497
  "deadline": to_dict(self.deadline),
489
498
  "lock_date": to_dict(self.lock_date),
@@ -533,6 +542,7 @@ class Assignment(TimeframeLike):
533
542
  file_to_load_first=parsed.file_to_load_first,
534
543
  grade_availability=parsed.grade_availability,
535
544
  has_multiple_timeframes=parsed.has_multiple_timeframes,
545
+ submission_mode=parsed.submission_mode,
536
546
  availability=parsed.availability,
537
547
  deadline=parsed.deadline,
538
548
  lock_date=parsed.lock_date,
@@ -0,0 +1,10 @@
1
+ """This module defines the enum AssignmentSubmissionMode.
2
+
3
+ SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
4
+ """
5
+ from enum import Enum
6
+
7
+
8
+ class AssignmentSubmissionMode(str, Enum):
9
+ full = "full"
10
+ simple = "simple"
@@ -266,6 +266,17 @@ class FrontendSiteSettings:
266
266
  #: otherwise use a dropdown with previous and next buttons to select
267
267
  #: categories.
268
268
  inline_rubric_viewer_enabled: Maybe["bool"] = Nothing
269
+ #: Whether the new component for the submissions page is loaded instead of
270
+ #: the old one.
271
+ submissions_page_v2_enabled: Maybe["bool"] = Nothing
272
+ #: An assignment with a simplified submission mode will allow only
273
+ #: submissions made with the code editor. This will launch students
274
+ #: directly in the code editor if they have not created a session yet, to
275
+ #: their latest session if there is no submission, or to their latest
276
+ #: submission if available. Submitting via file upload or via Git, Group
277
+ #: assignments, and hand in requirements are not available with the
278
+ #: simplified submission mode enabled.
279
+ simple_submission_mode_enabled: Maybe["bool"] = Nothing
269
280
 
270
281
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
271
282
 
@@ -903,6 +914,28 @@ class FrontendSiteSettings:
903
914
  " next buttons to select categories."
904
915
  ),
905
916
  ),
917
+ rqa.OptionalArgument(
918
+ "SUBMISSIONS_PAGE_V2_ENABLED",
919
+ rqa.SimpleValue.bool,
920
+ doc=(
921
+ "Whether the new component for the submissions page is"
922
+ " loaded instead of the old one."
923
+ ),
924
+ ),
925
+ rqa.OptionalArgument(
926
+ "SIMPLE_SUBMISSION_MODE_ENABLED",
927
+ rqa.SimpleValue.bool,
928
+ doc=(
929
+ "An assignment with a simplified submission mode will"
930
+ " allow only submissions made with the code editor. This"
931
+ " will launch students directly in the code editor if they"
932
+ " have not created a session yet, to their latest session"
933
+ " if there is no submission, or to their latest submission"
934
+ " if available. Submitting via file upload or via Git,"
935
+ " Group assignments, and hand in requirements are not"
936
+ " available with the simplified submission mode enabled."
937
+ ),
938
+ ),
906
939
  ).use_readable_describe(True)
907
940
  )
908
941
 
@@ -1129,6 +1162,12 @@ class FrontendSiteSettings:
1129
1162
  self.inline_rubric_viewer_enabled = maybe_from_nullable(
1130
1163
  self.inline_rubric_viewer_enabled
1131
1164
  )
1165
+ self.submissions_page_v2_enabled = maybe_from_nullable(
1166
+ self.submissions_page_v2_enabled
1167
+ )
1168
+ self.simple_submission_mode_enabled = maybe_from_nullable(
1169
+ self.simple_submission_mode_enabled
1170
+ )
1132
1171
 
1133
1172
  def to_dict(self) -> t.Dict[str, t.Any]:
1134
1173
  res: t.Dict[str, t.Any] = {}
@@ -1428,6 +1467,14 @@ class FrontendSiteSettings:
1428
1467
  res["INLINE_RUBRIC_VIEWER_ENABLED"] = to_dict(
1429
1468
  self.inline_rubric_viewer_enabled.value
1430
1469
  )
1470
+ if self.submissions_page_v2_enabled.is_just:
1471
+ res["SUBMISSIONS_PAGE_V2_ENABLED"] = to_dict(
1472
+ self.submissions_page_v2_enabled.value
1473
+ )
1474
+ if self.simple_submission_mode_enabled.is_just:
1475
+ res["SIMPLE_SUBMISSION_MODE_ENABLED"] = to_dict(
1476
+ self.simple_submission_mode_enabled.value
1477
+ )
1431
1478
  return res
1432
1479
 
1433
1480
  @classmethod
@@ -1516,6 +1563,8 @@ class FrontendSiteSettings:
1516
1563
  assignment_description_on_teachers_submissions_page=parsed.ASSIGNMENT_DESCRIPTION_ON_TEACHERS_SUBMISSIONS_PAGE,
1517
1564
  submissions_per_page_enabled=parsed.SUBMISSIONS_PER_PAGE_ENABLED,
1518
1565
  inline_rubric_viewer_enabled=parsed.INLINE_RUBRIC_VIEWER_ENABLED,
1566
+ submissions_page_v2_enabled=parsed.SUBMISSIONS_PAGE_V2_ENABLED,
1567
+ simple_submission_mode_enabled=parsed.SIMPLE_SUBMISSION_MODE_ENABLED,
1519
1568
  )
1520
1569
  res.raw_data = d
1521
1570
  return res
@@ -21,6 +21,7 @@ from .assignment_percentage_grading_settings import (
21
21
  )
22
22
  from .assignment_points_grading_settings import AssignmentPointsGradingSettings
23
23
  from .assignment_state_enum import AssignmentStateEnum
24
+ from .assignment_submission_mode import AssignmentSubmissionMode
24
25
  from .fixed_availability import FixedAvailability
25
26
  from .fixed_grade_availability import FixedGradeAvailability
26
27
  from .submission_validator_input_data import SubmissionValidatorInputData
@@ -77,7 +78,7 @@ class PatchAssignmentData:
77
78
  #: used when `reminder_time` is `null`.
78
79
  done_type: Maybe["t.Optional[AssignmentDoneType]"] = Nothing
79
80
  #: At what time should we send the reminder emails to the graders. This
80
- #: value is not used wehn `done_type` is `null`.
81
+ #: value is not used when `done_type` is `null`.
81
82
  reminder_time: Maybe["t.Optional[datetime.datetime]"] = Nothing
82
83
  #: A list of emails that should receive an email when grading is done. This
83
84
  #: value has no effect when `done_type` is set to `null`.
@@ -86,7 +87,7 @@ class PatchAssignmentData:
86
87
  anonymized_grading: Maybe[
87
88
  "t.Optional[AssignmentAnonymizationAlgo]"
88
89
  ] = Nothing
89
- #: The file we should load first in an asignment
90
+ #: The file we should load first in an assignment
90
91
  file_to_load_first: Maybe["t.Optional[str]"] = Nothing
91
92
  #: Grading settings of this assignment.
92
93
  grading: Maybe[
@@ -99,6 +100,8 @@ class PatchAssignmentData:
99
100
  ] = Nothing
100
101
  #: The grade availability of this assignment.
101
102
  grade_availability: Maybe["FixedGradeAvailability"] = Nothing
103
+ #: The submission mode of this assignment
104
+ submission_mode: Maybe["AssignmentSubmissionMode"] = Nothing
102
105
 
103
106
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
104
107
 
@@ -238,7 +241,7 @@ class PatchAssignmentData:
238
241
  rqa.Nullable(rqa.RichValue.DateTime),
239
242
  doc=(
240
243
  "At what time should we send the reminder emails to the"
241
- " graders. This value is not used wehn `done_type` is"
244
+ " graders. This value is not used when `done_type` is"
242
245
  " `null`."
243
246
  ),
244
247
  ),
@@ -261,7 +264,7 @@ class PatchAssignmentData:
261
264
  rqa.OptionalArgument(
262
265
  "file_to_load_first",
263
266
  rqa.Nullable(rqa.SimpleValue.str),
264
- doc="The file we should load first in an asignment",
267
+ doc="The file we should load first in an assignment",
265
268
  ),
266
269
  rqa.OptionalArgument(
267
270
  "grading",
@@ -286,6 +289,11 @@ class PatchAssignmentData:
286
289
  parsers.ParserFor.make(FixedGradeAvailability),
287
290
  doc="The grade availability of this assignment.",
288
291
  ),
292
+ rqa.OptionalArgument(
293
+ "submission_mode",
294
+ rqa.EnumValue(AssignmentSubmissionMode),
295
+ doc="The submission mode of this assignment",
296
+ ),
289
297
  ).use_readable_describe(True)
290
298
  )
291
299
 
@@ -321,6 +329,7 @@ class PatchAssignmentData:
321
329
  self.grading = maybe_from_nullable(self.grading)
322
330
  self.availability = maybe_from_nullable(self.availability)
323
331
  self.grade_availability = maybe_from_nullable(self.grade_availability)
332
+ self.submission_mode = maybe_from_nullable(self.submission_mode)
324
333
 
325
334
  def to_dict(self) -> t.Dict[str, t.Any]:
326
335
  res: t.Dict[str, t.Any] = {}
@@ -378,6 +387,8 @@ class PatchAssignmentData:
378
387
  res["availability"] = to_dict(self.availability.value)
379
388
  if self.grade_availability.is_just:
380
389
  res["grade_availability"] = to_dict(self.grade_availability.value)
390
+ if self.submission_mode.is_just:
391
+ res["submission_mode"] = to_dict(self.submission_mode.value)
381
392
  return res
382
393
 
383
394
  @classmethod
@@ -411,6 +422,7 @@ class PatchAssignmentData:
411
422
  grading=parsed.grading,
412
423
  availability=parsed.availability,
413
424
  grade_availability=parsed.grade_availability,
425
+ submission_mode=parsed.submission_mode,
414
426
  )
415
427
  res.raw_data = d
416
428
  return res
@@ -0,0 +1,57 @@
1
+ """The module that defines the ``SimpleSubmissionModeEnabledSetting`` 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 SimpleSubmissionModeEnabledSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['SIMPLE_SUBMISSION_MODE_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("SIMPLE_SUBMISSION_MODE_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["SimpleSubmissionModeEnabledSetting"],
48
+ d: t.Dict[str, t.Any],
49
+ ) -> "SimpleSubmissionModeEnabledSetting":
50
+ parsed = cls.data_parser.try_parse(d)
51
+
52
+ res = cls(
53
+ name=parsed.name,
54
+ value=parsed.value,
55
+ )
56
+ res.raw_data = d
57
+ return res
@@ -235,6 +235,9 @@ from .server_time_correction_enabled_setting import (
235
235
  from .server_time_diff_tolerance_setting import ServerTimeDiffToleranceSetting
236
236
  from .server_time_sync_interval_setting import ServerTimeSyncIntervalSetting
237
237
  from .setting_token_time_setting import SettingTokenTimeSetting
238
+ from .simple_submission_mode_enabled_setting import (
239
+ SimpleSubmissionModeEnabledSetting,
240
+ )
238
241
  from .site_email_setting import SiteEmailSetting
239
242
  from .sso_infer_global_staff_role_setting import SsoInferGlobalStaffRoleSetting
240
243
  from .sso_username_decollision_enabled_setting import (
@@ -244,6 +247,9 @@ from .staged_assignment_importer_enabled_setting import (
244
247
  StagedAssignmentImporterEnabledSetting,
245
248
  )
246
249
  from .student_payment_enabled_setting import StudentPaymentEnabledSetting
250
+ from .submissions_page_v2_enabled_setting import (
251
+ SubmissionsPageV2EnabledSetting,
252
+ )
247
253
  from .submissions_per_page_enabled_setting import (
248
254
  SubmissionsPerPageEnabledSetting,
249
255
  )
@@ -364,6 +370,8 @@ SiteSettingInput = t.Union[
364
370
  SubmissionsPerPageEnabledSetting,
365
371
  InlineRubricViewerEnabledSetting,
366
372
  LtiFirstLaunchContentIdEnabledSetting,
373
+ SubmissionsPageV2EnabledSetting,
374
+ SimpleSubmissionModeEnabledSetting,
367
375
  ]
368
376
  SiteSettingInputParser = rqa.Lazy(
369
377
  lambda: make_union(
@@ -479,5 +487,7 @@ SiteSettingInputParser = rqa.Lazy(
479
487
  ParserFor.make(SubmissionsPerPageEnabledSetting),
480
488
  ParserFor.make(InlineRubricViewerEnabledSetting),
481
489
  ParserFor.make(LtiFirstLaunchContentIdEnabledSetting),
490
+ ParserFor.make(SubmissionsPageV2EnabledSetting),
491
+ ParserFor.make(SimpleSubmissionModeEnabledSetting),
482
492
  ),
483
493
  )
@@ -0,0 +1,56 @@
1
+ """The module that defines the ``SubmissionsPageV2EnabledSetting`` 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 SubmissionsPageV2EnabledSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['SUBMISSIONS_PAGE_V2_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("SUBMISSIONS_PAGE_V2_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["SubmissionsPageV2EnabledSetting"], d: t.Dict[str, t.Any]
48
+ ) -> "SubmissionsPageV2EnabledSetting":
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
@@ -26,7 +26,7 @@ class UpdatePeerFeedbackSettingsAssignmentData:
26
26
  #: Should peer feedback comments by default be approved.
27
27
  auto_approved: "bool"
28
28
  #: Should we redivide when a user submits its first submission or its last
29
- #: submission is deleted after thde deadline? If this is `False` it might
29
+ #: submission is deleted after the deadline? If this is `False` it might
30
30
  #: happen that some users are reviewed by less or more than `amount` of
31
31
  #: students.
32
32
  redivide_after_deadline: "bool" = True
@@ -61,7 +61,7 @@ class UpdatePeerFeedbackSettingsAssignmentData:
61
61
  rqa.SimpleValue.bool,
62
62
  doc=(
63
63
  "Should we redivide when a user submits its first"
64
- " submission or its last submission is deleted after thde"
64
+ " submission or its last submission is deleted after the"
65
65
  " deadline? If this is `False` it might happen that some"
66
66
  " users are reviewed by less or more than `amount` of"
67
67
  " students."
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codegrade"
3
- version = "16.1.37"
3
+ version = "16.1.39"
4
4
  description = "A client library for accessing CodeGrade"
5
5
  license = "AGPL-3.0-only OR BSD-3-Clause-Clear"
6
6
  authors = []
@@ -21,7 +21,7 @@ install_requires = \
21
21
 
22
22
  setup_kwargs = {
23
23
  'name': 'codegrade',
24
- 'version': '16.1.37',
24
+ 'version': '16.1.39',
25
25
  'description': 'A client library for accessing CodeGrade',
26
26
  'long_description': '# CodeGrade API\n\nThis library makes it easier to use the CodeGrade API. Its API allows you to\nautomate your usage of CodeGrade. We are currently still busy documenting the\nentire API, but everything that is possible in the UI of CodeGrade is also\npossible through the API.\n## Installation\nYou can install the library through [pypi](https://pypi.org/), simply run\n`python3 -m pip install codegrade`. If you want to get a dev version with support\nfor the latest features, simply email [support@codegrade.com](mailto:support@codegrade.com)\nand we\'ll provide you with a dev version.\n## Usage\nFirst, create a client:\n\n```python\nimport codegrade\n\n# Don\'t store your password in your code!\nwith codegrade.login(\n username=\'my-username\',\n password=os.getenv(\'CG_PASSWORD\'),\n tenant=\'My University\',\n) as client:\n pass\n\n# Or supply information interactively.\nwith codegrade.login_from_cli() as client:\n pass\n```\n\nNow call your endpoint and use your models:\n\n```python\nfrom codegrade.models import PatchCourseData\n\ncourses = client.course.get_all()\nfor course in courses:\n client.course.patch(\n PatchCourseData(name=course.name + \' (NEW)\'),\n course_id=course.id,\n )\n\n# Or, simply use dictionaries.\nfor course in courses:\n client.course.patch(\n {"name": course.name + \' (NEW)\'},\n course_id=course.id,\n )\n```\n\nFor the complete documentation go to\nhttps://python.api.codegrade.com.\n## Backwards compatibility\nCodeGrade is constantly upgrading its API, but we try to minimize backwards\nincompatible changes. We\'ll announce every backwards incompatible change in the\n[changelog](http://codegrade.com/changelog). A new version of the API\nclient is released with every release of CodeGrade, which is approximately every\nmonth. To upgrade simply run `pip install --upgrade codegrade`.\n## Supported python versions\nWe support python 3.6 and above, `pypy` is currently not tested but should work\njust fine.\n## License\nThe library is licensed under AGPL-3.0-only or BSD-3-Clause-Clear.',
27
27
  'author': 'None',
File without changes