codegrade 16.1.56__tar.gz → 16.1.57__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 (577) hide show
  1. {codegrade-16.1.56 → codegrade-16.1.57}/PKG-INFO +1 -1
  2. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/_just.py +9 -3
  3. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/_nothing.py +8 -0
  4. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/__init__.py +1 -1
  5. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/client.py +2 -2
  6. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/__init__.py +5 -0
  7. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/all_site_settings.py +54 -0
  8. codegrade-16.1.57/codegrade/models/always_update_pii_with_lti_setting.py +56 -0
  9. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_grader.py +38 -35
  10. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_user.py +2 -2
  11. codegrade-16.1.57/codegrade/models/hubspot_syncing_enabled_setting.py +56 -0
  12. codegrade-16.1.57/codegrade/models/name_and_email_from_nrps_only_setting.py +56 -0
  13. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/site_setting_input.py +11 -0
  14. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/user_without_group.py +7 -4
  15. {codegrade-16.1.56 → codegrade-16.1.57}/pyproject.toml +1 -1
  16. {codegrade-16.1.56 → codegrade-16.1.57}/setup.py +1 -1
  17. {codegrade-16.1.56 → codegrade-16.1.57}/README.md +0 -0
  18. {codegrade-16.1.56 → codegrade-16.1.57}/cg_dt_utils/__init__.py +0 -0
  19. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/__init__.py +0 -0
  20. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/_maybe.py +0 -0
  21. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/_type_helpers.py +0 -0
  22. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/cg_maybe_plugin.py +0 -0
  23. {codegrade-16.1.56 → codegrade-16.1.57}/cg_maybe/utils.py +0 -0
  24. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/__init__.py +0 -0
  25. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_any_value.py +0 -0
  26. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_base.py +0 -0
  27. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_convert.py +0 -0
  28. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_enum.py +0 -0
  29. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_form.py +0 -0
  30. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_lazy.py +0 -0
  31. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_list.py +0 -0
  32. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_literal.py +0 -0
  33. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_mapping.py +0 -0
  34. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_multipart.py +0 -0
  35. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_nullable.py +0 -0
  36. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_parse_utils.py +0 -0
  37. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_query.py +0 -0
  38. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_rich_value.py +0 -0
  39. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_swagger_utils.py +0 -0
  40. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_swaggerize.py +0 -0
  41. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/_utils.py +0 -0
  42. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/exceptions.py +0 -0
  43. {codegrade-16.1.56 → codegrade-16.1.57}/cg_request_args/request_args_plugin.py +0 -0
  44. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/__init__.py +0 -0
  45. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/about.py +0 -0
  46. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/assignment.py +0 -0
  47. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/auto_test.py +0 -0
  48. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/comment.py +0 -0
  49. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/course.py +0 -0
  50. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/course_price.py +0 -0
  51. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/file.py +0 -0
  52. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/git_provider.py +0 -0
  53. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/group.py +0 -0
  54. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/group_set.py +0 -0
  55. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/login_link.py +0 -0
  56. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/lti.py +0 -0
  57. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/notification.py +0 -0
  58. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/oauth_provider.py +0 -0
  59. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/oauth_token.py +0 -0
  60. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/permission.py +0 -0
  61. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/plagiarism.py +0 -0
  62. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/role.py +0 -0
  63. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/section.py +0 -0
  64. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/site_settings.py +0 -0
  65. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/snippet.py +0 -0
  66. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/sso_provider.py +0 -0
  67. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/submission.py +0 -0
  68. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/task_result.py +0 -0
  69. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/tenant.py +0 -0
  70. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/transaction.py +0 -0
  71. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/user.py +0 -0
  72. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/user_setting.py +0 -0
  73. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/_api/webhook.py +0 -0
  74. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/errors.py +0 -0
  75. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/_base_price.py +0 -0
  76. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/_saml_ui_logo_info.py +0 -0
  77. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/_submission_rubric_item_data_parser.py +0 -0
  78. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/about.py +0 -0
  79. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/abstract_role.py +0 -0
  80. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/add_users_section_data.py +0 -0
  81. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/all_auto_test_results.py +0 -0
  82. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/analytics_enabled_setting.py +0 -0
  83. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/any_auto_test_step_as_json.py +0 -0
  84. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/any_error.py +0 -0
  85. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/any_non_redacted_auto_test_step_as_json.py +0 -0
  86. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/any_redacted_auto_test_step_as_json.py +0 -0
  87. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/api_codes.py +0 -0
  88. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment.py +0 -0
  89. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_anonymization_algo.py +0 -0
  90. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_default_grading_scale_points_setting.py +0 -0
  91. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_default_grading_scale_setting.py +0 -0
  92. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_description_enabled_setting.py +0 -0
  93. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_description_on_teachers_submissions_page_setting.py +0 -0
  94. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_done_type.py +0 -0
  95. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_export_column.py +0 -0
  96. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_feedback.py +0 -0
  97. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_grading_scale_points_enabled_setting.py +0 -0
  98. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_kind.py +0 -0
  99. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_login_link.py +0 -0
  100. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_max_points_enabled_setting.py +0 -0
  101. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_peer_feedback_connection.py +0 -0
  102. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_peer_feedback_settings.py +0 -0
  103. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_percentage_decimals_setting.py +0 -0
  104. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_percentage_grading_settings.py +0 -0
  105. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_point_decimals_setting.py +0 -0
  106. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_points_grading_settings.py +0 -0
  107. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_section_timeframe.py +0 -0
  108. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_state_enum.py +0 -0
  109. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_submission_mode.py +0 -0
  110. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_template.py +0 -0
  111. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/assignment_timeframes.py +0 -0
  112. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/at_image_caching_enabled_setting.py +0 -0
  113. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test.py +0 -0
  114. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_capture_points_message_setting.py +0 -0
  115. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_checkpoint_message_setting.py +0 -0
  116. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_code_quality_message_setting.py +0 -0
  117. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_enabled_setting.py +0 -0
  118. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_fixture.py +0 -0
  119. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_global_setup_output.py +0 -0
  120. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_global_setup_script.py +0 -0
  121. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_heartbeat_interval_setting.py +0 -0
  122. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_heartbeat_max_missed_setting.py +0 -0
  123. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_io_test_message_setting.py +0 -0
  124. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_io_test_sub_message_setting.py +0 -0
  125. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_concurrent_batch_runs_setting.py +0 -0
  126. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_global_setup_time_setting.py +0 -0
  127. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_jobs_per_runner_setting.py +0 -0
  128. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_per_student_setup_time_setting.py +0 -0
  129. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_result_not_started_setting.py +0 -0
  130. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_time_command_setting.py +0 -0
  131. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_max_unit_test_metadata_length_setting.py +0 -0
  132. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_quality_comment.py +0 -0
  133. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_result.py +0 -0
  134. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_result_state.py +0 -0
  135. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_result_with_extra_data.py +0 -0
  136. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_run.py +0 -0
  137. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_run_program_message_setting.py +0 -0
  138. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_runner.py +0 -0
  139. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_runner_state.py +0 -0
  140. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_set.py +0 -0
  141. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_base.py +0 -0
  142. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_base_as_json.py +0 -0
  143. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_base_input_as_json.py +0 -0
  144. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_log_base.py +0 -0
  145. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_result.py +0 -0
  146. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_result_state.py +0 -0
  147. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_step_validation_exception.py +0 -0
  148. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_suite.py +0 -0
  149. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/auto_test_unit_test_message_setting.py +0 -0
  150. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/automatic_lti1p3_assignment_import_setting.py +0 -0
  151. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/automatic_lti_role_enabled_setting.py +0 -0
  152. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_about.py +0 -0
  153. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_auto_test_quality_comment.py +0 -0
  154. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_comment_base.py +0 -0
  155. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_comment_base_with_extended_replies.py +0 -0
  156. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_comment_base_with_normal_replies.py +0 -0
  157. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_comment_reply.py +0 -0
  158. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_course_coupon.py +0 -0
  159. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_directory.py +0 -0
  160. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_error.py +0 -0
  161. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_file.py +0 -0
  162. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_lms_capabilities.py +0 -0
  163. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_lti1p1_provider.py +0 -0
  164. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_lti1p3_provider.py +0 -0
  165. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_lti_provider.py +0 -0
  166. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_notification.py +0 -0
  167. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_release_info.py +0 -0
  168. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_rubric_item.py +0 -0
  169. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/base_tenant_coupon.py +0 -0
  170. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/blackboard_zip_upload_enabled_setting.py +0 -0
  171. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/bulk_enroll_course_data.py +0 -0
  172. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/canvas_course_id_copying_enabled_setting.py +0 -0
  173. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/cg_ignore_version.py +0 -0
  174. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/change_user_role_course_data.py +0 -0
  175. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/check_points_as_json.py +0 -0
  176. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/check_points_data.py +0 -0
  177. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/check_points_extra.py +0 -0
  178. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/check_points_input_as_json.py +0 -0
  179. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/clone_result.py +0 -0
  180. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_editor_output_viewer_title_setting.py +0 -0
  181. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_as_json.py +0 -0
  182. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_base_data.py +0 -0
  183. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_data.py +0 -0
  184. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_extra.py +0 -0
  185. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_input_as_json.py +0 -0
  186. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/code_quality_penalties.py +0 -0
  187. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/column_range.py +0 -0
  188. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/comment_base.py +0 -0
  189. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/comment_reply.py +0 -0
  190. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/comment_reply_edit.py +0 -0
  191. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/comment_reply_type.py +0 -0
  192. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/comment_type.py +0 -0
  193. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/community_library_publishing_setting.py +0 -0
  194. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/community_library_setting.py +0 -0
  195. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/connect_repository_git_provider_data.py +0 -0
  196. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/copy_auto_test_data.py +0 -0
  197. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/copy_rubric_assignment_data.py +0 -0
  198. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/coupon_data_parser.py +0 -0
  199. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/coupon_with_code.py +0 -0
  200. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/coupon_without_code.py +0 -0
  201. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course.py +0 -0
  202. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_bulk_enroll_result.py +0 -0
  203. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_bulk_register_enabled_setting.py +0 -0
  204. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_coupon.py +0 -0
  205. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_coupon_usage.py +0 -0
  206. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_gradebook_enabled_setting.py +0 -0
  207. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_gradebook_render_warning_size_setting.py +0 -0
  208. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_of_course_price.py +0 -0
  209. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_of_tenant_coupon_usage.py +0 -0
  210. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_perm_map.py +0 -0
  211. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_permission.py +0 -0
  212. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_price.py +0 -0
  213. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_register_enabled_setting.py +0 -0
  214. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_register_response.py +0 -0
  215. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_registration_link.py +0 -0
  216. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_role.py +0 -0
  217. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_role_as_json_with_perms.py +0 -0
  218. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_section.py +0 -0
  219. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_section_division.py +0 -0
  220. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_section_division_connection.py +0 -0
  221. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_section_division_user.py +0 -0
  222. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_snippet.py +0 -0
  223. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_state.py +0 -0
  224. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/course_statistics_as_json.py +0 -0
  225. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_assignment_course_data.py +0 -0
  226. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_auto_test_data.py +0 -0
  227. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_comment_data.py +0 -0
  228. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_comment_reply_data.py +0 -0
  229. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_course_data.py +0 -0
  230. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_division_section_data.py +0 -0
  231. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_group_group_set_data.py +0 -0
  232. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_group_set_course_data.py +0 -0
  233. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_lti_data.py +0 -0
  234. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_output_html_proxy_auto_test_data.py +0 -0
  235. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_proxy_submission_data.py +0 -0
  236. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_repository_git_provider_data.py +0 -0
  237. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_role_course_data.py +0 -0
  238. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_section_course_data.py +0 -0
  239. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_snippet_course_data.py +0 -0
  240. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_snippet_data.py +0 -0
  241. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_sso_provider_data.py +0 -0
  242. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/create_tenant_data.py +0 -0
  243. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/csv_large_file_limit_setting.py +0 -0
  244. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/csv_too_many_errors_limit_setting.py +0 -0
  245. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/currency.py +0 -0
  246. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_as_json.py +0 -0
  247. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_data.py +0 -0
  248. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_extra.py +0 -0
  249. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_input_as_json.py +0 -0
  250. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_log.py +0 -0
  251. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/custom_output_log_base.py +0 -0
  252. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/default_course_ta_role_setting.py +0 -0
  253. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/default_course_teacher_role_setting.py +0 -0
  254. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/default_submission_page_tab_setting.py +0 -0
  255. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/deleted_comment_reply.py +0 -0
  256. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/deletion_type.py +0 -0
  257. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/directory_with_children.py +0 -0
  258. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/disabled_setting_exception.py +0 -0
  259. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/display_grades_enabled_setting.py +0 -0
  260. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/editor_enabled_for_teachers_setting.py +0 -0
  261. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/editor_enabled_setting.py +0 -0
  262. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/email_notification_types.py +0 -0
  263. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/email_students_enabled_setting.py +0 -0
  264. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/email_users_course_data.py +0 -0
  265. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/exam_login_max_length_setting.py +0 -0
  266. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/export_assignment_csv_data.py +0 -0
  267. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/export_assignment_data.py +0 -0
  268. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/export_assignment_files_data.py +0 -0
  269. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_auto_test_result.py +0 -0
  270. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_auto_test_run.py +0 -0
  271. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_course.py +0 -0
  272. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_course_registration_link.py +0 -0
  273. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_course_section.py +0 -0
  274. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_group.py +0 -0
  275. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_job.py +0 -0
  276. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_non_deleted_comment_reply.py +0 -0
  277. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_tenant.py +0 -0
  278. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_transaction.py +0 -0
  279. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extended_work.py +0 -0
  280. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extract_file_tree_directory.py +0 -0
  281. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/extract_file_tree_file.py +0 -0
  282. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/failed_to_send_email_exception.py +0 -0
  283. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/feedback_base.py +0 -0
  284. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/feedback_threads_initially_collapsed_setting.py +0 -0
  285. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/feedback_with_replies.py +0 -0
  286. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/feedback_without_replies.py +0 -0
  287. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/file_deletion.py +0 -0
  288. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/file_rule.py +0 -0
  289. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/file_rule_input_data.py +0 -0
  290. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/file_tree.py +0 -0
  291. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/file_type.py +0 -0
  292. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/finalized_lti1p1_provider.py +0 -0
  293. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/finalized_lti1p3_provider.py +0 -0
  294. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/first_phase_lti_launch_exception.py +0 -0
  295. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/fixed_availability.py +0 -0
  296. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/fixed_grade_availability.py +0 -0
  297. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/fixture_like.py +0 -0
  298. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/fraction.py +0 -0
  299. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/frontend_site_settings.py +0 -0
  300. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/general_feedback_comment_base.py +0 -0
  301. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/general_feedback_comment_base_with_extended_replies.py +0 -0
  302. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/general_feedback_extra.py +0 -0
  303. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/git_repositories_page.py +0 -0
  304. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/git_repository_like.py +0 -0
  305. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/git_user_info.py +0 -0
  306. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/github_template_repo_enabled_setting.py +0 -0
  307. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/global_perm_map.py +0 -0
  308. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/global_permission.py +0 -0
  309. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/grade_history.py +0 -0
  310. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/grade_origin.py +0 -0
  311. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/grading_notifications_enabled_setting.py +0 -0
  312. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/group.py +0 -0
  313. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/group_not_ready_for_submission_exception.py +0 -0
  314. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/group_set.py +0 -0
  315. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/groups_enabled_setting.py +0 -0
  316. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/has_unread_notifcation_json.py +0 -0
  317. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/health_information.py +0 -0
  318. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/hide_code_editor_filetree_controls_with_only_quiz_steps_setting.py +0 -0
  319. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/hide_code_editor_output_viewer_with_only_quiz_steps_setting.py +0 -0
  320. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/hide_empty_rubric_row_description_setting.py +0 -0
  321. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/ignore_handling.py +0 -0
  322. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/ignored_files_exception.py +0 -0
  323. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/import_into_assignment_data.py +0 -0
  324. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/import_into_course_data.py +0 -0
  325. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/incremental_rubric_submission_enabled_setting.py +0 -0
  326. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/inline_feedback_comment_base.py +0 -0
  327. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/inline_feedback_comment_base_with_extended_replies.py +0 -0
  328. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/inline_feedback_extra.py +0 -0
  329. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/inline_rubric_viewer_enabled_setting.py +0 -0
  330. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/invalid_group_exception.py +0 -0
  331. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/invalid_io_cases_exception.py +0 -0
  332. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/invalid_options_exception.py +0 -0
  333. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_as_json.py +0 -0
  334. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_base_data.py +0 -0
  335. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_data.py +0 -0
  336. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_extra.py +0 -0
  337. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_input_as_json.py +0 -0
  338. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_input_case.py +0 -0
  339. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_log.py +0 -0
  340. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_option.py +0 -0
  341. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_step_log.py +0 -0
  342. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/io_test_step_log_base.py +0 -0
  343. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/is_admin_permission_enabled_setting.py +0 -0
  344. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/job.py +0 -0
  345. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/json_create_auto_test.py +0 -0
  346. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/json_create_tenant.py +0 -0
  347. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/json_patch_auto_test.py +0 -0
  348. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/json_patch_submit_types_assignment.py +0 -0
  349. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_as_json.py +0 -0
  350. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_base_data.py +0 -0
  351. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_data.py +0 -0
  352. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_extra.py +0 -0
  353. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_input_as_json.py +0 -0
  354. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_log.py +0 -0
  355. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/junit_test_log_base.py +0 -0
  356. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/jwt_access_token_expires_setting.py +0 -0
  357. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/legacy_features.py +0 -0
  358. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/line_range.py +0 -0
  359. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/linter_comment.py +0 -0
  360. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/linters_enabled_setting.py +0 -0
  361. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lms_capabilities.py +0 -0
  362. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/login_token_before_time_setting.py +0 -0
  363. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/login_user_data.py +0 -0
  364. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/logout_response.py +0 -0
  365. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/logout_user_data.py +0 -0
  366. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p1_provider.py +0 -0
  367. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p1_provider_data.py +0 -0
  368. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_nonce_and_state_validation_enabled_setting.py +0 -0
  369. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_parse_most_privileged_role_setting.py +0 -0
  370. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_prevent_nonce_reuse_enabled_setting.py +0 -0
  371. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_provider.py +0 -0
  372. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_provider_data.py +0 -0
  373. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_provider_presentation_as_json.py +0 -0
  374. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti1p3_system_role_from_context_role_setting.py +0 -0
  375. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_enabled_setting.py +0 -0
  376. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_first_launch_content_id_enabled_setting.py +0 -0
  377. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_launch_data_logging_setting.py +0 -0
  378. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_lock_date_copying_enabled_setting.py +0 -0
  379. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_provider_base.py +0 -0
  380. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/lti_unset_deadline_lock_date_enabled_setting.py +0 -0
  381. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_document_update_size_setting.py +0 -0
  382. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_dynamo_file_size_setting.py +0 -0
  383. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_dynamo_submission_size_setting.py +0 -0
  384. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_file_size_setting.py +0 -0
  385. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_large_upload_size_setting.py +0 -0
  386. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_lines_setting.py +0 -0
  387. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_normal_upload_size_setting.py +0 -0
  388. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_number_of_files_setting.py +0 -0
  389. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_plagiarism_matches_setting.py +0 -0
  390. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/max_user_setting_amount_setting.py +0 -0
  391. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/min_password_score_setting.py +0 -0
  392. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/mirror_file_result.py +0 -0
  393. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/missing_cookie_error.py +0 -0
  394. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/missing_file.py +0 -0
  395. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_allowed_initial_build_ids_setting.py +0 -0
  396. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_build_max_command_time_setting.py +0 -0
  397. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_build_output_limit_setting.py +0 -0
  398. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_copying_enabled_setting.py +0 -0
  399. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_current_initial_build_ids_setting.py +0 -0
  400. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_diff_viewer_enabled_setting.py +0 -0
  401. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_enabled_setting.py +0 -0
  402. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_initial_build_id_setting.py +0 -0
  403. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_max_dynamodb_size_setting.py +0 -0
  404. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_max_file_size_setting.py +0 -0
  405. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_max_output_files_size_setting.py +0 -0
  406. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_max_storage_size_setting.py +0 -0
  407. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_old_submission_age_setting.py +0 -0
  408. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_test_max_command_time_setting.py +0 -0
  409. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_test_output_limit_setting.py +0 -0
  410. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/new_auto_test_uncollapsing_step_output_delay_setting.py +0 -0
  411. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/no_permissions.py +0 -0
  412. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/non_deleted_comment_reply.py +0 -0
  413. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/non_finalized_lti1p1_provider.py +0 -0
  414. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/non_finalized_lti1p3_provider.py +0 -0
  415. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/non_present_preference.py +0 -0
  416. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification.py +0 -0
  417. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_comment_reply_notification_as_json.py +0 -0
  418. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_general_feedback_reply_notification_as_json.py +0 -0
  419. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_poll_time_setting.py +0 -0
  420. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_reasons.py +0 -0
  421. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_setting.py +0 -0
  422. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notification_setting_option.py +0 -0
  423. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/notifications_json.py +0 -0
  424. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/oauth_provider.py +0 -0
  425. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/oauth_token.py +0 -0
  426. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/option.py +0 -0
  427. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/options_input_data.py +0 -0
  428. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/output_viewer_animation_limit_lines_count_setting.py +0 -0
  429. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/parse_api_exception.py +0 -0
  430. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch1_p1_provider_lti_data.py +0 -0
  431. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch1_p3_provider_lti_data.py +0 -0
  432. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_all_notification_data.py +0 -0
  433. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_assignment_data.py +0 -0
  434. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_auto_test_data.py +0 -0
  435. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_comment_reply_data.py +0 -0
  436. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_course_data.py +0 -0
  437. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_grader_submission_data.py +0 -0
  438. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_notification_data.py +0 -0
  439. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_notification_setting_user_setting_data.py +0 -0
  440. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_provider_lti_data.py +0 -0
  441. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_role_course_data.py +0 -0
  442. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_role_data.py +0 -0
  443. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_role_tenant_data.py +0 -0
  444. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_rubric_category_type_assignment_data.py +0 -0
  445. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_rubric_result_submission_data.py +0 -0
  446. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_section_data.py +0 -0
  447. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_settings_tenant_data.py +0 -0
  448. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_site_settings_data.py +0 -0
  449. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_snippet_course_data.py +0 -0
  450. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_snippet_data.py +0 -0
  451. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_submission_data.py +0 -0
  452. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_submit_types_assignment_data.py +0 -0
  453. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_tenant_data.py +0 -0
  454. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_ui_preference_user_setting_data.py +0 -0
  455. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/patch_user_data.py +0 -0
  456. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/pay_with_coupon_course_price_data.py +0 -0
  457. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/pearson_templates_setting.py +0 -0
  458. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/peer_feedback_enabled_setting.py +0 -0
  459. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/permission_exception.py +0 -0
  460. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_bulk_export_enabled_setting.py +0 -0
  461. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_bulk_export_max_cases_setting.py +0 -0
  462. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_case.py +0 -0
  463. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_pdf_export_enabled_setting.py +0 -0
  464. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_run.py +0 -0
  465. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_run_plagiarism_assignment_as_json.py +0 -0
  466. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_run_plagiarism_course_as_json.py +0 -0
  467. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/plagiarism_state.py +0 -0
  468. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/post_oauth_token_data.py +0 -0
  469. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/present_preference.py +0 -0
  470. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/proxy.py +0 -0
  471. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/put_description_assignment_data.py +0 -0
  472. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/put_enroll_link_course_data.py +0 -0
  473. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/put_price_course_data.py +0 -0
  474. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/put_price_tenant_data.py +0 -0
  475. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/put_rubric_assignment_data.py +0 -0
  476. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/quality_comment_severity.py +0 -0
  477. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/quality_comments_in_code_editor_setting.py +0 -0
  478. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/quality_test_log.py +0 -0
  479. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/quality_test_log_base.py +0 -0
  480. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/register_enabled_setting.py +0 -0
  481. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/register_user_data.py +0 -0
  482. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/register_user_with_link_course_data.py +0 -0
  483. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/release_info.py +0 -0
  484. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/release_message_max_time_setting.py +0 -0
  485. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rename_group_group_data.py +0 -0
  486. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/render_html_enabled_setting.py +0 -0
  487. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/repository_connection_limit_reached_exception.py +0 -0
  488. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/reset_token_time_setting.py +0 -0
  489. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_get_auto_test_get.py +0 -0
  490. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_get_task_result_get_all.py +0 -0
  491. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_post_login_link_login.py +0 -0
  492. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_post_section_create_division.py +0 -0
  493. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_post_user_login.py +0 -0
  494. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/result_data_post_user_register.py +0 -0
  495. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/role_as_json_with_perms.py +0 -0
  496. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/root_file_trees_json.py +0 -0
  497. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_description_type.py +0 -0
  498. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_enabled_for_teacher_on_submissions_page_setting.py +0 -0
  499. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_item.py +0 -0
  500. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_item_input_as_json.py +0 -0
  501. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_lock_reason.py +0 -0
  502. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_row_base.py +0 -0
  503. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_row_base_input_as_json.py +0 -0
  504. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubric_row_base_input_base_as_json.py +0 -0
  505. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rubrics_enabled_setting.py +0 -0
  506. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/rule_type.py +0 -0
  507. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/run_program_as_json.py +0 -0
  508. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/run_program_data.py +0 -0
  509. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/run_program_extra.py +0 -0
  510. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/run_program_input_as_json.py +0 -0
  511. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/run_program_log.py +0 -0
  512. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/saml2_provider_json.py +0 -0
  513. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/saml_ui_info.py +0 -0
  514. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/sections_in_submission_list_enabled_setting.py +0 -0
  515. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/send_registration_email_setting.py +0 -0
  516. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/server_time_correction_enabled_setting.py +0 -0
  517. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/server_time_diff_tolerance_setting.py +0 -0
  518. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/server_time_sync_interval_setting.py +0 -0
  519. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/setting_token_time_setting.py +0 -0
  520. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/setup_oauth_result.py +0 -0
  521. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/simple_submission_mode_enabled_setting.py +0 -0
  522. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/simple_submission_navigate_to_latest_editor_session_setting.py +0 -0
  523. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/site_email_setting.py +0 -0
  524. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/snippet.py +0 -0
  525. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/sso_infer_global_staff_role_setting.py +0 -0
  526. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/sso_username_decollision_enabled_setting.py +0 -0
  527. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/staged_assignment_importer_enabled_setting.py +0 -0
  528. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/start_payment_course_price_close_tab_data.py +0 -0
  529. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/start_payment_course_price_data.py +0 -0
  530. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/start_payment_course_price_redirect_data.py +0 -0
  531. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/started_transaction.py +0 -0
  532. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/student_payment_enabled_setting.py +0 -0
  533. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/submission_validator_input_data.py +0 -0
  534. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/submissions_per_page_enabled_setting.py +0 -0
  535. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/task_result_state.py +0 -0
  536. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tax_behavior.py +0 -0
  537. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant.py +0 -0
  538. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_coupon.py +0 -0
  539. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_coupon_usage.py +0 -0
  540. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_coupon_with_code.py +0 -0
  541. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_coupon_without_code.py +0 -0
  542. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_course_statistics.py +0 -0
  543. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_of_tenant_price.py +0 -0
  544. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_permissions.py +0 -0
  545. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_price.py +0 -0
  546. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_role_as_json_with_perms.py +0 -0
  547. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/tenant_statistics.py +0 -0
  548. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/test_submission_copying_on_import_enabled_setting.py +0 -0
  549. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/timed_availability.py +0 -0
  550. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/timeframe_like.py +0 -0
  551. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/token_revoked_exception.py +0 -0
  552. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/transaction.py +0 -0
  553. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/transaction_state.py +0 -0
  554. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/types.py +0 -0
  555. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/update_peer_feedback_settings_assignment_data.py +0 -0
  556. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/update_set_auto_test_data.py +0 -0
  557. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/update_suite_auto_test_base_data.py +0 -0
  558. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/update_suite_auto_test_data.py +0 -0
  559. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/upgraded_lti_provider_exception.py +0 -0
  560. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/upload_submission_assignment_data.py +0 -0
  561. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/user.py +0 -0
  562. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/user_course.py +0 -0
  563. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/user_info_with_role.py +0 -0
  564. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/user_input.py +0 -0
  565. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/weak_password_exception.py +0 -0
  566. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/weak_password_feedback.py +0 -0
  567. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/webhook_base.py +0 -0
  568. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/webhook_configuration_disabled_as_json.py +0 -0
  569. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/webhook_configuration_enabled_as_json.py +0 -0
  570. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/work.py +0 -0
  571. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/work_origin.py +0 -0
  572. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/work_rubric_item.py +0 -0
  573. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/work_rubric_result_as_json.py +0 -0
  574. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/models/work_rubric_result_points_as_json.py +0 -0
  575. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/parsers.py +0 -0
  576. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/py.typed +0 -0
  577. {codegrade-16.1.56 → codegrade-16.1.57}/codegrade/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: codegrade
