codegrade 16.1.57__tar.gz → 16.1.60__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codegrade-16.1.57 → codegrade-16.1.60}/PKG-INFO +1 -1
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_convert.py +27 -11
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/__init__.py +1 -1
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/__init__.py +1 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/course.py +4 -4
- codegrade-16.1.60/codegrade/_api/saml.py +79 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/client.py +14 -2
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/__init__.py +6 -1
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/all_site_settings.py +10 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/frontend_site_settings.py +41 -0
- codegrade-16.1.60/codegrade/models/hide_no_deadline_enabled_setting.py +56 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_login_link_login.py +12 -2
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_user_login.py +12 -2
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_user_register.py +12 -2
- codegrade-16.1.60/codegrade/models/retry_group_submission_grade_passback_enabled_setting.py +59 -0
- codegrade-16.1.60/codegrade/models/session_restrictions.py +58 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/site_setting_input.py +8 -0
- codegrade-16.1.60/codegrade/models/user_login_response.py +73 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/pyproject.toml +1 -1
- {codegrade-16.1.57 → codegrade-16.1.60}/setup.py +1 -1
- codegrade-16.1.57/codegrade/models/course_register_response.py +0 -51
- {codegrade-16.1.57 → codegrade-16.1.60}/README.md +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_dt_utils/__init__.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/__init__.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_just.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_maybe.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_nothing.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/_type_helpers.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/cg_maybe_plugin.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_maybe/utils.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/__init__.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_any_value.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_enum.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_form.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_lazy.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_list.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_literal.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_mapping.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_multipart.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_nullable.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_parse_utils.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_query.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_rich_value.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_swagger_utils.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_swaggerize.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/_utils.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/exceptions.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/cg_request_args/request_args_plugin.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/about.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/assignment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/auto_test.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/comment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/course_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/file.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/git_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/group.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/group_set.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/login_link.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/lti.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/notification.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/oauth_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/oauth_token.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/permission.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/plagiarism.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/role.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/section.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/site_settings.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/snippet.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/sso_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/submission.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/task_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/tenant.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/transaction.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/user.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/user_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/_api/webhook.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/errors.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_base_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_saml_ui_logo_info.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/_submission_rubric_item_data_parser.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/about.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/abstract_role.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/add_users_section_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/all_auto_test_results.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/always_update_pii_with_lti_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/analytics_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_auto_test_step_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_error.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_non_redacted_auto_test_step_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/any_redacted_auto_test_step_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/api_codes.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_anonymization_algo.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_default_grading_scale_points_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_default_grading_scale_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_description_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_description_on_teachers_submissions_page_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_done_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_export_column.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_feedback.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_grader.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_grading_scale_points_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_kind.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_login_link.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_max_points_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_peer_feedback_connection.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_peer_feedback_settings.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_percentage_decimals_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_percentage_grading_settings.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_point_decimals_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_points_grading_settings.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_section_timeframe.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_state_enum.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_submission_mode.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_template.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/assignment_timeframes.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/at_image_caching_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_capture_points_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_checkpoint_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_code_quality_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_fixture.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_global_setup_output.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_global_setup_script.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_heartbeat_interval_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_heartbeat_max_missed_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_io_test_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_io_test_sub_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_concurrent_batch_runs_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_global_setup_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_jobs_per_runner_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_per_student_setup_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_result_not_started_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_time_command_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_max_unit_test_metadata_length_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_quality_comment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_result_with_extra_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_run.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_run_program_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_runner.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_runner_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_set.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_base_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_log_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_result_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_step_validation_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_suite.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/auto_test_unit_test_message_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/automatic_lti1p3_assignment_import_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/automatic_lti_role_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_about.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_auto_test_quality_comment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base_with_extended_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_base_with_normal_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_comment_reply.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_course_coupon.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_directory.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_error.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_file.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lms_capabilities.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti1p1_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti1p3_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_lti_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_notification.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_release_info.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_rubric_item.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/base_tenant_coupon.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/blackboard_zip_upload_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/bulk_enroll_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/canvas_course_id_copying_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/cg_ignore_version.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/change_user_role_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/check_points_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/clone_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_editor_output_viewer_title_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_base_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/code_quality_penalties.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/column_range.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply_edit.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_reply_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/comment_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/community_library_publishing_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/community_library_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/connect_repository_git_provider_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/copy_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/copy_rubric_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_data_parser.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_with_code.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/coupon_without_code.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_bulk_enroll_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_bulk_register_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_coupon.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_coupon_usage.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_gradebook_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_gradebook_render_warning_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_of_course_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_of_tenant_coupon_usage.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_perm_map.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_permission.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_register_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_registration_link.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_role.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_role_as_json_with_perms.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division_connection.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_section_division_user.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_snippet.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/course_statistics_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_assignment_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_comment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_comment_reply_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_division_section_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_group_group_set_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_group_set_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_lti_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_output_html_proxy_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_proxy_submission_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_repository_git_provider_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_role_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_section_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_snippet_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_snippet_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_sso_provider_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/create_tenant_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/csv_large_file_limit_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/csv_too_many_errors_limit_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/currency.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/custom_output_log_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_course_ta_role_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_course_teacher_role_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/default_submission_page_tab_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/deleted_comment_reply.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/deletion_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/directory_with_children.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/disabled_setting_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/display_grades_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/editor_enabled_for_teachers_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/editor_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_notification_types.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_students_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/email_users_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/exam_login_max_length_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_csv_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/export_assignment_files_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_auto_test_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_auto_test_run.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course_registration_link.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_course_section.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_group.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_job.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_non_deleted_comment_reply.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_tenant.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_transaction.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_user.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extended_work.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extract_file_tree_directory.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/extract_file_tree_file.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/failed_to_send_email_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_threads_initially_collapsed_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_with_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/feedback_without_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_deletion.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_rule.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_rule_input_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_tree.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/file_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/finalized_lti1p1_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/finalized_lti1p3_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/first_phase_lti_launch_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixed_availability.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixed_grade_availability.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fixture_like.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/fraction.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_comment_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_comment_base_with_extended_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/general_feedback_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_repositories_page.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_repository_like.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/git_user_info.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/github_template_repo_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/global_perm_map.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/global_permission.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grade_history.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grade_origin.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/grading_notifications_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group_not_ready_for_submission_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/group_set.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/groups_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/has_unread_notifcation_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/health_information.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_code_editor_filetree_controls_with_only_quiz_steps_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_code_editor_output_viewer_with_only_quiz_steps_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hide_empty_rubric_row_description_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/hubspot_syncing_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/ignore_handling.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/ignored_files_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/import_into_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/import_into_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/incremental_rubric_submission_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_comment_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_comment_base_with_extended_replies.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_feedback_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/inline_rubric_viewer_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_group_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_io_cases_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/invalid_options_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_base_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_input_case.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_option.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_step_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/io_test_step_log_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/is_admin_permission_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/job.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_create_auto_test.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_create_tenant.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_patch_auto_test.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/json_patch_submit_types_assignment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_base_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/junit_test_log_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/jwt_access_token_expires_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/legacy_features.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/line_range.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/linter_comment.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/linters_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lms_capabilities.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/login_token_before_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/login_user_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/logout_response.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/logout_user_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p1_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p1_provider_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_nonce_and_state_validation_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_parse_most_privileged_role_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_prevent_nonce_reuse_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_provider_presentation_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti1p3_system_role_from_context_role_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_first_launch_content_id_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_launch_data_logging_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_lock_date_copying_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_provider_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/lti_unset_deadline_lock_date_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_document_update_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_dynamo_file_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_dynamo_submission_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_file_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_large_upload_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_lines_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_normal_upload_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_number_of_files_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_plagiarism_matches_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/max_user_setting_amount_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/min_password_score_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/mirror_file_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/missing_cookie_error.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/missing_file.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/name_and_email_from_nrps_only_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_allowed_initial_build_ids_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_build_max_command_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_build_output_limit_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_copying_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_current_initial_build_ids_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_diff_viewer_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_initial_build_id_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_dynamodb_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_file_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_output_files_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_max_storage_size_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_old_submission_age_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_test_max_command_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_test_output_limit_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/new_auto_test_uncollapsing_step_output_delay_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/no_permissions.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_deleted_comment_reply.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_finalized_lti1p1_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_finalized_lti1p3_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/non_present_preference.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_comment_reply_notification_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_general_feedback_reply_notification_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_poll_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_reasons.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notification_setting_option.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/notifications_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/oauth_provider.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/oauth_token.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/option.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/options_input_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/output_viewer_animation_limit_lines_count_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/parse_api_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch1_p1_provider_lti_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch1_p3_provider_lti_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_all_notification_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_comment_reply_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_grader_submission_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_notification_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_notification_setting_user_setting_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_provider_lti_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_role_tenant_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_rubric_category_type_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_rubric_result_submission_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_section_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_settings_tenant_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_site_settings_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_snippet_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_snippet_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_submission_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_submit_types_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_tenant_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_ui_preference_user_setting_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/patch_user_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/pay_with_coupon_course_price_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/pearson_templates_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/peer_feedback_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/permission_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_bulk_export_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_bulk_export_max_cases_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_case.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_pdf_export_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run_plagiarism_assignment_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_run_plagiarism_course_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/plagiarism_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/post_oauth_token_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/present_preference.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/proxy.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_description_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_enroll_link_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_price_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_price_tenant_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/put_rubric_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_comment_severity.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_comments_in_code_editor_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_test_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/quality_test_log_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_user_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/register_user_with_link_course_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/release_info.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/release_message_max_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rename_group_group_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/render_html_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/repository_connection_limit_reached_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/reset_token_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_get_auto_test_get.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_get_task_result_get_all.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_section_create_division.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/role_as_json_with_perms.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/root_file_trees_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_description_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_enabled_for_teacher_on_submissions_page_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_item.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_item_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_lock_reason.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubric_row_base_input_base_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rubrics_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/rule_type.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_extra.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_input_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/run_program_log.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/saml2_provider_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/saml_ui_info.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sections_in_submission_list_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/send_registration_email_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_correction_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_diff_tolerance_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/server_time_sync_interval_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/setting_token_time_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/setup_oauth_result.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/simple_submission_mode_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/simple_submission_navigate_to_latest_editor_session_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/site_email_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/snippet.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sso_infer_global_staff_role_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/sso_username_decollision_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/staged_assignment_importer_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_close_tab_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/start_payment_course_price_redirect_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/started_transaction.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/student_payment_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/submission_validator_input_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/submissions_per_page_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/task_result_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tax_behavior.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_usage.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_with_code.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_coupon_without_code.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_course_statistics.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_of_tenant_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_permissions.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_price.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_role_as_json_with_perms.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/tenant_statistics.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/test_submission_copying_on_import_enabled_setting.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/timed_availability.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/timeframe_like.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/token_revoked_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/transaction.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/transaction_state.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/types.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_peer_feedback_settings_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_set_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_suite_auto_test_base_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/update_suite_auto_test_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/upgraded_lti_provider_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/upload_submission_assignment_data.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_course.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_info_with_role.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_input.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/user_without_group.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/weak_password_exception.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/weak_password_feedback.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_base.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_configuration_disabled_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/webhook_configuration_enabled_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_origin.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_item.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_result_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/work_rubric_result_points_as_json.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/parsers.py +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/py.typed +0 -0
- {codegrade-16.1.57 → codegrade-16.1.60}/codegrade/utils.py +0 -0
|
@@ -221,28 +221,44 @@ def remove_converter(converter: Converter) -> None:
|
|
|
221
221
|
_CONVERTERS = [c for c in _CONVERTERS if c[-1] != converter]
|
|
222
222
|
|
|
223
223
|
|
|
224
|
+
def get_required_keys(typ: t.Type) -> t.Set[str]:
|
|
225
|
+
"""Retrieve the required keys from a given type hinted object.
|
|
226
|
+
|
|
227
|
+
This function specifically targets Python's `TypedDict` type, which allows
|
|
228
|
+
for optional keys. It uses the `get_type_hints` function from the `typing`
|
|
229
|
+
module to extract the type hints from the given object. It then iterates
|
|
230
|
+
over the annotations, checking for keys with a `NotRequired`
|
|
231
|
+
origin. These keys are considered optional and are discarded from the set
|
|
232
|
+
of required keys.
|
|
233
|
+
|
|
234
|
+
:param typ: The type hinted object from which to retrieve the required keys
|
|
235
|
+
:return: A set of strings representing the required keys.
|
|
236
|
+
"""
|
|
237
|
+
annotations = t.get_type_hints(typ, include_extras=True)
|
|
238
|
+
required_keys = set(typ.__required_keys__)
|
|
239
|
+
for key, subtyp in annotations.items():
|
|
240
|
+
origin = t.get_origin(subtyp)
|
|
241
|
+
# The reason for these checks:
|
|
242
|
+
# https://docs.python.org/3/library/typing.html#typing.TypedDict.__optional_keys__
|
|
243
|
+
if origin == t.NotRequired:
|
|
244
|
+
required_keys.discard(key)
|
|
245
|
+
return required_keys
|
|
246
|
+
|
|
247
|
+
|
|
224
248
|
def _get_args_typeddict(
|
|
225
249
|
ctx: ConvertCtx,
|
|
226
250
|
get_doc: t.Callable[[str], str] = lambda _: '',
|
|
227
251
|
) -> t.Sequence[t.Union[RequiredArgument, OptionalArgument]]:
|
|
228
252
|
args: t.List[t.Union[RequiredArgument, OptionalArgument]] = []
|
|
229
|
-
annotations = t.get_type_hints(ctx.typ
|
|
230
|
-
required_keys =
|
|
253
|
+
annotations = t.get_type_hints(ctx.typ)
|
|
254
|
+
required_keys = get_required_keys(ctx.typ)
|
|
231
255
|
|
|
232
256
|
for key, subtyp in annotations.items():
|
|
233
257
|
doc = get_doc(key)
|
|
234
|
-
origin = t.get_origin(subtyp)
|
|
235
|
-
# The reason for these checks:
|
|
236
|
-
# https://docs.python.org/3/library/typing.html#typing.TypedDict.__optional_keys__
|
|
237
|
-
if origin in (t.NotRequired, t.Required):
|
|
238
|
-
required = origin == t.Required
|
|
239
|
-
subtyp = subtyp.__args__[0]
|
|
240
|
-
else:
|
|
241
|
-
required = key in required_keys
|
|
242
258
|
|
|
243
259
|
sub_parse = ctx.recurse_with_guard(subtyp)
|
|
244
260
|
|
|
245
|
-
if
|
|
261
|
+
if key in required_keys:
|
|
246
262
|
args.append(
|
|
247
263
|
RequiredArgument(key, sub_parse, doc) # type: ignore[misc]
|
|
248
264
|
)
|
|
@@ -21,7 +21,6 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
|
|
|
21
21
|
from ..models.course_bulk_enroll_result import CourseBulkEnrollResult
|
|
22
22
|
from ..models.course_perm_map import CoursePermMap
|
|
23
23
|
from ..models.course_price import CoursePrice
|
|
24
|
-
from ..models.course_register_response import CourseRegisterResponse
|
|
25
24
|
from ..models.course_registration_link import CourseRegistrationLink
|
|
26
25
|
from ..models.course_role import CourseRole
|
|
27
26
|
from ..models.course_role_as_json_with_perms import (
|
|
@@ -57,6 +56,7 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
|
|
|
57
56
|
)
|
|
58
57
|
from ..models.user import User
|
|
59
58
|
from ..models.user_course import UserCourse
|
|
59
|
+
from ..models.user_login_response import UserLoginResponse
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
_ClientT = t.TypeVar("_ClientT", bound="codegrade.client._BaseClient")
|
|
@@ -1865,7 +1865,7 @@ class CourseService(t.Generic[_ClientT]):
|
|
|
1865
1865
|
extra_parameters: t.Optional[
|
|
1866
1866
|
t.Mapping[str, t.Union[str, bool, int, float]]
|
|
1867
1867
|
] = None,
|
|
1868
|
-
) -> "
|
|
1868
|
+
) -> "UserLoginResponse":
|
|
1869
1869
|
"""Register as a new user, and directly enroll in a course.
|
|
1870
1870
|
|
|
1871
1871
|
:param json_body: The body of the request. See
|
|
@@ -1895,11 +1895,11 @@ class CourseService(t.Generic[_ClientT]):
|
|
|
1895
1895
|
|
|
1896
1896
|
if utils.response_code_matches(resp.status_code, 200):
|
|
1897
1897
|
# fmt: off
|
|
1898
|
-
from ..models.
|
|
1898
|
+
from ..models.user_login_response import UserLoginResponse
|
|
1899
1899
|
|
|
1900
1900
|
# fmt: on
|
|
1901
1901
|
return parsers.JsonResponseParser(
|
|
1902
|
-
parsers.ParserFor.make(
|
|
1902
|
+
parsers.ParserFor.make(UserLoginResponse)
|
|
1903
1903
|
).try_parse(resp)
|
|
1904
1904
|
|
|
1905
1905
|
from ..models.any_error import AnyError
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"""The endpoints for saml objects.
|
|
2
|
+
|
|
3
|
+
SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
|
|
4
|
+
"""
|
|
5
|
+
import os
|
|
6
|
+
import typing as t
|
|
7
|
+
|
|
8
|
+
import cg_request_args as rqa
|
|
9
|
+
from cg_maybe import Maybe, Nothing
|
|
10
|
+
|
|
11
|
+
from .. import parsers, utils
|
|
12
|
+
|
|
13
|
+
if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
|
|
14
|
+
import codegrade
|
|
15
|
+
|
|
16
|
+
from ..models.user_login_response import UserLoginResponse
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
_ClientT = t.TypeVar("_ClientT", bound="codegrade.client._BaseClient")
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class SamlService(t.Generic[_ClientT]):
|
|
23
|
+
__slots__ = ("__client",)
|
|
24
|
+
|
|
25
|
+
def __init__(self, client: _ClientT) -> None:
|
|
26
|
+
self.__client = client
|
|
27
|
+
|
|
28
|
+
def get_session(
|
|
29
|
+
self,
|
|
30
|
+
*,
|
|
31
|
+
token: "str",
|
|
32
|
+
extra_parameters: t.Optional[
|
|
33
|
+
t.Mapping[str, t.Union[str, bool, int, float]]
|
|
34
|
+
] = None,
|
|
35
|
+
) -> "UserLoginResponse":
|
|
36
|
+
"""Get a JWT token for a user after doing a successful launch.
|
|
37
|
+
|
|
38
|
+
This method will use various pieces of information from the session
|
|
39
|
+
from the requested user.
|
|
40
|
+
|
|
41
|
+
This method can only be used once to retrieve the JWT, as the data will
|
|
42
|
+
be removed after the first request.
|
|
43
|
+
|
|
44
|
+
:param token: The token that we will use to verify that you are the
|
|
45
|
+
correct owner of the SAML launch. This data will be cross
|
|
46
|
+
referenced to stored data and your session.
|
|
47
|
+
:param extra_parameters: The extra query parameters you might want to
|
|
48
|
+
add. By default no extra query parameters are added.
|
|
49
|
+
|
|
50
|
+
:returns: A mapping containing one key (`access_token`).
|
|
51
|
+
"""
|
|
52
|
+
|
|
53
|
+
url = "/api/sso/saml2/jwts/{token}".format(token=token)
|
|
54
|
+
params = extra_parameters or {}
|
|
55
|
+
|
|
56
|
+
with self.__client as client:
|
|
57
|
+
resp = client.http.post(url=url, params=params)
|
|
58
|
+
utils.log_warnings(resp)
|
|
59
|
+
|
|
60
|
+
if utils.response_code_matches(resp.status_code, 200):
|
|
61
|
+
# fmt: off
|
|
62
|
+
from ..models.user_login_response import UserLoginResponse
|
|
63
|
+
|
|
64
|
+
# fmt: on
|
|
65
|
+
return parsers.JsonResponseParser(
|
|
66
|
+
parsers.ParserFor.make(UserLoginResponse)
|
|
67
|
+
).try_parse(resp)
|
|
68
|
+
|
|
69
|
+
from ..models.any_error import AnyError
|
|
70
|
+
|
|
71
|
+
raise utils.get_error(
|
|
72
|
+
resp,
|
|
73
|
+
(
|
|
74
|
+
(
|
|
75
|
+
(400, 409, 401, 403, 404, 429, 500),
|
|
76
|
+
utils.unpack_union(AnyError),
|
|
77
|
+
),
|
|
78
|
+
),
|
|
79
|
+
)
|
|
@@ -53,6 +53,7 @@ if t.TYPE_CHECKING or os.getenv("CG_EAGERIMPORT", False):
|
|
|
53
53
|
PlagiarismService as _PlagiarismService,
|
|
54
54
|
)
|
|
55
55
|
from codegrade._api.role import RoleService as _RoleService
|
|
56
|
+
from codegrade._api.saml import SamlService as _SamlService
|
|
56
57
|
from codegrade._api.section import SectionService as _SectionService
|
|
57
58
|
from codegrade._api.site_settings import (
|
|
58
59
|
SiteSettingsService as _SiteSettingsService,
|
|
@@ -100,6 +101,7 @@ class _BaseClient:
|
|
|
100
101
|
"__permission",
|
|
101
102
|
"__plagiarism",
|
|
102
103
|
"__role",
|
|
104
|
+
"__saml",
|
|
103
105
|
"__section",
|
|
104
106
|
"__site_settings",
|
|
105
107
|
"__snippet",
|
|
@@ -155,6 +157,7 @@ class _BaseClient:
|
|
|
155
157
|
"_PlagiarismService[_BaseClientT]"
|
|
156
158
|
] = None
|
|
157
159
|
self.__role: t.Optional["_RoleService[_BaseClientT]"] = None
|
|
160
|
+
self.__saml: t.Optional["_SamlService[_BaseClientT]"] = None
|
|
158
161
|
self.__section: t.Optional["_SectionService[_BaseClientT]"] = None
|
|
159
162
|
self.__site_settings: t.Optional[
|
|
160
163
|
"_SiteSettingsService[_BaseClientT]"
|
|
@@ -399,6 +402,15 @@ class _BaseClient:
|
|
|
399
402
|
self.__role = m.RoleService(self)
|
|
400
403
|
return self.__role
|
|
401
404
|
|
|
405
|
+
@property
|
|
406
|
+
def saml(self: _BaseClientT) -> "_SamlService[_BaseClientT]":
|
|
407
|
+
"""Get a :class:`.SamlService` to do requests concerning Saml."""
|
|
408
|
+
if self.__saml is None:
|
|
409
|
+
import codegrade._api.saml as m
|
|
410
|
+
|
|
411
|
+
self.__saml = m.SamlService(self)
|
|
412
|
+
return self.__saml
|
|
413
|
+
|
|
402
414
|
@property
|
|
403
415
|
def section(self: _BaseClientT) -> "_SectionService[_BaseClientT]":
|
|
404
416
|
"""Get a :class:`.SectionService` to do requests concerning Section."""
|
|
@@ -526,7 +538,7 @@ class Client(_BaseClient):
|
|
|
526
538
|
return httpx.Client(
|
|
527
539
|
base_url=self.base_url,
|
|
528
540
|
headers={
|
|
529
|
-
"User-Agent": "CodeGradeAPI/16.1.
|
|
541
|
+
"User-Agent": "CodeGradeAPI/16.1.60",
|
|
530
542
|
},
|
|
531
543
|
follow_redirects=True,
|
|
532
544
|
)
|
|
@@ -546,7 +558,7 @@ class AuthenticatedClient(_BaseClient):
|
|
|
546
558
|
base_url=self.base_url,
|
|
547
559
|
headers={
|
|
548
560
|
"Authorization": f"Bearer {self.token}",
|
|
549
|
-
"User-Agent": "CodeGradeAPI/16.1.
|
|
561
|
+
"User-Agent": "CodeGradeAPI/16.1.60",
|
|
550
562
|
},
|
|
551
563
|
follow_redirects=True,
|
|
552
564
|
)
|
|
@@ -215,7 +215,6 @@ from .course_perm_map import CoursePermMap
|
|
|
215
215
|
from .course_permission import CoursePermission
|
|
216
216
|
from .course_price import CoursePrice
|
|
217
217
|
from .course_register_enabled_setting import CourseRegisterEnabledSetting
|
|
218
|
-
from .course_register_response import CourseRegisterResponse
|
|
219
218
|
from .course_registration_link import CourseRegistrationLink
|
|
220
219
|
from .course_role import CourseRole
|
|
221
220
|
from .course_role_as_json_with_perms import CourseRoleAsJSONWithPerms
|
|
@@ -349,6 +348,7 @@ from .hide_code_editor_output_viewer_with_only_quiz_steps_setting import (
|
|
|
349
348
|
from .hide_empty_rubric_row_description_setting import (
|
|
350
349
|
HideEmptyRubricRowDescriptionSetting,
|
|
351
350
|
)
|
|
351
|
+
from .hide_no_deadline_enabled_setting import HideNoDeadlineEnabledSetting
|
|
352
352
|
from .hubspot_syncing_enabled_setting import HubspotSyncingEnabledSetting
|
|
353
353
|
from .ignore_handling import IgnoreHandling
|
|
354
354
|
from .ignored_files_exception import IgnoredFilesException
|
|
@@ -609,6 +609,9 @@ from .result_data_post_section_create_division import (
|
|
|
609
609
|
)
|
|
610
610
|
from .result_data_post_user_login import ResultDataPostUserLogin
|
|
611
611
|
from .result_data_post_user_register import ResultDataPostUserRegister
|
|
612
|
+
from .retry_group_submission_grade_passback_enabled_setting import (
|
|
613
|
+
RetryGroupSubmissionGradePassbackEnabledSetting,
|
|
614
|
+
)
|
|
612
615
|
from .role_as_json_with_perms import RoleAsJSONWithPerms
|
|
613
616
|
from .root_file_trees_json import RootFileTreesJSON
|
|
614
617
|
from .rubric_description_type import RubricDescriptionType
|
|
@@ -639,6 +642,7 @@ from .server_time_correction_enabled_setting import (
|
|
|
639
642
|
)
|
|
640
643
|
from .server_time_diff_tolerance_setting import ServerTimeDiffToleranceSetting
|
|
641
644
|
from .server_time_sync_interval_setting import ServerTimeSyncIntervalSetting
|
|
645
|
+
from .session_restrictions import SessionRestrictions
|
|
642
646
|
from .setting_token_time_setting import SettingTokenTimeSetting
|
|
643
647
|
from .setup_oauth_result import SetupOAuthResult
|
|
644
648
|
from .simple_submission_mode_enabled_setting import (
|
|
@@ -704,6 +708,7 @@ from .user import User
|
|
|
704
708
|
from .user_course import UserCourse
|
|
705
709
|
from .user_info_with_role import UserInfoWithRole
|
|
706
710
|
from .user_input import UserInput
|
|
711
|
+
from .user_login_response import UserLoginResponse
|
|
707
712
|
from .user_without_group import UserWithoutGroup
|
|
708
713
|
from .weak_password_exception import WeakPasswordException
|
|
709
714
|
from .weak_password_feedback import WeakPasswordFeedback
|
|
@@ -984,6 +984,14 @@ class AllSiteSettings(FrontendSiteSettings):
|
|
|
984
984
|
)
|
|
985
985
|
if self.analytics_enabled.is_just:
|
|
986
986
|
res["ANALYTICS_ENABLED"] = to_dict(self.analytics_enabled.value)
|
|
987
|
+
if self.hide_no_deadline_enabled.is_just:
|
|
988
|
+
res["HIDE_NO_DEADLINE_ENABLED"] = to_dict(
|
|
989
|
+
self.hide_no_deadline_enabled.value
|
|
990
|
+
)
|
|
991
|
+
if self.retry_group_submission_grade_passback_enabled.is_just:
|
|
992
|
+
res["RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"] = to_dict(
|
|
993
|
+
self.retry_group_submission_grade_passback_enabled.value
|
|
994
|
+
)
|
|
987
995
|
if self.auto_test_heartbeat_interval.is_just:
|
|
988
996
|
res["AUTO_TEST_HEARTBEAT_INTERVAL"] = to_dict(
|
|
989
997
|
self.auto_test_heartbeat_interval.value
|
|
@@ -1237,6 +1245,8 @@ class AllSiteSettings(FrontendSiteSettings):
|
|
|
1237
1245
|
hide_empty_rubric_row_description=parsed.HIDE_EMPTY_RUBRIC_ROW_DESCRIPTION,
|
|
1238
1246
|
default_submission_page_tab=parsed.DEFAULT_SUBMISSION_PAGE_TAB,
|
|
1239
1247
|
analytics_enabled=parsed.ANALYTICS_ENABLED,
|
|
1248
|
+
hide_no_deadline_enabled=parsed.HIDE_NO_DEADLINE_ENABLED,
|
|
1249
|
+
retry_group_submission_grade_passback_enabled=parsed.RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED,
|
|
1240
1250
|
auto_test_heartbeat_interval=parsed.AUTO_TEST_HEARTBEAT_INTERVAL,
|
|
1241
1251
|
auto_test_heartbeat_max_missed=parsed.AUTO_TEST_HEARTBEAT_MAX_MISSED,
|
|
1242
1252
|
auto_test_max_jobs_per_runner=parsed.AUTO_TEST_MAX_JOBS_PER_RUNNER,
|
|
@@ -311,6 +311,12 @@ class FrontendSiteSettings:
|
|
|
311
311
|
#: Whether the Analytics tab should be available on assignments in this
|
|
312
312
|
#: tenant.
|
|
313
313
|
analytics_enabled: Maybe["bool"] = Nothing
|
|
314
|
+
#: Should we hide the "No deadline" message if no deadline or lock date is
|
|
315
|
+
#: set.
|
|
316
|
+
hide_no_deadline_enabled: Maybe["bool"] = Nothing
|
|
317
|
+
#: Should we retry passing back grades for group submissions when the
|
|
318
|
+
#: passback request failed for some but not all of the group members.
|
|
319
|
+
retry_group_submission_grade_passback_enabled: Maybe["bool"] = Nothing
|
|
314
320
|
|
|
315
321
|
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
316
322
|
|
|
@@ -1038,6 +1044,23 @@ class FrontendSiteSettings:
|
|
|
1038
1044
|
" assignments in this tenant."
|
|
1039
1045
|
),
|
|
1040
1046
|
),
|
|
1047
|
+
rqa.OptionalArgument(
|
|
1048
|
+
"HIDE_NO_DEADLINE_ENABLED",
|
|
1049
|
+
rqa.SimpleValue.bool,
|
|
1050
|
+
doc=(
|
|
1051
|
+
'Should we hide the "No deadline" message if no deadline'
|
|
1052
|
+
" or lock date is set."
|
|
1053
|
+
),
|
|
1054
|
+
),
|
|
1055
|
+
rqa.OptionalArgument(
|
|
1056
|
+
"RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED",
|
|
1057
|
+
rqa.SimpleValue.bool,
|
|
1058
|
+
doc=(
|
|
1059
|
+
"Should we retry passing back grades for group submissions"
|
|
1060
|
+
" when the passback request failed for some but not all of"
|
|
1061
|
+
" the group members."
|
|
1062
|
+
),
|
|
1063
|
+
),
|
|
1041
1064
|
).use_readable_describe(True)
|
|
1042
1065
|
)
|
|
1043
1066
|
|
|
@@ -1295,6 +1318,14 @@ class FrontendSiteSettings:
|
|
|
1295
1318
|
self.default_submission_page_tab
|
|
1296
1319
|
)
|
|
1297
1320
|
self.analytics_enabled = maybe_from_nullable(self.analytics_enabled)
|
|
1321
|
+
self.hide_no_deadline_enabled = maybe_from_nullable(
|
|
1322
|
+
self.hide_no_deadline_enabled
|
|
1323
|
+
)
|
|
1324
|
+
self.retry_group_submission_grade_passback_enabled = (
|
|
1325
|
+
maybe_from_nullable(
|
|
1326
|
+
self.retry_group_submission_grade_passback_enabled
|
|
1327
|
+
)
|
|
1328
|
+
)
|
|
1298
1329
|
|
|
1299
1330
|
def to_dict(self) -> t.Dict[str, t.Any]:
|
|
1300
1331
|
res: t.Dict[str, t.Any] = {}
|
|
@@ -1636,6 +1667,14 @@ class FrontendSiteSettings:
|
|
|
1636
1667
|
)
|
|
1637
1668
|
if self.analytics_enabled.is_just:
|
|
1638
1669
|
res["ANALYTICS_ENABLED"] = to_dict(self.analytics_enabled.value)
|
|
1670
|
+
if self.hide_no_deadline_enabled.is_just:
|
|
1671
|
+
res["HIDE_NO_DEADLINE_ENABLED"] = to_dict(
|
|
1672
|
+
self.hide_no_deadline_enabled.value
|
|
1673
|
+
)
|
|
1674
|
+
if self.retry_group_submission_grade_passback_enabled.is_just:
|
|
1675
|
+
res["RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"] = to_dict(
|
|
1676
|
+
self.retry_group_submission_grade_passback_enabled.value
|
|
1677
|
+
)
|
|
1639
1678
|
return res
|
|
1640
1679
|
|
|
1641
1680
|
@classmethod
|
|
@@ -1733,6 +1772,8 @@ class FrontendSiteSettings:
|
|
|
1733
1772
|
hide_empty_rubric_row_description=parsed.HIDE_EMPTY_RUBRIC_ROW_DESCRIPTION,
|
|
1734
1773
|
default_submission_page_tab=parsed.DEFAULT_SUBMISSION_PAGE_TAB,
|
|
1735
1774
|
analytics_enabled=parsed.ANALYTICS_ENABLED,
|
|
1775
|
+
hide_no_deadline_enabled=parsed.HIDE_NO_DEADLINE_ENABLED,
|
|
1776
|
+
retry_group_submission_grade_passback_enabled=parsed.RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED,
|
|
1736
1777
|
)
|
|
1737
1778
|
res.raw_data = d
|
|
1738
1779
|
return res
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"""The module that defines the ``HideNoDeadlineEnabledSetting`` model.
|
|
2
|
+
|
|
3
|
+
SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import typing as t
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
|
|
9
|
+
import cg_request_args as rqa
|
|
10
|
+
|
|
11
|
+
from ..utils import to_dict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class HideNoDeadlineEnabledSetting:
|
|
16
|
+
""" """
|
|
17
|
+
|
|
18
|
+
name: "t.Literal['HIDE_NO_DEADLINE_ENABLED']"
|
|
19
|
+
value: "t.Optional[bool]"
|
|
20
|
+
|
|
21
|
+
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
22
|
+
|
|
23
|
+
data_parser: t.ClassVar = rqa.Lazy(
|
|
24
|
+
lambda: rqa.FixedMapping(
|
|
25
|
+
rqa.RequiredArgument(
|
|
26
|
+
"name",
|
|
27
|
+
rqa.StringEnum("HIDE_NO_DEADLINE_ENABLED"),
|
|
28
|
+
doc="",
|
|
29
|
+
),
|
|
30
|
+
rqa.RequiredArgument(
|
|
31
|
+
"value",
|
|
32
|
+
rqa.Nullable(rqa.SimpleValue.bool),
|
|
33
|
+
doc="",
|
|
34
|
+
),
|
|
35
|
+
).use_readable_describe(True)
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def to_dict(self) -> t.Dict[str, t.Any]:
|
|
39
|
+
res: t.Dict[str, t.Any] = {
|
|
40
|
+
"name": to_dict(self.name),
|
|
41
|
+
"value": to_dict(self.value),
|
|
42
|
+
}
|
|
43
|
+
return res
|
|
44
|
+
|
|
45
|
+
@classmethod
|
|
46
|
+
def from_dict(
|
|
47
|
+
cls: t.Type["HideNoDeadlineEnabledSetting"], d: t.Dict[str, t.Any]
|
|
48
|
+
) -> "HideNoDeadlineEnabledSetting":
|
|
49
|
+
parsed = cls.data_parser.try_parse(d)
|
|
50
|
+
|
|
51
|
+
res = cls(
|
|
52
|
+
name=parsed.name,
|
|
53
|
+
value=parsed.value,
|
|
54
|
+
)
|
|
55
|
+
res.raw_data = d
|
|
56
|
+
return res
|
{codegrade-16.1.57 → codegrade-16.1.60}/codegrade/models/result_data_post_login_link_login.py
RENAMED
|
@@ -11,6 +11,7 @@ import cg_request_args as rqa
|
|
|
11
11
|
from .. import parsers
|
|
12
12
|
from ..utils import to_dict
|
|
13
13
|
from .extended_user import ExtendedUser
|
|
14
|
+
from .session_restrictions import SessionRestrictions
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@dataclass
|
|
@@ -19,8 +20,10 @@ class ResultDataPostLoginLinkLogin:
|
|
|
19
20
|
|
|
20
21
|
#: The user that was logged in.
|
|
21
22
|
user: "ExtendedUser"
|
|
22
|
-
#: A
|
|
23
|
+
#: A session token that can be used to do authenticated requests.
|
|
23
24
|
access_token: "str"
|
|
25
|
+
#: The restrictions of this access token.
|
|
26
|
+
restrictions: "SessionRestrictions"
|
|
24
27
|
|
|
25
28
|
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
26
29
|
|
|
@@ -35,10 +38,15 @@ class ResultDataPostLoginLinkLogin:
|
|
|
35
38
|
"access_token",
|
|
36
39
|
rqa.SimpleValue.str,
|
|
37
40
|
doc=(
|
|
38
|
-
"A
|
|
41
|
+
"A session token that can be used to do authenticated"
|
|
39
42
|
" requests."
|
|
40
43
|
),
|
|
41
44
|
),
|
|
45
|
+
rqa.RequiredArgument(
|
|
46
|
+
"restrictions",
|
|
47
|
+
parsers.ParserFor.make(SessionRestrictions),
|
|
48
|
+
doc="The restrictions of this access token.",
|
|
49
|
+
),
|
|
42
50
|
).use_readable_describe(True)
|
|
43
51
|
)
|
|
44
52
|
|
|
@@ -46,6 +54,7 @@ class ResultDataPostLoginLinkLogin:
|
|
|
46
54
|
res: t.Dict[str, t.Any] = {
|
|
47
55
|
"user": to_dict(self.user),
|
|
48
56
|
"access_token": to_dict(self.access_token),
|
|
57
|
+
"restrictions": to_dict(self.restrictions),
|
|
49
58
|
}
|
|
50
59
|
return res
|
|
51
60
|
|
|
@@ -58,6 +67,7 @@ class ResultDataPostLoginLinkLogin:
|
|
|
58
67
|
res = cls(
|
|
59
68
|
user=parsed.user,
|
|
60
69
|
access_token=parsed.access_token,
|
|
70
|
+
restrictions=parsed.restrictions,
|
|
61
71
|
)
|
|
62
72
|
res.raw_data = d
|
|
63
73
|
return res
|
|
@@ -11,6 +11,7 @@ import cg_request_args as rqa
|
|
|
11
11
|
from .. import parsers
|
|
12
12
|
from ..utils import to_dict
|
|
13
13
|
from .extended_user import ExtendedUser
|
|
14
|
+
from .session_restrictions import SessionRestrictions
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@dataclass
|
|
@@ -19,8 +20,10 @@ class ResultDataPostUserLogin:
|
|
|
19
20
|
|
|
20
21
|
#: The user that was logged in.
|
|
21
22
|
user: "ExtendedUser"
|
|
22
|
-
#: A
|
|
23
|
+
#: A session token that can be used to do authenticated requests.
|
|
23
24
|
access_token: "str"
|
|
25
|
+
#: The restrictions of this access token.
|
|
26
|
+
restrictions: "SessionRestrictions"
|
|
24
27
|
|
|
25
28
|
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
26
29
|
|
|
@@ -35,10 +38,15 @@ class ResultDataPostUserLogin:
|
|
|
35
38
|
"access_token",
|
|
36
39
|
rqa.SimpleValue.str,
|
|
37
40
|
doc=(
|
|
38
|
-
"A
|
|
41
|
+
"A session token that can be used to do authenticated"
|
|
39
42
|
" requests."
|
|
40
43
|
),
|
|
41
44
|
),
|
|
45
|
+
rqa.RequiredArgument(
|
|
46
|
+
"restrictions",
|
|
47
|
+
parsers.ParserFor.make(SessionRestrictions),
|
|
48
|
+
doc="The restrictions of this access token.",
|
|
49
|
+
),
|
|
42
50
|
).use_readable_describe(True)
|
|
43
51
|
)
|
|
44
52
|
|
|
@@ -46,6 +54,7 @@ class ResultDataPostUserLogin:
|
|
|
46
54
|
res: t.Dict[str, t.Any] = {
|
|
47
55
|
"user": to_dict(self.user),
|
|
48
56
|
"access_token": to_dict(self.access_token),
|
|
57
|
+
"restrictions": to_dict(self.restrictions),
|
|
49
58
|
}
|
|
50
59
|
return res
|
|
51
60
|
|
|
@@ -58,6 +67,7 @@ class ResultDataPostUserLogin:
|
|
|
58
67
|
res = cls(
|
|
59
68
|
user=parsed.user,
|
|
60
69
|
access_token=parsed.access_token,
|
|
70
|
+
restrictions=parsed.restrictions,
|
|
61
71
|
)
|
|
62
72
|
res.raw_data = d
|
|
63
73
|
return res
|
|
@@ -11,6 +11,7 @@ import cg_request_args as rqa
|
|
|
11
11
|
from .. import parsers
|
|
12
12
|
from ..utils import to_dict
|
|
13
13
|
from .extended_user import ExtendedUser
|
|
14
|
+
from .session_restrictions import SessionRestrictions
|
|
14
15
|
|
|
15
16
|
|
|
16
17
|
@dataclass
|
|
@@ -19,8 +20,10 @@ class ResultDataPostUserRegister:
|
|
|
19
20
|
|
|
20
21
|
#: The user that was logged in.
|
|
21
22
|
user: "ExtendedUser"
|
|
22
|
-
#: A
|
|
23
|
+
#: A session token that can be used to do authenticated requests.
|
|
23
24
|
access_token: "str"
|
|
25
|
+
#: The restrictions of this access token.
|
|
26
|
+
restrictions: "SessionRestrictions"
|
|
24
27
|
|
|
25
28
|
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
26
29
|
|
|
@@ -35,10 +38,15 @@ class ResultDataPostUserRegister:
|
|
|
35
38
|
"access_token",
|
|
36
39
|
rqa.SimpleValue.str,
|
|
37
40
|
doc=(
|
|
38
|
-
"A
|
|
41
|
+
"A session token that can be used to do authenticated"
|
|
39
42
|
" requests."
|
|
40
43
|
),
|
|
41
44
|
),
|
|
45
|
+
rqa.RequiredArgument(
|
|
46
|
+
"restrictions",
|
|
47
|
+
parsers.ParserFor.make(SessionRestrictions),
|
|
48
|
+
doc="The restrictions of this access token.",
|
|
49
|
+
),
|
|
42
50
|
).use_readable_describe(True)
|
|
43
51
|
)
|
|
44
52
|
|
|
@@ -46,6 +54,7 @@ class ResultDataPostUserRegister:
|
|
|
46
54
|
res: t.Dict[str, t.Any] = {
|
|
47
55
|
"user": to_dict(self.user),
|
|
48
56
|
"access_token": to_dict(self.access_token),
|
|
57
|
+
"restrictions": to_dict(self.restrictions),
|
|
49
58
|
}
|
|
50
59
|
return res
|
|
51
60
|
|
|
@@ -58,6 +67,7 @@ class ResultDataPostUserRegister:
|
|
|
58
67
|
res = cls(
|
|
59
68
|
user=parsed.user,
|
|
60
69
|
access_token=parsed.access_token,
|
|
70
|
+
restrictions=parsed.restrictions,
|
|
61
71
|
)
|
|
62
72
|
res.raw_data = d
|
|
63
73
|
return res
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""The module that defines the ``RetryGroupSubmissionGradePassbackEnabledSetting`` model.
|
|
2
|
+
|
|
3
|
+
SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import typing as t
|
|
7
|
+
from dataclasses import dataclass, field
|
|
8
|
+
|
|
9
|
+
import cg_request_args as rqa
|
|
10
|
+
|
|
11
|
+
from ..utils import to_dict
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class RetryGroupSubmissionGradePassbackEnabledSetting:
|
|
16
|
+
""" """
|
|
17
|
+
|
|
18
|
+
name: "t.Literal['RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED']"
|
|
19
|
+
value: "t.Optional[bool]"
|
|
20
|
+
|
|
21
|
+
raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False)
|
|
22
|
+
|
|
23
|
+
data_parser: t.ClassVar = rqa.Lazy(
|
|
24
|
+
lambda: rqa.FixedMapping(
|
|
25
|
+
rqa.RequiredArgument(
|
|
26
|
+
"name",
|
|
27
|
+
rqa.StringEnum(
|
|
28
|
+
"RETRY_GROUP_SUBMISSION_GRADE_PASSBACK_ENABLED"
|
|
29
|
+
),
|
|
30
|
+
doc="",
|
|
31
|
+
),
|
|
32
|
+
rqa.RequiredArgument(
|
|
33
|
+
"value",
|
|
34
|
+
rqa.Nullable(rqa.SimpleValue.bool),
|
|
35
|
+
doc="",
|
|
36
|
+
),
|
|
37
|
+
).use_readable_describe(True)
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def to_dict(self) -> t.Dict[str, t.Any]:
|
|
41
|
+
res: t.Dict[str, t.Any] = {
|
|
42
|
+
"name": to_dict(self.name),
|
|
43
|
+
"value": to_dict(self.value),
|
|
44
|
+
}
|
|
45
|
+
return res
|
|
46
|
+
|
|
47
|
+
@classmethod
|
|
48
|
+
def from_dict(
|
|
49
|
+
cls: t.Type["RetryGroupSubmissionGradePassbackEnabledSetting"],
|
|
50
|
+
d: t.Dict[str, t.Any],
|
|
51
|
+
) -> "RetryGroupSubmissionGradePassbackEnabledSetting":
|
|
52
|
+
parsed = cls.data_parser.try_parse(d)
|
|
53
|
+
|
|
54
|
+
res = cls(
|
|
55
|
+
name=parsed.name,
|
|
56
|
+
value=parsed.value,
|
|
57
|
+
)
|
|
58
|
+
res.raw_data = d
|
|
59
|
+
return res
|