Source code for codegrade.models.all_site_settings

"""The module that defines the ``AllSiteSettings`` model.

SPDX-License-Identifier: AGPL-3.0-only OR BSD-3-Clause-Clear
"""

from __future__ import annotations

import typing as t
from dataclasses import dataclass, field

import cg_request_args as rqa

from ..utils import to_dict
from .backend_site_settings import BackendSiteSettings
from .frontend_site_settings import FrontendSiteSettings


[docs] @dataclass class AllSiteSettings(FrontendSiteSettings, BackendSiteSettings): """The JSON representation of all options.""" raw_data: t.Optional[t.Dict[str, t.Any]] = field(init=False, repr=False) data_parser: t.ClassVar[t.Any] = rqa.Lazy( lambda: FrontendSiteSettings.data_parser.parser.combine( BackendSiteSettings.data_parser.parser ) .combine(rqa.FixedMapping()) .use_readable_describe(True) ) def to_dict(self) -> t.Dict[str, t.Any]: res: t.Dict[str, t.Any] = {} if self.ai_assistant_enabled.is_just: res["AI_ASSISTANT_ENABLED"] = to_dict( self.ai_assistant_enabled.value ) if self.assignment_max_points_enabled.is_just: res["ASSIGNMENT_MAX_POINTS_ENABLED"] = to_dict( self.assignment_max_points_enabled.value ) if self.download_editor_files_enabled.is_just: res["DOWNLOAD_EDITOR_FILES_ENABLED"] = to_dict( self.download_editor_files_enabled.value ) if self.grading_notifications_enabled.is_just: res["GRADING_NOTIFICATIONS_ENABLED"] = to_dict( self.grading_notifications_enabled.value ) if self.hide_no_deadline_enabled.is_just: res["HIDE_NO_DEADLINE_ENABLED"] = to_dict( self.hide_no_deadline_enabled.value ) if self.inline_rubric_viewer_enabled.is_just: res["INLINE_RUBRIC_VIEWER_ENABLED"] = to_dict( self.inline_rubric_viewer_enabled.value ) if self.prompt_engineering_step_enabled.is_just: res["PROMPT_ENGINEERING_STEP_ENABLED"] = to_dict( self.prompt_engineering_step_enabled.value ) if self.register_enabled.is_just: res["REGISTER_ENABLED"] = to_dict(self.register_enabled.value) if self.assignment_default_grading_scale.is_just: res["ASSIGNMENT_DEFAULT_GRADING_SCALE"] = to_dict( self.assignment_default_grading_scale.value ) if self.assignment_default_grading_scale_points.is_just: res["ASSIGNMENT_DEFAULT_GRADING_SCALE_POINTS"] = to_dict( self.assignment_default_grading_scale_points.value ) if self.assignment_percentage_decimals.is_just: res["ASSIGNMENT_PERCENTAGE_DECIMALS"] = to_dict( self.assignment_percentage_decimals.value ) if self.assignment_point_decimals.is_just: res["ASSIGNMENT_POINT_DECIMALS"] = to_dict( self.assignment_point_decimals.value ) if self.assistant_models.is_just: res["ASSISTANT_MODELS"] = to_dict(self.assistant_models.value) if self.code_editor_start_on_assignment_description.is_just: res["CODE_EDITOR_START_ON_ASSIGNMENT_DESCRIPTION"] = to_dict( self.code_editor_start_on_assignment_description.value ) if self.default_course_teacher_role.is_just: res["DEFAULT_COURSE_TEACHER_ROLE"] = to_dict( self.default_course_teacher_role.value ) if self.default_submission_page_tab.is_just: res["DEFAULT_SUBMISSION_PAGE_TAB"] = to_dict( self.default_submission_page_tab.value ) if self.hide_code_editor_output_viewer_with_only_quiz_steps.is_just: res["HIDE_CODE_EDITOR_OUTPUT_VIEWER_WITH_ONLY_QUIZ_STEPS"] = ( to_dict( self.hide_code_editor_output_viewer_with_only_quiz_steps.value ) ) if self.hide_code_editor_filetree_controls_with_only_quiz_steps.is_just: res["HIDE_CODE_EDITOR_FILETREE_CONTROLS_WITH_ONLY_QUIZ_STEPS"] = ( to_dict( self.hide_code_editor_filetree_controls_with_only_quiz_steps.value ) ) if self.new_auto_test_ubuntu_20_04_base_image_ids.is_just: res["NEW_AUTO_TEST_UBUNTU_20_04_BASE_IMAGE_IDS"] = to_dict( self.new_auto_test_ubuntu_20_04_base_image_ids.value ) if self.new_auto_test_ubuntu_24_04_base_image_ids.is_just: res["NEW_AUTO_TEST_UBUNTU_24_04_BASE_IMAGE_IDS"] = to_dict( self.new_auto_test_ubuntu_24_04_base_image_ids.value ) if self.quiz_minimum_questions_for_dropdown.is_just: res["QUIZ_MINIMUM_QUESTIONS_FOR_DROPDOWN"] = to_dict( self.quiz_minimum_questions_for_dropdown.value ) if self.simple_submission_navigate_to_latest_editor_session.is_just: res["SIMPLE_SUBMISSION_NAVIGATE_TO_LATEST_EDITOR_SESSION"] = ( to_dict( self.simple_submission_navigate_to_latest_editor_session.value ) ) if self.access_token_modal_warning_time.is_just: res["ACCESS_TOKEN_MODAL_WARNING_TIME"] = to_dict( self.access_token_modal_warning_time.value ) if self.access_token_toast_warning_time.is_just: res["ACCESS_TOKEN_TOAST_WARNING_TIME"] = to_dict( self.access_token_toast_warning_time.value ) if self.login_token_before_time.is_just: res["LOGIN_TOKEN_BEFORE_TIME"] = to_dict( self.login_token_before_time.value ) if self.student_payment_main_option.is_just: res["STUDENT_PAYMENT_MAIN_OPTION"] = to_dict( self.student_payment_main_option.value ) if self.lti_lock_date_copying_enabled.is_just: res["LTI_LOCK_DATE_COPYING_ENABLED"] = to_dict( self.lti_lock_date_copying_enabled.value ) if self.blackboard_zip_upload_enabled.is_just: res["BLACKBOARD_ZIP_UPLOAD_ENABLED"] = to_dict( self.blackboard_zip_upload_enabled.value ) if self.is_pearson.is_just: res["IS_PEARSON"] = to_dict(self.is_pearson.value) if self.max_file_size.is_just: res["MAX_FILE_SIZE"] = to_dict(self.max_file_size.value) if self.max_large_upload_size.is_just: res["MAX_LARGE_UPLOAD_SIZE"] = to_dict( self.max_large_upload_size.value ) if self.max_normal_upload_size.is_just: res["MAX_NORMAL_UPLOAD_SIZE"] = to_dict( self.max_normal_upload_size.value ) if self.default_course_ta_role.is_just: res["DEFAULT_COURSE_TA_ROLE"] = to_dict( self.default_course_ta_role.value ) if self.new_auto_test_default_os.is_just: res["NEW_AUTO_TEST_DEFAULT_OS"] = to_dict( self.new_auto_test_default_os.value ) if self.send_registration_email.is_just: res["SEND_REGISTRATION_EMAIL"] = to_dict( self.send_registration_email.value ) if self.jwt_access_token_expires.is_just: res["JWT_ACCESS_TOKEN_EXPIRES"] = to_dict( self.jwt_access_token_expires.value ) if self.min_password_score.is_just: res["MIN_PASSWORD_SCORE"] = to_dict(self.min_password_score.value) if self.payments_provider.is_just: res["PAYMENTS_PROVIDER"] = to_dict(self.payments_provider.value) if self.per_course_payment_allowed.is_just: res["PER_COURSE_PAYMENT_ALLOWED"] = to_dict( self.per_course_payment_allowed.value ) if self.hubspot_syncing_enabled.is_just: res["HUBSPOT_SYNCING_ENABLED"] = to_dict( self.hubspot_syncing_enabled.value ) if self.lti_1p3_nonce_and_state_validation_enabled.is_just: res["LTI_1P3_NONCE_AND_STATE_VALIDATION_ENABLED"] = to_dict( self.lti_1p3_nonce_and_state_validation_enabled.value ) if self.lti_1p3_system_role_from_context_role.is_just: res["LTI_1P3_SYSTEM_ROLE_FROM_CONTEXT_ROLE"] = to_dict( self.lti_1p3_system_role_from_context_role.value ) if self.lti_launch_data_logging.is_just: res["LTI_LAUNCH_DATA_LOGGING"] = to_dict( self.lti_launch_data_logging.value ) if self.lti_role_switching.is_just: res["LTI_ROLE_SWITCHING"] = to_dict(self.lti_role_switching.value) if self.name_and_email_from_nrps_only.is_just: res["NAME_AND_EMAIL_FROM_NRPS_ONLY"] = to_dict( self.name_and_email_from_nrps_only.value ) if self.sso_username_decollision_enabled.is_just: res["SSO_USERNAME_DECOLLISION_ENABLED"] = to_dict( self.sso_username_decollision_enabled.value ) return res @classmethod def from_dict( cls: t.Type[AllSiteSettings], d: t.Dict[str, t.Any] ) -> AllSiteSettings: parsed = cls.data_parser.try_parse(d) res = cls( ai_assistant_enabled=parsed.AI_ASSISTANT_ENABLED, assignment_max_points_enabled=parsed.ASSIGNMENT_MAX_POINTS_ENABLED, download_editor_files_enabled=parsed.DOWNLOAD_EDITOR_FILES_ENABLED, grading_notifications_enabled=parsed.GRADING_NOTIFICATIONS_ENABLED, hide_no_deadline_enabled=parsed.HIDE_NO_DEADLINE_ENABLED, inline_rubric_viewer_enabled=parsed.INLINE_RUBRIC_VIEWER_ENABLED, prompt_engineering_step_enabled=parsed.PROMPT_ENGINEERING_STEP_ENABLED, register_enabled=parsed.REGISTER_ENABLED, assignment_default_grading_scale=parsed.ASSIGNMENT_DEFAULT_GRADING_SCALE, assignment_default_grading_scale_points=parsed.ASSIGNMENT_DEFAULT_GRADING_SCALE_POINTS, assignment_percentage_decimals=parsed.ASSIGNMENT_PERCENTAGE_DECIMALS, assignment_point_decimals=parsed.ASSIGNMENT_POINT_DECIMALS, assistant_models=parsed.ASSISTANT_MODELS, code_editor_start_on_assignment_description=parsed.CODE_EDITOR_START_ON_ASSIGNMENT_DESCRIPTION, default_course_teacher_role=parsed.DEFAULT_COURSE_TEACHER_ROLE, default_submission_page_tab=parsed.DEFAULT_SUBMISSION_PAGE_TAB, hide_code_editor_output_viewer_with_only_quiz_steps=parsed.HIDE_CODE_EDITOR_OUTPUT_VIEWER_WITH_ONLY_QUIZ_STEPS, hide_code_editor_filetree_controls_with_only_quiz_steps=parsed.HIDE_CODE_EDITOR_FILETREE_CONTROLS_WITH_ONLY_QUIZ_STEPS, new_auto_test_ubuntu_20_04_base_image_ids=parsed.NEW_AUTO_TEST_UBUNTU_20_04_BASE_IMAGE_IDS, new_auto_test_ubuntu_24_04_base_image_ids=parsed.NEW_AUTO_TEST_UBUNTU_24_04_BASE_IMAGE_IDS, quiz_minimum_questions_for_dropdown=parsed.QUIZ_MINIMUM_QUESTIONS_FOR_DROPDOWN, simple_submission_navigate_to_latest_editor_session=parsed.SIMPLE_SUBMISSION_NAVIGATE_TO_LATEST_EDITOR_SESSION, access_token_modal_warning_time=parsed.ACCESS_TOKEN_MODAL_WARNING_TIME, access_token_toast_warning_time=parsed.ACCESS_TOKEN_TOAST_WARNING_TIME, login_token_before_time=parsed.LOGIN_TOKEN_BEFORE_TIME, student_payment_main_option=parsed.STUDENT_PAYMENT_MAIN_OPTION, lti_lock_date_copying_enabled=parsed.LTI_LOCK_DATE_COPYING_ENABLED, blackboard_zip_upload_enabled=parsed.BLACKBOARD_ZIP_UPLOAD_ENABLED, is_pearson=parsed.IS_PEARSON, max_file_size=parsed.MAX_FILE_SIZE, max_large_upload_size=parsed.MAX_LARGE_UPLOAD_SIZE, max_normal_upload_size=parsed.MAX_NORMAL_UPLOAD_SIZE, default_course_ta_role=parsed.DEFAULT_COURSE_TA_ROLE, new_auto_test_default_os=parsed.NEW_AUTO_TEST_DEFAULT_OS, send_registration_email=parsed.SEND_REGISTRATION_EMAIL, jwt_access_token_expires=parsed.JWT_ACCESS_TOKEN_EXPIRES, min_password_score=parsed.MIN_PASSWORD_SCORE, payments_provider=parsed.PAYMENTS_PROVIDER, per_course_payment_allowed=parsed.PER_COURSE_PAYMENT_ALLOWED, hubspot_syncing_enabled=parsed.HUBSPOT_SYNCING_ENABLED, lti_1p3_nonce_and_state_validation_enabled=parsed.LTI_1P3_NONCE_AND_STATE_VALIDATION_ENABLED, lti_1p3_system_role_from_context_role=parsed.LTI_1P3_SYSTEM_ROLE_FROM_CONTEXT_ROLE, lti_launch_data_logging=parsed.LTI_LAUNCH_DATA_LOGGING, lti_role_switching=parsed.LTI_ROLE_SWITCHING, name_and_email_from_nrps_only=parsed.NAME_AND_EMAIL_FROM_NRPS_ONLY, sso_username_decollision_enabled=parsed.SSO_USERNAME_DECOLLISION_ENABLED, ) res.raw_data = d return res
import os if os.getenv("CG_GENERATING_DOCS", "False").lower() in ("", "true"): import datetime from cg_maybe import Maybe, Nothing from cg_maybe.utils import maybe_from_nullable from .fraction import Fraction