3
- Version: 16.1.56
3
+ Version: 16.1.57
4
4
  Summary: A client library for accessing CodeGrade
5
5
  License: AGPL-3.0-only OR BSD-3-Clause-Clear
6
6
  Requires-Python: >=3.8.0,<4.0
@@ -1,11 +1,9 @@
1
1
  """This module implements the ``Just`` part of the ``Maybe`` monad.
2
-
3
-
4
2
  """
5
3
  import os
6
4
  import typing as t
7
5
 
8
- from ._nothing import Nothing
6
+ from ._nothing import Nothing, _Nothing
9
7
  from ._type_helpers import Final, Literal
10
8
  from ._type_helpers import SupportsLessThan as _SupportsLessThan
11
9
  from ._type_helpers import SupportsGreaterOrEqual as _SupportsGreaterOrEqual
@@ -344,6 +342,14 @@ class Just(t.Generic[_T]):
344
342
  return self.value == other.value
345
343
  return NotImplemented
346
344
 
345
+ def __lt__(self, other: object) -> bool:
346
+ if isinstance(other, Just):
347
+ return self.value < other.value
348
+ elif isinstance(other, _Nothing):
349
+ return False
350
+ return NotImplemented
351
+
352
+
347
353
  def ne( # pylint: disable=invalid-name
348
354
  self: 'Just[_Y]',
349
355
  val: _Y,
@@ -116,6 +116,14 @@ class _Nothing(t.Generic[_T]):
116
116
  return True
117
117
  return NotImplemented
118
118
 
119
+ def __lt__(self, other: object) -> bool:
120
+ if isinstance(other, _Nothing):
121
+ return False
122
+ from ._just import Just # pylint: disable=import-outside-toplevel
123
+ if isinstance(other, Just):
124
+ return True
125
+ return NotImplemented
126
+
119
127
  def __structlog__(self) -> t.Mapping[str, object]:
120
128
  return {'type': 'Nothing'}
121
129
 
@@ -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.56"
10
+ __version__ = "16.1.57"
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.56",
529
+ "User-Agent": "CodeGradeAPI/16.1.57",
530
530
  },
