"""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