531
531
  follow_redirects=True,
532
532
  )
@@ -546,7 +546,7 @@ class AuthenticatedClient(_BaseClient):
546
546
  base_url=self.base_url,
547
547
  headers={
548
548
  "Authorization": f"Bearer {self.token}",
549
- "User-Agent": "CodeGradeAPI/16.1.56",
549
+ "User-Agent": "CodeGradeAPI/16.1.57",
550
550
  },
551
551
  follow_redirects=True,
552
552
  )
@@ -13,6 +13,7 @@ from .abstract_role import AbstractRole
13
13
  from .add_users_section_data import AddUsersSectionData
14
14
  from .all_auto_test_results import AllAutoTestResults
15
15
  from .all_site_settings import AllSiteSettings
16
+ from .always_update_pii_with_lti_setting import AlwaysUpdatePiiWithLtiSetting
16
17
  from .analytics_enabled_setting import AnalyticsEnabledSetting
17
18
  from .any_auto_test_step_as_json import AnyAutoTestStepAsJSON
18
19
  from .any_error import AnyError
@@ -348,6 +349,7 @@ from .hide_code_editor_output_viewer_with_only_quiz_steps_setting import (
348
349
  from .hide_empty_rubric_row_description_setting import (
349
350
  HideEmptyRubricRowDescriptionSetting,
350
351
  )
352
+ from .hubspot_syncing_enabled_setting import HubspotSyncingEnabledSetting
351
353
  from .ignore_handling import IgnoreHandling
352
354
  from .ignored_files_exception import IgnoredFilesException
353
355
  from .import_into_assignment_data import ImportIntoAssignmentData
@@ -446,6 +448,9 @@ from .min_password_score_setting import MinPasswordScoreSetting
446
448
  from .mirror_file_result import MirrorFileResult
447
449
  from .missing_cookie_error import MissingCookieError
448
450
  from .missing_file import MissingFile
451
+ from .name_and_email_from_nrps_only_setting import (
452
+ NameAndEmailFromNrpsOnlySetting,
453
+ )
449
454
  from .new_auto_test_allowed_initial_build_ids_setting import (
450
455
  NewAutoTestAllowedInitialBuildIdsSetting,
451
456
  )
@@ -147,6 +147,14 @@ class AllSiteSettings(FrontendSiteSettings):
147
147
  #: Enabling this prevents replay attacks. If unsure, consult with the
148
148
  #: Security Officer before disabling.
149
149
  lti_1p3_prevent_nonce_reuse_enabled: Maybe["bool"] = Nothing
150
+ #: Do not store names and emails of users, but always retrieve them through
151
+ #: NRPS.
152
+ name_and_email_from_nrps_only: Maybe["bool"] = Nothing
153
+ #: Should we always update names and emails on LTI launches, or just when
154
+ #: indicated and on the first launch.
155
+ always_update_pii_with_lti: Maybe["bool"] = Nothing
156
+ #: Should we sync teachers to Hubspot.
157
+ hubspot_syncing_enabled: Maybe["bool"] = Nothing
150
158
 
151
159
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
152
160
 
@@ -492,6 +500,28 @@ class AllSiteSettings(FrontendSiteSettings):
492
500
  " Officer before disabling."
493
501
  ),
494
502
  ),
503
+ rqa.OptionalArgument(
504
+ "NAME_AND_EMAIL_FROM_NRPS_ONLY",
505
+ rqa.SimpleValue.bool,
506
+ doc=(
507
+ "Do not store names and emails of users, but always"
508
+ " retrieve them through NRPS."
509
+ ),
510
+ ),
511
+ rqa.OptionalArgument(
512
+ "ALWAYS_UPDATE_PII_WITH_LTI",
513
+ rqa.SimpleValue.bool,
514
+ doc=(
515
+ "Should we always update names and emails on LTI"
516
+ " launches, or just when indicated and on the first"
517
+ " launch."
518
+ ),
519
+ ),
520
+ rqa.OptionalArgument(
521
+ "HUBSPOT_SYNCING_ENABLED",
522
+ rqa.SimpleValue.bool,
523
+ doc="Should we sync teachers to Hubspot.",
524
+ ),
495
525
  )
496
526
  ).use_readable_describe(True)
497
527
  )
@@ -604,6 +634,15 @@ class AllSiteSettings(FrontendSiteSettings):
604
634
  self.lti_1p3_prevent_nonce_reuse_enabled = maybe_from_nullable(
605
635
  self.lti_1p3_prevent_nonce_reuse_enabled
606
636
  )
637
+ self.name_and_email_from_nrps_only = maybe_from_nullable(
638
+ self.name_and_email_from_nrps_only
639
+ )
640
+ self.always_update_pii_with_lti = maybe_from_nullable(
641
+ self.always_update_pii_with_lti
642
+ )
643
+ self.hubspot_syncing_enabled = maybe_from_nullable(
644
+ self.hubspot_syncing_enabled
645
+ )
607
646
 
608
647
  def to_dict(self) -> t.Dict[str, t.Any]:
609
648
  res: t.Dict[str, t.Any] = {}
@@ -1089,6 +1128,18 @@ class AllSiteSettings(FrontendSiteSettings):
1089
1128
  res["LTI_1P3_PREVENT_NONCE_REUSE_ENABLED"] = to_dict(
1090
1129
  self.lti_1p3_prevent_nonce_reuse_enabled.value
1091
1130
  )
1131
+ if self.name_and_email_from_nrps_only.is_just:
1132
+ res["NAME_AND_EMAIL_FROM_NRPS_ONLY"] = to_dict(
1133
+ self.name_and_email_from_nrps_only.value
1134
+ )
1135
+ if self.always_update_pii_with_lti.is_just:
1136
+ res["ALWAYS_UPDATE_PII_WITH_LTI"] = to_dict(
1137
+ self.always_update_pii_with_lti.value
1138
+ )
1139
+ if self.hubspot_syncing_enabled.is_just:
1140
+ res["HUBSPOT_SYNCING_ENABLED"] = to_dict(
1141
+ self.hubspot_syncing_enabled.value
1142
+ )
1092
1143
  return res
1093
1144
 
1094
1145
  @classmethod
@@ -1224,6 +1275,9 @@ class AllSiteSettings(FrontendSiteSettings):
1224
1275
  default_course_ta_role=parsed.DEFAULT_COURSE_TA_ROLE,
1225
1276
  lti_1p3_nonce_and_state_validation_enabled=parsed.LTI_1P3_NONCE_AND_STATE_VALIDATION_ENABLED,
1226
1277
  lti_1p3_prevent_nonce_reuse_enabled=parsed.LTI_1P3_PREVENT_NONCE_REUSE_ENABLED,
1278
+ name_and_email_from_nrps_only=parsed.NAME_AND_EMAIL_FROM_NRPS_ONLY,
1279
+ always_update_pii_with_lti=parsed.ALWAYS_UPDATE_PII_WITH_LTI,
1280
+ hubspot_syncing_enabled=parsed.HUBSPOT_SYNCING_ENABLED,
1227
1281
  )
1228
1282
  res.raw_data = d
1229
1283
  return res
@@ -0,0 +1,56 @@
1
+ """The module that defines the ``AlwaysUpdatePiiWithLtiSetting`` 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 AlwaysUpdatePiiWithLtiSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['ALWAYS_UPDATE_PII_WITH_LTI']"
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("ALWAYS_UPDATE_PII_WITH_LTI"),
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["AlwaysUpdatePiiWithLtiSetting"], d: t.Dict[str, t.Any]
48
+ ) -> "AlwaysUpdatePiiWithLtiSetting":
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
@@ -9,16 +9,13 @@ from dataclasses import dataclass, field
9
9
  import cg_request_args as rqa
10
10
 
11
11
  from ..utils import to_dict
12
+ from .user_without_group import UserWithoutGroup
12
13
 
13
14
 
14
15
  @dataclass
15
- class AssignmentGrader:
16
+ class AssignmentGrader(UserWithoutGroup):
16
17
  """A grader for an assignment."""
17
18
 
18
- #: The id of the grader.
19
- id: "int"
20
- #: The name of the grader
21
- name: "str"
22
19
  #: The division weight of the grader, if no division is setup this will be
23
20
  #: 0.
24
21
  weight: "float"
@@ -29,43 +26,38 @@ class AssignmentGrader:
29
26
  raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
30
27
 
31
28
  data_parser: t.ClassVar = rqa.Lazy(
32
- lambda: rqa.FixedMapping(
33
- rqa.RequiredArgument(
34
- "id",
35
- rqa.SimpleValue.int,
36
- doc="The id of the grader.",
37
- ),
38
- rqa.RequiredArgument(
39
- "name",
40
- rqa.SimpleValue.str,
41
- doc="The name of the grader",
42
- ),
43
- rqa.RequiredArgument(
44
- "weight",
45
- rqa.SimpleValue.float,
46
- doc=(
47
- "The division weight of the grader, if no division is"
48
- " setup this will be 0."
29
+ lambda: UserWithoutGroup.data_parser.parser.combine(
30
+ rqa.FixedMapping(
31
+ rqa.RequiredArgument(
32
+ "weight",
33
+ rqa.SimpleValue.float,
34
+ doc=(
35
+ "The division weight of the grader, if no division is"
36
+ " setup this will be 0."
37
+ ),
49
38
  ),
50
- ),
51
- rqa.RequiredArgument(
52
- "done",
53
- rqa.SimpleValue.bool,
54
- doc=(
55
- "Did this grader indicate that grading has finished? NOTE:"
56
- " This field will be removed or changed in a future"
57
- " release."
39
+ rqa.RequiredArgument(
40
+ "done",
41
+ rqa.SimpleValue.bool,
42
+ doc=(
43
+ "Did this grader indicate that grading has finished?"
44
+ " NOTE: This field will be removed or changed in a"
45
+ " future release."
46
+ ),
58
47
  ),
59
- ),
48
+ )
60
49
  ).use_readable_describe(True)
61
50
  )
62
51
 
63
52
  def to_dict(self) -> t.Dict[str, t.Any]:
64
53
  res: t.Dict[str, t.Any] = {
65
- "id": to_dict(self.id),
66
- "name": to_dict(self.name),
67
54
  "weight": to_dict(self.weight),
68
55
  "done": to_dict(self.done),
56
+ "id": to_dict(self.id),
57
+ "name": to_dict(self.name),
58
+ "username": to_dict(self.username),
59
+ "is_test_student": to_dict(self.is_test_student),
60
+ "tenant_id": to_dict(self.tenant_id),
69
61
  }
70
62
  return res
71
63
 
@@ -76,10 +68,21 @@ class AssignmentGrader:
76
68
  parsed = cls.data_parser.try_parse(d)
77
69
 
78
70
  res = cls(
79
- id=parsed.id,
80
- name=parsed.name,
81
71
  weight=parsed.weight,
82
72
  done=parsed.done,
73
+ id=parsed.id,
74
+ name=parsed.name,
75
+ username=parsed.username,
76
+ is_test_student=parsed.is_test_student,
77
+ tenant_id=parsed.tenant_id,
83
78
  )
84
79
  res.raw_data = d
85
80
  return res
81
+
82
+
83
+ import os
84
+
85
+ if os.getenv("CG_GENERATING_DOCS", "False").lower() in ("", "true"):
86
+ # fmt: off
87
+ pass
88
+ # fmt: on
@@ -25,7 +25,7 @@ class ExtendedUser(User):
25
25
 
26
26
  #: The email of the user. This will only be provided for the currently
27
27
  #: logged in user.
28
- email: "str"
28
+ email: "t.Optional[str]"
29
29
  #: Can this user see hidden assignments at least in one course.
30
30
  hidden: "bool"
31
31
  #: The payments this user did. This will only be provided for the currently
@@ -44,7 +44,7 @@ class ExtendedUser(User):
44
44
  rqa.FixedMapping(
45
45
  rqa.RequiredArgument(
46
46
  "email",
47
- rqa.SimpleValue.str,
47
+ rqa.Nullable(rqa.SimpleValue.str),
48
48
  doc=(
49
49
  "The email of the user. This will only be provided for"
50
50
  " the currently logged in user."
@@ -0,0 +1,56 @@
1
+ """The module that defines the ``HubspotSyncingEnabledSetting`` 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 HubspotSyncingEnabledSetting:
16
+ """ """
17
+
18
+ name: "t.Literal['HUBSPOT_SYNCING_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("HUBSPOT_SYNCING_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["HubspotSyncingEnabledSetting"], d: t.Dict[str, t.Any]
48
+ ) -> "HubspotSyncingEnabledSetting":
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
@@ -0,0 +1,56 @@
1
+ """The module that defines the ``NameAndEmailFromNrpsOnlySetting`` 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 NameAndEmailFromNrpsOnlySetting:
16
+ """ """
17
+
18
+ name: "t.Literal['NAME_AND_EMAIL_FROM_NRPS_ONLY']"
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("NAME_AND_EMAIL_FROM_NRPS_ONLY"),
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["NameAndEmailFromNrpsOnlySetting"], d: t.Dict[str, t.Any]
48
+ ) -> "NameAndEmailFromNrpsOnlySetting":
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
@@ -10,6 +10,7 @@ import cg_request_args as rqa
10
10
 
11
11
  from ..parsers import ParserFor, make_union
12
12
  from ..utils import to_dict
13
+ from .always_update_pii_with_lti_setting import AlwaysUpdatePiiWithLtiSetting
13
14
  from .analytics_enabled_setting import AnalyticsEnabledSetting
14
15
  from .assignment_default_grading_scale_points_setting import (
15
16
  AssignmentDefaultGradingScalePointsSetting,
@@ -137,6 +138,7 @@ from .hide_code_editor_output_viewer_with_only_quiz_steps_setting import (
137
138
  from .hide_empty_rubric_row_description_setting import (
138
139
  HideEmptyRubricRowDescriptionSetting,
139
140
  )
141
+ from .hubspot_syncing_enabled_setting import HubspotSyncingEnabledSetting
140
142
  from .incremental_rubric_submission_enabled_setting import (
141
143
  IncrementalRubricSubmissionEnabledSetting,
142
144
  )
@@ -183,6 +185,9 @@ from .max_number_of_files_setting import MaxNumberOfFilesSetting
183
185
  from .max_plagiarism_matches_setting import MaxPlagiarismMatchesSetting
184
186
  from .max_user_setting_amount_setting import MaxUserSettingAmountSetting
185
187
  from .min_password_score_setting import MinPasswordScoreSetting
188
+ from .name_and_email_from_nrps_only_setting import (
189
+ NameAndEmailFromNrpsOnlySetting,
190
+ )
186
191
  from .new_auto_test_allowed_initial_build_ids_setting import (
187
192
  NewAutoTestAllowedInitialBuildIdsSetting,
188
193
  )
@@ -412,6 +417,9 @@ SiteSettingInput = t.Union[
412
417
  Lti1p3PreventNonceReuseEnabledSetting,
413
418
  DefaultSubmissionPageTabSetting,
414
419
  AnalyticsEnabledSetting,
420
+ NameAndEmailFromNrpsOnlySetting,
421
+ AlwaysUpdatePiiWithLtiSetting,
422
+ HubspotSyncingEnabledSetting,
415
423
  ]
416
424
  SiteSettingInputParser = rqa.Lazy(
417
425
  lambda: make_union(
@@ -541,5 +549,8 @@ SiteSettingInputParser = rqa.Lazy(
541
549
  ParserFor.make(Lti1p3PreventNonceReuseEnabledSetting),
542
550
  ParserFor.make(DefaultSubmissionPageTabSetting),
543
551
  ParserFor.make(AnalyticsEnabledSetting),
552
+ ParserFor.make(NameAndEmailFromNrpsOnlySetting),
553
+ ParserFor.make(AlwaysUpdatePiiWithLtiSetting),
554
+ ParserFor.make(HubspotSyncingEnabledSetting),
544
555
  ),
545
556
  )
@@ -18,8 +18,9 @@ class UserWithoutGroup:
18
18
  #: The is the id of this user
19
19
  id: "int"
20
20
  #: The fullname of the user. This might contain a first and last name,
21
- #: however this is not guaranteed.
22
- name: "str"
21
+ #: however this is not guaranteed. This might be None if the PII for this
22
+ #: user cannot be retrieved anymore.
23
+ name: "t.Optional[str]"
23
24
  #: The username of this user.
24
25
  username: "str"
25
26
  #: Is this user a test student.
@@ -38,10 +39,12 @@ class UserWithoutGroup:
38
39
  ),
39
40
  rqa.RequiredArgument(
40
41
  "name",
41
- rqa.SimpleValue.str,
42
+ rqa.Nullable(rqa.SimpleValue.str),
42
43
  doc=(
43
44
  "The fullname of the user. This might contain a first and"
44
- " last name, however this is not guaranteed."
45
+ " last name, however this is not guaranteed. This might be"
46
+ " None if the PII for this user cannot be retrieved"
47
+ " anymore."
45
48
  ),
46
49
  ),
47
50
  rqa.RequiredArgument(
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "codegrade"
3
- version = "16.1.56"
3
+ version = "16.1.57"
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.56',
24
+ 'version': '16.1.57',
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