From 790a67a0d13229dc76261b6e1bce423d7a65589f Mon Sep 17 00:00:00 2001 From: coder1918 Date: Tue, 2 Sep 2025 23:54:05 -0600 Subject: [PATCH] refactor: flatten FEATURES dictionary with backward compatible proxy --- cms/envs/common.py | 652 +++--- cms/envs/devstack.py | 28 +- cms/envs/production.py | 11 +- cms/envs/test.py | 37 +- lms/djangoapps/discussion/settings/common.py | 2 +- lms/djangoapps/instructor/settings/common.py | 180 +- .../instructor/settings/production.py | 4 +- lms/djangoapps/instructor/settings/test.py | 4 +- lms/envs/common.py | 2007 +++++++++-------- lms/envs/devstack.py | 66 +- lms/envs/production.py | 25 +- lms/envs/test.py | 55 +- .../djangoapps/ace_common/settings/common.py | 2 +- .../core/djangoapps/models/course_details.py | 5 +- openedx/core/lib/features_setting_proxy.py | 106 + openedx/envs/common.py | 2 + .../features/announcements/settings/common.py | 4 +- .../features/announcements/settings/test.py | 2 +- 18 files changed, 1657 insertions(+), 1535 deletions(-) create mode 100644 openedx/core/lib/features_setting_proxy.py diff --git a/cms/envs/common.py b/cms/envs/common.py index 13811d2a13..273eb9f191 100644 --- a/cms/envs/common.py +++ b/cms/envs/common.py @@ -66,6 +66,10 @@ from openedx.core.djangoapps.theming.helpers_dirs import ( from openedx.core.lib.license import LicenseMixin from openedx.core.lib.derived import Derived from openedx.core.release import doc_version +from openedx.core.lib.features_setting_proxy import FeaturesProxy + +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) # pylint: enable=useless-suppression @@ -110,387 +114,385 @@ FAVICON_PATH = 'images/favicon.ico' # templates. STUDIO_NAME = _("Your Platform Studio") STUDIO_SHORT_NAME = _("Studio") -FEATURES = { - 'GITHUB_PUSH': False, - # See annotations in lms/envs/common.py for details. - 'ENABLE_DISCUSSION_SERVICE': True, - # See annotations in lms/envs/common.py for details. - 'ENABLE_TEXTBOOK': True, +# FEATURES - # When True, all courses will be active, regardless of start date - # DO NOT SET TO True IN THIS FILE - # Doing so will cause all courses to be released on production - 'DISABLE_START_DATES': False, +GITHUB_PUSH = False - # email address for studio staff (eg to request course creation) - 'STUDIO_REQUEST_EMAIL': '', +# See annotations in lms/envs/common.py for details. +ENABLE_DISCUSSION_SERVICE = True +# See annotations in lms/envs/common.py for details. +ENABLE_TEXTBOOK = True - # Segment - must explicitly turn it on for production - 'CMS_SEGMENT_KEY': None, +# When True, all courses will be active, regardless of start date +# DO NOT SET TO True IN THIS FILE +# Doing so will cause all courses to be released on production +DISABLE_START_DATES = False - # Enable URL that shows information about the status of various services - 'ENABLE_SERVICE_STATUS': False, +# email address for studio staff (eg to request course creation) +STUDIO_REQUEST_EMAIL = '' - # Don't autoplay videos for course authors - 'AUTOPLAY_VIDEOS': False, +# Segment - must explicitly turn it on for production +CMS_SEGMENT_KEY = None - # Move the course author to next page when a video finishes. Set to True to - # show an auto-advance button in videos. If False, videos never auto-advance. - 'ENABLE_AUTOADVANCE_VIDEOS': False, +# Enable URL that shows information about the status of various services +ENABLE_SERVICE_STATUS = False - # If set to True, new Studio users won't be able to author courses unless - # an Open edX admin has added them to the course creator group. - 'ENABLE_CREATOR_GROUP': True, +# Don't autoplay videos for course authors +AUTOPLAY_VIDEOS = False - # If set to True, organization staff members can create libraries for their specific - # organization and no other organizations. They do not need to be course creators, - # even when ENABLE_CREATOR_GROUP is True. - 'ENABLE_ORGANIZATION_STAFF_ACCESS_FOR_CONTENT_LIBRARIES': True, +# Move the course author to next page when a video finishes. Set to True to +# show an auto-advance button in videos. If False, videos never auto-advance. +ENABLE_AUTOADVANCE_VIDEOS = False - # Turn off account locking if failed login attempts exceeds a limit - 'ENABLE_MAX_FAILED_LOGIN_ATTEMPTS': False, +# If set to True, new Studio users won't be able to author courses unless +# an Open edX admin has added them to the course creator group. +ENABLE_CREATOR_GROUP = True - # .. toggle_name: FEATURES['EDITABLE_SHORT_DESCRIPTION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: This feature flag allows editing of short descriptions on the Schedule & Details page in - # Open edX Studio. Set to False if you want to disable the editing of the course short description. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-02-13 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2334 - 'EDITABLE_SHORT_DESCRIPTION': True, +# If set to True, organization staff members can create libraries for their specific +# organization and no other organizations. They do not need to be course creators, +# even when ENABLE_CREATOR_GROUP is True. +ENABLE_ORGANIZATION_STAFF_ACCESS_FOR_CONTENT_LIBRARIES = True - # Hide any Personally Identifiable Information from application logs - 'SQUELCH_PII_IN_LOGS': False, +# Turn off account locking if failed login attempts exceeds a limit +ENABLE_MAX_FAILED_LOGIN_ATTEMPTS = False - # Toggles the embargo functionality, which blocks users - # based on their location. - 'EMBARGO': False, +# .. toggle_name: settings.EDITABLE_SHORT_DESCRIPTION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: This feature flag allows editing of short descriptions on the Schedule & Details page in +# Open edX Studio. Set to False if you want to disable the editing of the course short description. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-02-13 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2334 +EDITABLE_SHORT_DESCRIPTION = True - # Allow creating courses with non-ascii characters in the course id - 'ALLOW_UNICODE_COURSE_ID': False, +# Hide any Personally Identifiable Information from application logs +SQUELCH_PII_IN_LOGS = False - # Prevent concurrent logins per user - 'PREVENT_CONCURRENT_LOGINS': False, +# Toggles the embargo functionality, which blocks users +# based on their location. +EMBARGO = False - # Turn off Video Upload Pipeline through Studio, by default - 'ENABLE_VIDEO_UPLOAD_PIPELINE': False, +# Allow creating courses with non-ascii characters in the course id +ALLOW_UNICODE_COURSE_ID = False - # See annotations in lms/envs/common.py for details. - 'ENABLE_EDXNOTES': False, +# Prevent concurrent logins per user +PREVENT_CONCURRENT_LOGINS = False - # Toggle to enable coordination with the Publisher tool (keep in sync with lms/envs/common.py) - 'ENABLE_PUBLISHER': False, +# Turn off Video Upload Pipeline through Studio, by default +ENABLE_VIDEO_UPLOAD_PIPELINE = False - # Show a new field in "Advanced settings" that can store custom data about a - # course and that can be read from themes - 'ENABLE_OTHER_COURSE_SETTINGS': False, +# See annotations in lms/envs/common.py for details. +ENABLE_EDXNOTES = False - # Write new CSM history to the extended table. - # This will eventually default to True and may be - # removed since all installs should have the separate - # extended history table. This is needed in the LMS and CMS - # for migration consistency. - 'ENABLE_CSMH_EXTENDED': True, +# Toggle to enable coordination with the Publisher tool (keep in sync with lms/envs/common.py) +ENABLE_PUBLISHER = False - # Enable support for content libraries. Note that content libraries are - # only supported in courses using split mongo. - 'ENABLE_CONTENT_LIBRARIES': True, +# Show a new field in "Advanced settings" that can store custom data about a +# course and that can be read from themes +ENABLE_OTHER_COURSE_SETTINGS = False - # .. toggle_name: FEATURES['ENABLE_CONTENT_LIBRARIES_LTI_TOOL'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set to True, Content Libraries in - # Studio can be used as an LTI 1.3 tool by external LTI platforms. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-08-17 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/27411 - 'ENABLE_CONTENT_LIBRARIES_LTI_TOOL': False, +# Write new CSM history to the extended table. +# This will eventually default to True and may be +# removed since all installs should have the separate +# extended history table. This is needed in the LMS and CMS +# for migration consistency. +ENABLE_CSMH_EXTENDED = True - # Milestones application flag - 'MILESTONES_APP': False, +# Enable support for content libraries. Note that content libraries are +# only supported in courses using split mongo. +ENABLE_CONTENT_LIBRARIES = True - # Prerequisite courses feature flag - 'ENABLE_PREREQUISITE_COURSES': False, +# .. toggle_name: settings.ENABLE_CONTENT_LIBRARIES_LTI_TOOL +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set to True, Content Libraries in +# Studio can be used as an LTI 1.3 tool by external LTI platforms. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-08-17 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/27411 +ENABLE_CONTENT_LIBRARIES_LTI_TOOL = False - # Toggle course entrance exams feature - 'ENTRANCE_EXAMS': False, +# Milestones application flag +MILESTONES_APP = False - # Toggle platform-wide course licensing - 'LICENSING': False, +# Prerequisite courses feature flag +ENABLE_PREREQUISITE_COURSES = False - # Enable the courseware search functionality - 'ENABLE_COURSEWARE_INDEX': False, +# Toggle course entrance exams feature +ENTRANCE_EXAMS = False - # Enable content libraries (modulestore) search functionality - 'ENABLE_LIBRARY_INDEX': False, +# Toggle platform-wide course licensing +LICENSING = False - # .. toggle_name: FEATURES['ALLOW_COURSE_RERUNS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: This will allow staff member to re-run the course from the studio home page and will - # always use the split modulestore. When this is set to False, the Re-run Course link will not be available on - # the studio home page. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-02-13 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6965 - 'ALLOW_COURSE_RERUNS': True, +# Enable the courseware search functionality +ENABLE_COURSEWARE_INDEX = False - # Certificates Web/HTML Views - 'CERTIFICATES_HTML_VIEW': False, +# Enable content libraries (modulestore) search functionality +ENABLE_LIBRARY_INDEX = False - # Teams feature - 'ENABLE_TEAMS': True, +# .. toggle_name: settings.ALLOW_COURSE_RERUNS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: This will allow staff member to re-run the course from the studio home page and will +# always use the split modulestore. When this is set to False, the Re-run Course link will not be available on +# the studio home page. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-02-13 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6965 +ALLOW_COURSE_RERUNS = True - # Show video bumper in Studio - 'ENABLE_VIDEO_BUMPER': False, +# Certificates Web/HTML Views +CERTIFICATES_HTML_VIEW = False - # How many seconds to show the bumper again, default is 7 days: - 'SHOW_BUMPER_PERIODICITY': 7 * 24 * 3600, +# Teams feature +ENABLE_TEAMS = True - # Enable credit eligibility feature - 'ENABLE_CREDIT_ELIGIBILITY': ENABLE_CREDIT_ELIGIBILITY, +# Show video bumper in Studio +ENABLE_VIDEO_BUMPER = False - # Special Exams, aka Timed and Proctored Exams - 'ENABLE_SPECIAL_EXAMS': False, +# How many seconds to show the bumper again, default is 7 days: +SHOW_BUMPER_PERIODICITY = 7 * 24 * 3600 - # Show the language selector in the header - 'SHOW_HEADER_LANGUAGE_SELECTOR': False, +# Special Exams, aka Timed and Proctored Exams +ENABLE_SPECIAL_EXAMS = False - # At edX it's safe to assume that English transcripts are always available - # This is not the case for all installations. - # The default value in {lms,cms}/envs/common.py and xmodule/tests/test_video.py should be consistent. - 'FALLBACK_TO_ENGLISH_TRANSCRIPTS': True, +# Show the language selector in the header +SHOW_HEADER_LANGUAGE_SELECTOR = False - # Set this to False to facilitate cleaning up invalid xml from your modulestore. - 'ENABLE_XBLOCK_XML_VALIDATION': True, +# At edX it's safe to assume that English transcripts are always available +# This is not the case for all installations. +# The default value in {lms,cms}/envs/common.py and xmodule/tests/test_video.py should be consistent. +FALLBACK_TO_ENGLISH_TRANSCRIPTS = True - # Allow public account creation - 'ALLOW_PUBLIC_ACCOUNT_CREATION': True, +# Set this to False to facilitate cleaning up invalid xml from your modulestore. +ENABLE_XBLOCK_XML_VALIDATION = True - # Allow showing the registration links - 'SHOW_REGISTRATION_LINKS': True, +# Allow public account creation +ALLOW_PUBLIC_ACCOUNT_CREATION = True - # Whether or not the dynamic EnrollmentTrackUserPartition should be registered. - 'ENABLE_ENROLLMENT_TRACK_USER_PARTITION': True, +# Allow showing the registration links +SHOW_REGISTRATION_LINKS = True - 'ENABLE_PASSWORD_RESET_FAILURE_EMAIL': False, +# Whether or not the dynamic EnrollmentTrackUserPartition should be registered. +ENABLE_ENROLLMENT_TRACK_USER_PARTITION = True - # Whether archived courses (courses with end dates in the past) should be - # shown in Studio in a separate list. - 'ENABLE_SEPARATE_ARCHIVED_COURSES': True, +ENABLE_PASSWORD_RESET_FAILURE_EMAIL = False - # For acceptance and load testing - 'AUTOMATIC_AUTH_FOR_TESTING': False, +# Whether archived courses (courses with end dates in the past) should be +# shown in Studio in a separate list. +ENABLE_SEPARATE_ARCHIVED_COURSES = True - # Prevent auto auth from creating superusers or modifying existing users - 'RESTRICT_AUTOMATIC_AUTH': True, +# For acceptance and load testing +AUTOMATIC_AUTH_FOR_TESTING = False - 'ENABLE_GRADE_DOWNLOADS': True, - 'ENABLE_MKTG_SITE': False, - 'ENABLE_DISCUSSION_HOME_PANEL': True, - 'ENABLE_CORS_HEADERS': False, - 'ENABLE_CROSS_DOMAIN_CSRF_COOKIE': False, - 'ENABLE_COUNTRY_ACCESS': False, - 'ENABLE_CREDIT_API': False, - 'ENABLE_OAUTH2_PROVIDER': False, - 'ENABLE_MOBILE_REST_API': False, - 'CUSTOM_COURSES_EDX': False, - 'ENABLE_READING_FROM_MULTIPLE_HISTORY_TABLES': True, - 'SHOW_FOOTER_LANGUAGE_SELECTOR': False, - 'ENABLE_ENROLLMENT_RESET': False, - # Settings for course import olx validation - 'ENABLE_COURSE_OLX_VALIDATION': False, - # .. toggle_name: FEATURES['DISABLE_MOBILE_COURSE_AVAILABLE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to remove Mobile Course Available UI Flag from Studio's Advanced Settings - # page else Mobile Course Available UI Flag will be available on Studio side. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2020-02-14 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/23073 - 'DISABLE_MOBILE_COURSE_AVAILABLE': False, +# Prevent auto auth from creating superusers or modifying existing users +RESTRICT_AUTOMATIC_AUTH = True - # .. toggle_name: FEATURES['ENABLE_CHANGE_USER_PASSWORD_ADMIN'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable changing a user password through django admin. This is disabled by - # default because enabling allows a method to bypass password policy. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2020-02-21 - # .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/21616' - 'ENABLE_CHANGE_USER_PASSWORD_ADMIN': False, +ENABLE_GRADE_DOWNLOADS = True +ENABLE_MKTG_SITE = False +ENABLE_DISCUSSION_HOME_PANEL = True +ENABLE_CORS_HEADERS = False +ENABLE_CROSS_DOMAIN_CSRF_COOKIE = False +ENABLE_COUNTRY_ACCESS = False +ENABLE_CREDIT_API = False +ENABLE_OAUTH2_PROVIDER = False +ENABLE_MOBILE_REST_API = False +CUSTOM_COURSES_EDX = False +ENABLE_READING_FROM_MULTIPLE_HISTORY_TABLES = True +SHOW_FOOTER_LANGUAGE_SELECTOR = False +ENABLE_ENROLLMENT_RESET = False +# Settings for course import olx validation +ENABLE_COURSE_OLX_VALIDATION = False +# .. toggle_name: settings.DISABLE_MOBILE_COURSE_AVAILABLE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to remove Mobile Course Available UI Flag from Studio's Advanced Settings +# page else Mobile Course Available UI Flag will be available on Studio side. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2020-02-14 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/23073 +DISABLE_MOBILE_COURSE_AVAILABLE = False - ### ORA Feature Flags ### - # .. toggle_name: FEATURES['ENABLE_ORA_ALL_FILE_URLS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not - # discoverable. If enabled, will iterate through all possible file key suffixes up to the max for displaying file - # metadata in staff assessments. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-03-03 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_ORA_ALL_FILE_URLS': False, +# .. toggle_name: settings.ENABLE_CHANGE_USER_PASSWORD_ADMIN +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable changing a user password through django admin. This is disabled by +# default because enabling allows a method to bypass password policy. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2020-02-21 +# .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/21616' +ENABLE_CHANGE_USER_PASSWORD_ADMIN = False - # .. toggle_name: FEATURES['ENABLE_ORA_USER_STATE_UPLOAD_DATA'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not - # discoverable. If enabled, will pull file metadata from StudentModule.state for display in staff assessments. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-03-03 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_ORA_USER_STATE_UPLOAD_DATA': False, +### ORA Feature Flags ### +# .. toggle_name: settings.ENABLE_ORA_ALL_FILE_URLS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not +# discoverable. If enabled, will iterate through all possible file key suffixes up to the max for displaying file +# metadata in staff assessments. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-03-03 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_ORA_ALL_FILE_URLS = False - # .. toggle_name: FEATURES['DEPRECATE_OLD_COURSE_KEYS_IN_STUDIO'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Warn about removing support for deprecated course keys. - # To enable, set to True. - # To disable, set to False. - # To enable with a custom support deadline, set to an ISO-8601 date string: - # eg: '2020-09-01' - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-06-12 - # .. toggle_target_removal_date: 2021-04-01 - # .. toggle_warning: This can be removed once support is removed for deprecated - # course keys. - # .. toggle_tickets: https://openedx.atlassian.net/browse/DEPR-58 - 'DEPRECATE_OLD_COURSE_KEYS_IN_STUDIO': True, +# .. toggle_name: settings.ENABLE_ORA_USER_STATE_UPLOAD_DATA +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not +# discoverable. If enabled, will pull file metadata from StudentModule.state for display in staff assessments. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-03-03 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_ORA_USER_STATE_UPLOAD_DATA = False - # .. toggle_name: FEATURES['DISABLE_COURSE_CREATION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If set to True, it disables the course creation functionality and hides the "New Course" - # button in studio. - # It is important to note that the value of this flag only affects if the user doesn't have a staff role, - # otherwise the course creation functionality will work as it should. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-12-02 - # .. toggle_warning: Another toggle DISABLE_LIBRARY_CREATION overrides DISABLE_COURSE_CREATION, if present. - 'DISABLE_COURSE_CREATION': False, +# .. toggle_name: settings.DEPRECATE_OLD_COURSE_KEYS_IN_STUDIO +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Warn about removing support for deprecated course keys. +# To enable, set to True. +# To disable, set to False. +# To enable with a custom support deadline, set to an ISO-8601 date string: +# eg: '2020-09-01' +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-06-12 +# .. toggle_target_removal_date: 2021-04-01 +# .. toggle_warning: This can be removed once support is removed for deprecated +# course keys. +# .. toggle_tickets: https://openedx.atlassian.net/browse/DEPR-58 +DEPRECATE_OLD_COURSE_KEYS_IN_STUDIO = True - # Can be turned off to disable the help link in the navbar - # .. toggle_name: FEATURES['ENABLE_HELP_LINK'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When True, a help link is displayed on the main navbar. Set False to hide it. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-03-05 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/26106 - 'ENABLE_HELP_LINK': True, +# .. toggle_name: settings.DISABLE_COURSE_CREATION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If set to True, it disables the course creation functionality and hides the "New Course" +# button in studio. +# It is important to note that the value of this flag only affects if the user doesn't have a staff role, +# otherwise the course creation functionality will work as it should. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-12-02 +# .. toggle_warning: Another toggle DISABLE_LIBRARY_CREATION overrides DISABLE_COURSE_CREATION, if present. +DISABLE_COURSE_CREATION = False - # .. toggle_name: FEATURES['ENABLE_INTEGRITY_SIGNATURE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Whether to replace ID verification course/certificate requirement - # with an in-course Honor Code agreement - # (https://github.com/edx/edx-name-affirmation) - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-02-15 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1348' - 'ENABLE_INTEGRITY_SIGNATURE': False, +# Can be turned off to disable the help link in the navbar +# .. toggle_name: settings.ENABLE_HELP_LINK +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When True, a help link is displayed on the main navbar. Set False to hide it. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-03-05 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/26106 +ENABLE_HELP_LINK = True - # .. toggle_name: FEATURES['ENABLE_LTI_PII_ACKNOWLEDGEMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enables the lti pii acknowledgement feature for a course - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2023-10 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://2u-internal.atlassian.net/browse/MST-2055' - 'ENABLE_LTI_PII_ACKNOWLEDGEMENT': False, +# .. toggle_name: settings.ENABLE_INTEGRITY_SIGNATURE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Whether to replace ID verification course/certificate requirement +# with an in-course Honor Code agreement +# (https://github.com/edx/edx-name-affirmation) +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-02-15 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1348' +ENABLE_INTEGRITY_SIGNATURE = False - # .. toggle_name: MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If enabled, the Library Content Block is marked as complete when users view it. - # Otherwise (by default), all children of this block must be completed. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-03-22 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/28268 - # .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name - # in the LMS and CMS. - 'MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW': False, +# .. toggle_name: settings.ENABLE_LTI_PII_ACKNOWLEDGEMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enables the lti pii acknowledgement feature for a course +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2023-10 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://2u-internal.atlassian.net/browse/MST-2055' +ENABLE_LTI_PII_ACKNOWLEDGEMENT = False - # .. toggle_name: FEATURES['DISABLE_UNENROLLMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to disable self-unenrollments via REST API. - # This also hides the "Unenroll" button on the Learner Dashboard. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-10-11 - # .. toggle_warning: For consistency in user experience, keep the value in sync with the setting of the same name - # in the LMS and CMS. - # .. toggle_tickets: 'https://github.com/open-craft/edx-platform/pull/429' - 'DISABLE_UNENROLLMENT': False, +# .. toggle_name: MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If enabled, the Library Content Block is marked as complete when users view it. +# Otherwise (by default), all children of this block must be completed. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-03-22 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/28268 +# .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name +# in the LMS and CMS. +MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW = False - # .. toggle_name: FEATURES['DISABLE_ADVANCED_SETTINGS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to `True` to disable the advanced settings page in Studio for all users except those - # having `is_superuser` or `is_staff` set to `True`. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2023-03-31 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/32015 - 'DISABLE_ADVANCED_SETTINGS': False, +# .. toggle_name: settings.DISABLE_UNENROLLMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to disable self-unenrollments via REST API. +# This also hides the "Unenroll" button on the Learner Dashboard. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-10-11 +# .. toggle_warning: For consistency in user experience, keep the value in sync with the setting of the same name +# in the LMS and CMS. +# .. toggle_tickets: 'https://github.com/open-craft/edx-platform/pull/429' +DISABLE_UNENROLLMENT = False - # .. toggle_name: FEATURES['ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enables sending xblock lifecycle events over the event bus. Used to create the - # EVENT_BUS_PRODUCER_CONFIG setting - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2023-10-10 - # .. toggle_target_removal_date: 2023-10-12 - # .. toggle_warning: The default may be changed in a later release. See - # https://github.com/openedx/openedx-events/issues/265 - # .. toggle_tickets: https://github.com/edx/edx-arch-experiments/issues/381 - 'ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS': False, +# .. toggle_name: settings.DISABLE_ADVANCED_SETTINGS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to `True` to disable the advanced settings page in Studio for all users except those +# having `is_superuser` or `is_staff` set to `True`. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2023-03-31 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/32015 +DISABLE_ADVANCED_SETTINGS = False - # .. toggle_name: FEATURES['ENABLE_HIDE_FROM_TOC_UI'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When enabled, exposes hide_from_toc xblock attribute so course authors can configure it as - # a section visibility option in Studio. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-02-29 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33952 - 'ENABLE_HIDE_FROM_TOC_UI': False, +# .. toggle_name: settings.ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enables sending xblock lifecycle events over the event bus. Used to create the +# EVENT_BUS_PRODUCER_CONFIG setting +# .. toggle_use_cases: opt_in +# .. toggle_creation_date: 2023-10-10 +# .. toggle_target_removal_date: 2023-10-12 +# .. toggle_warning: The default may be changed in a later release. See +# https://github.com/openedx/openedx-events/issues/265 +# .. toggle_tickets: https://github.com/edx/edx-arch-experiments/issues/381 +ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS = False - # .. toggle_name: FEATURES['ENABLE_GRADING_METHOD_IN_PROBLEMS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enables the grading method feature in capa problems. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-03-22 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33911 - 'ENABLE_GRADING_METHOD_IN_PROBLEMS': False, +# .. toggle_name: settings.ENABLE_HIDE_FROM_TOC_UI +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When enabled, exposes hide_from_toc xblock attribute so course authors can configure it as +# a section visibility option in Studio. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-02-29 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33952 +ENABLE_HIDE_FROM_TOC_UI = False - # .. toggle_name: FEATURES['BADGES_ENABLED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable the Badges feature. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-04-10 - 'BADGES_ENABLED': False, +# .. toggle_name: settings.ENABLE_GRADING_METHOD_IN_PROBLEMS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enables the grading method feature in capa problems. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-03-22 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33911 +ENABLE_GRADING_METHOD_IN_PROBLEMS = False - # .. toggle_name: FEATURES['IN_CONTEXT_DISCUSSION_ENABLED_DEFAULT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Set to False to disable in-context discussion for units by default. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-09-02 - 'IN_CONTEXT_DISCUSSION_ENABLED_DEFAULT': True, -} +# .. toggle_name: settings.BADGES_ENABLED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable the Badges feature. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-04-10 +BADGES_ENABLED = False + +# .. toggle_name: settings.IN_CONTEXT_DISCUSSION_ENABLED_DEFAULT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Set to False to disable in-context discussion for units by default. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-09-02 +IN_CONTEXT_DISCUSSION_ENABLED_DEFAULT = True # .. toggle_name: ENABLE_COPPA_COMPLIANCE # .. toggle_implementation: DjangoSetting @@ -1072,7 +1074,7 @@ X_FRAME_OPTIONS = 'DENY' # .. setting_name: GIT_REPO_EXPORT_DIR # .. setting_default: '/edx/var/edxapp/export_course_repos' # .. setting_description: When courses are exported to git, either with the export_git management command or the git -# export view from the studio (when FEATURES['ENABLE_EXPORT_GIT'] is True), they are stored in this directory, which +# export view from the studio (when settings.ENABLE_EXPORT_GIT is True), they are stored in this directory, which # must exist at the time of the export. GIT_REPO_EXPORT_DIR = '/edx/var/edxapp/export_course_repos' # .. setting_name: GIT_EXPORT_DEFAULT_IDENT @@ -1716,7 +1718,6 @@ LOGIN_ISSUE_SUPPORT_LINK = '' ############################## EVENT TRACKING ################################# -CMS_SEGMENT_KEY = None TRACK_MAX_EVENT = 50000 TRACKING_BACKENDS = { @@ -1854,9 +1855,6 @@ MAX_ASSET_UPLOAD_FILE_SIZE_IN_MB = 20 # a file that exceeds the above size MAX_ASSET_UPLOAD_FILE_SIZE_URL = "" -### Default value for entrance exam minimum score -ENTRANCE_EXAM_MIN_SCORE_PCT = 50 - ### Default language for a new course DEFAULT_COURSE_LANGUAGE = "en" @@ -2316,7 +2314,7 @@ FINANCIAL_REPORTS = { } ############# CORS headers for cross-domain requests ################# -if FEATURES.get('ENABLE_CORS_HEADERS'): +if ENABLE_CORS_HEADERS: CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = () CORS_ORIGIN_ALLOW_ALL = False @@ -2614,11 +2612,11 @@ SIMPLE_HISTORY_DATE_INDEX = False def _should_send_xblock_events(settings): - return settings.FEATURES['ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS'] + return settings.ENABLE_SEND_XBLOCK_LIFECYCLE_EVENTS_OVER_BUS def _should_send_learning_badge_events(settings): - return settings.FEATURES['BADGES_ENABLED'] + return settings.BADGES_ENABLED # .. setting_name: EVENT_BUS_PRODUCER_CONFIG diff --git a/cms/envs/devstack.py b/cms/envs/devstack.py index bda53a366c..d683f48708 100644 --- a/cms/envs/devstack.py +++ b/cms/envs/devstack.py @@ -50,7 +50,7 @@ FRONTEND_REGISTER_URL = LMS_ROOT_URL + '/register' ################################## Video Pipeline Settings ######################### -FEATURES['ENABLE_VIDEO_UPLOAD_PIPELINE'] = True +ENABLE_VIDEO_UPLOAD_PIPELINE = True ########################### PIPELINE ################################# @@ -126,7 +126,7 @@ def should_show_debug_toolbar(request): # lint-amnesty, pylint: disable=missing ################################ MILESTONES ################################ -FEATURES['MILESTONES_APP'] = True +MILESTONES_APP = True ########################### ORGANIZATIONS ################################# # Although production studio.edx.org disables `ORGANIZATIONS_AUTOCREATE`, @@ -136,16 +136,16 @@ FEATURES['MILESTONES_APP'] = True ORGANIZATIONS_AUTOCREATE = True ################################ ENTRANCE EXAMS ################################ -FEATURES['ENTRANCE_EXAMS'] = True +ENTRANCE_EXAMS = True ################################ COURSE LICENSES ################################ -FEATURES['LICENSING'] = True +LICENSING = True # Needed to enable licensing on video blocks XBLOCK_SETTINGS.update({'VideoBlock': {'licensing_enabled': True}}) ################################ SEARCH INDEX ################################ -FEATURES['ENABLE_COURSEWARE_INDEX'] = True -FEATURES['ENABLE_LIBRARY_INDEX'] = False +ENABLE_COURSEWARE_INDEX = True +ENABLE_LIBRARY_INDEX = False SEARCH_ENGINE = "search.elastic.ElasticSearchEngine" ELASTIC_SEARCH_CONFIG = [ @@ -157,22 +157,22 @@ ELASTIC_SEARCH_CONFIG = [ ] ################################ COURSE DISCUSSIONS ########################### -FEATURES['ENABLE_DISCUSSION_SERVICE'] = True +ENABLE_DISCUSSION_SERVICE = True ################################ CREDENTIALS ########################### CREDENTIALS_SERVICE_USERNAME = 'credentials_worker' ########################## Certificates Web/HTML View ####################### -FEATURES['CERTIFICATES_HTML_VIEW'] = True +CERTIFICATES_HTML_VIEW = True ########################## AUTHOR PERMISSION ####################### -FEATURES['ENABLE_CREATOR_GROUP'] = True +ENABLE_CREATOR_GROUP = True ########################## Library creation organizations restriction ####################### -FEATURES['ENABLE_ORGANIZATION_STAFF_ACCESS_FOR_CONTENT_LIBRARIES'] = True +ENABLE_ORGANIZATION_STAFF_ACCESS_FOR_CONTENT_LIBRARIES = True ################### FRONTEND APPLICATION PUBLISHER URL ################### -FEATURES['FRONTEND_APP_PUBLISHER_URL'] = 'http://localhost:18400' +FRONTEND_APP_PUBLISHER_URL = 'http://localhost:18400' ################### FRONTEND APPLICATION COURSE AUTHORING ################### COURSE_AUTHORING_MICROFRONTEND_URL = 'http://localhost:2001' @@ -252,13 +252,13 @@ MODULESTORE = convert_module_store_setting_if_needed(MODULESTORE) SECRET_KEY = '85920908f28904ed733fe576320db18cabd7b6cd' ############# CORS headers for cross-domain requests ################# -FEATURES['ENABLE_CORS_HEADERS'] = True +ENABLE_CORS_HEADERS = True CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_ALLOW_ALL = True ################### Special Exams (Proctoring) and Prereqs ################### -FEATURES['ENABLE_SPECIAL_EXAMS'] = True -FEATURES['ENABLE_PREREQUISITE_COURSES'] = True +ENABLE_SPECIAL_EXAMS = True +ENABLE_PREREQUISITE_COURSES = True # Used in edx-proctoring for ID generation in lieu of SECRET_KEY - dummy value # (ref MST-637) diff --git a/cms/envs/production.py b/cms/envs/production.py index 346a60da66..f2d7ab88e4 100644 --- a/cms/envs/production.py +++ b/cms/envs/production.py @@ -29,6 +29,11 @@ from openedx.core.lib.derived import derive_settings # lint-amnesty, pylint: di from openedx.core.lib.logsettings import get_logger_config # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.modulestore_settings import convert_module_store_setting_if_needed # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.lib.features_setting_proxy import FeaturesProxy + +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) + def get_env_setting(setting): """ Get the environment setting or return exception """ @@ -286,7 +291,7 @@ EVENT_TRACKING_BACKENDS['segmentio']['OPTIONS']['processors'][0]['OPTIONS']['whi ) -if FEATURES['ENABLE_COURSEWARE_INDEX'] or FEATURES['ENABLE_LIBRARY_INDEX']: +if ENABLE_COURSEWARE_INDEX or ENABLE_LIBRARY_INDEX: # Use ElasticSearch for the search engine SEARCH_ENGINE = "search.elastic.ElasticSearchEngine" @@ -302,7 +307,7 @@ XBLOCK_SETTINGS.setdefault("VideoBlock", {})['YOUTUBE_API_KEY'] = YOUTUBE_API_KE JWT_AUTH.update(_YAML_TOKENS.get('JWT_AUTH', {})) ######################## CUSTOM COURSES for EDX CONNECTOR ###################### -if FEATURES['CUSTOM_COURSES_EDX']: +if CUSTOM_COURSES_EDX: INSTALLED_APPS.append('openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig') ########################## Extra middleware classes ####################### @@ -347,7 +352,7 @@ add_plugins(__name__, ProjectType.CMS, SettingsType.PRODUCTION) #### ############# CORS headers for cross-domain requests ################# -if FEATURES['ENABLE_CORS_HEADERS']: +if ENABLE_CORS_HEADERS: CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = _YAML_TOKENS.get('CORS_ORIGIN_WHITELIST', ()) CORS_ORIGIN_ALLOW_ALL = _YAML_TOKENS.get('CORS_ORIGIN_ALLOW_ALL', False) diff --git a/cms/envs/test.py b/cms/envs/test.py index 23131c699f..1e249f18d0 100644 --- a/cms/envs/test.py +++ b/cms/envs/test.py @@ -23,6 +23,8 @@ from openedx.core.lib.derived import derive_settings from xmodule.modulestore.modulestore_settings import update_module_store_settings # pylint: disable=wrong-import-order +from openedx.core.lib.features_setting_proxy import FeaturesProxy + from .common import * # import settings from LMS for consistent behavior with CMS @@ -46,6 +48,8 @@ from lms.envs.test import ( # pylint: disable=wrong-import-order, disable=unuse XBLOCK_RUNTIME_V2_EPHEMERAL_DATA_CACHE, ) +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) # Include a non-ascii character in STUDIO_NAME and STUDIO_SHORT_NAME to uncover possible # UnicodeEncodeErrors in tests. Also use lazy text to reveal possible json dumps errors @@ -72,7 +76,7 @@ DATA_DIR = TEST_ROOT / "data" COMMON_TEST_DATA_ROOT = COMMON_ROOT / "test" / "data" # For testing "push to lms" -FEATURES["ENABLE_EXPORT_GIT"] = True +ENABLE_EXPORT_GIT = True GIT_REPO_EXPORT_DIR = TEST_ROOT / "export_course_repos" # TODO (cpennington): We need to figure out how envs/test.py can inject things into common.py so that we don't have to repeat this sort of thing # lint-amnesty, pylint: disable=line-too-long @@ -203,51 +207,50 @@ PASSWORD_HASHERS = [ # No segment key CMS_SEGMENT_KEY = None -FEATURES["DISABLE_SET_JWT_COOKIES_FOR_TESTS"] = True +DISABLE_SET_JWT_COOKIES_FOR_TESTS = True -FEATURES["ENABLE_SERVICE_STATUS"] = True +ENABLE_SERVICE_STATUS = True # Toggles embargo on for testing -FEATURES["EMBARGO"] = True +EMBARGO = True TEST_THEME = COMMON_ROOT / "test" / "test-theme" # For consistency in user-experience, keep the value of this setting in sync with # the one in lms/envs/test.py -FEATURES["ENABLE_DISCUSSION_SERVICE"] = False +ENABLE_DISCUSSION_SERVICE = False # Enable a parental consent age limit for testing PARENTAL_CONSENT_AGE_LIMIT = 13 # Enable certificates for the tests -FEATURES["CERTIFICATES_HTML_VIEW"] = True +CERTIFICATES_HTML_VIEW = True # Enable content libraries code for the tests -FEATURES["ENABLE_CONTENT_LIBRARIES"] = True +ENABLE_CONTENT_LIBRARIES = True -FEATURES["ENABLE_EDXNOTES"] = True +ENABLE_EDXNOTES = True # MILESTONES -FEATURES["MILESTONES_APP"] = True +MILESTONES_APP = True # ENTRANCE EXAMS -FEATURES["ENTRANCE_EXAMS"] = True -ENTRANCE_EXAM_MIN_SCORE_PCT = 50 +ENTRANCE_EXAMS = True VIDEO_CDN_URL = {"CN": "http://api.xuetangx.com/edx/video?s3_url="} # Courseware Search Index -FEATURES["ENABLE_COURSEWARE_INDEX"] = True -FEATURES["ENABLE_LIBRARY_INDEX"] = True +ENABLE_COURSEWARE_INDEX = True +ENABLE_LIBRARY_INDEX = True SEARCH_ENGINE = "search.tests.mock_search_engine.MockSearchEngine" -FEATURES["ENABLE_ENROLLMENT_TRACK_USER_PARTITION"] = True +ENABLE_ENROLLMENT_TRACK_USER_PARTITION = True ########################## AUTHOR PERMISSION ####################### -FEATURES["ENABLE_CREATOR_GROUP"] = False +ENABLE_CREATOR_GROUP = False # teams feature -FEATURES["ENABLE_TEAMS"] = True +ENABLE_TEAMS = True # Dummy secret key for dev/test SECRET_KEY = "85920908f28904ed733fe576320db18cabd7b6cd" @@ -257,7 +260,7 @@ INSTALLED_APPS += [ "openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig", "common.djangoapps.third_party_auth.apps.ThirdPartyAuthConfig", ] -FEATURES["CUSTOM_COURSES_EDX"] = True +CUSTOM_COURSES_EDX = True ########################## VIDEO IMAGE STORAGE ############################ VIDEO_IMAGE_SETTINGS = dict( diff --git a/lms/djangoapps/discussion/settings/common.py b/lms/djangoapps/discussion/settings/common.py index 732bc24fd5..882687a2d6 100644 --- a/lms/djangoapps/discussion/settings/common.py +++ b/lms/djangoapps/discussion/settings/common.py @@ -10,7 +10,7 @@ def plugin_settings(settings): # .. toggle_use_cases: open_edx # .. toggle_creation_date: 2015-06-15 # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/8474 - settings.FEATURES['ALLOW_HIDING_DISCUSSION_TAB'] = False + settings.ALLOW_HIDING_DISCUSSION_TAB = False settings.DISCUSSION_SETTINGS = { 'MAX_COMMENT_DEPTH': 2, 'COURSE_PUBLISH_TASK_DELAY': 30, diff --git a/lms/djangoapps/instructor/settings/common.py b/lms/djangoapps/instructor/settings/common.py index 052405ab32..c8609d8750 100644 --- a/lms/djangoapps/instructor/settings/common.py +++ b/lms/djangoapps/instructor/settings/common.py @@ -9,103 +9,101 @@ def plugin_settings(settings): ### Analytics Dashboard (Insights) settings settings.ANALYTICS_DASHBOARD_URL = "" settings.ANALYTICS_DASHBOARD_NAME = _('Your Platform Insights') - settings.FEATURES.update({ - # .. toggle_name: FEATURES['DISPLAY_ANALYTICS_ENROLLMENTS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Enable display of enrollment counts in instructor dashboard and - # analytics section. - # .. toggle_use_cases: opt_out - # .. toggle_creation_date: 2014-11-12 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5838 - 'DISPLAY_ANALYTICS_ENROLLMENTS': True, + # .. toggle_name: FEATURES['DISPLAY_ANALYTICS_ENROLLMENTS'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: True + # .. toggle_description: Enable display of enrollment counts in instructor dashboard and + # analytics section. + # .. toggle_use_cases: opt_out + # .. toggle_creation_date: 2014-11-12 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5838 + settings.DISPLAY_ANALYTICS_ENROLLMENTS = True - # .. toggle_name: FEATURES['ENABLE_CCX_ANALYTICS_DASHBOARD_URL'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Display the 'Analytics' tab in the instructor dashboard for CCX courses. - # Note: This has no effect unless ANALYTICS_DASHBOARD_URL is already set, because without that - # setting, the tab does not show up for any courses. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2016-10-07 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/13196 - 'ENABLE_CCX_ANALYTICS_DASHBOARD_URL': False, + # .. toggle_name: FEATURES['ENABLE_CCX_ANALYTICS_DASHBOARD_URL'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Display the 'Analytics' tab in the instructor dashboard for CCX courses. + # Note: This has no effect unless ANALYTICS_DASHBOARD_URL is already set, because without that + # setting, the tab does not show up for any courses. + # .. toggle_use_cases: opt_in + # .. toggle_creation_date: 2016-10-07 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/13196 + settings.ENABLE_CCX_ANALYTICS_DASHBOARD_URL = False - # .. setting_name: FEATURES['MAX_ENROLLMENT_INSTR_BUTTONS'] - # .. setting_default: 200 - # .. setting_description: Disable instructor dashboard buttons for downloading course data - # when enrollment exceeds this number. The number indicates the maximum allowed enrollments - # for the course to be considered "small". Courses exceeding the upper limit of "small" - # courses will have disabled buttons at the instructor dashboard. - 'MAX_ENROLLMENT_INSTR_BUTTONS': 200, + # .. setting_name: FEATURES['MAX_ENROLLMENT_INSTR_BUTTONS'] + # .. setting_default: 200 + # .. setting_description: Disable instructor dashboard buttons for downloading course data + # when enrollment exceeds this number. The number indicates the maximum allowed enrollments + # for the course to be considered "small". Courses exceeding the upper limit of "small" + # courses will have disabled buttons at the instructor dashboard. + settings.MAX_ENROLLMENT_INSTR_BUTTONS = 200 - # .. toggle_name: FEATURES['ENABLE_GRADE_DOWNLOADS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable grade CSV downloads from the instructor dashboard. Grade - # calculation started from the instructor dashboard will write grades CSV files to the - # configured storage backend and give links for downloads. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2016-07-06 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/11286 - 'ENABLE_GRADE_DOWNLOADS': False, + # .. toggle_name: FEATURES['ENABLE_GRADE_DOWNLOADS'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Enable grade CSV downloads from the instructor dashboard. Grade + # calculation started from the instructor dashboard will write grades CSV files to the + # configured storage backend and give links for downloads. + # .. toggle_use_cases: opt_in + # .. toggle_creation_date: 2016-07-06 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/11286 + settings.ENABLE_GRADE_DOWNLOADS = False - # .. toggle_name: FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable to give course staff unrestricted access to grade downloads; - # if set to False, only edX superusers can perform the downloads. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2018-03-26 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1750 - 'ALLOW_COURSE_STAFF_GRADE_DOWNLOADS': False, + # .. toggle_name: FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Enable to give course staff unrestricted access to grade downloads; + # if set to False, only edX superusers can perform the downloads. + # .. toggle_use_cases: opt_in + # .. toggle_creation_date: 2018-03-26 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1750 + settings.ALLOW_COURSE_STAFF_GRADE_DOWNLOADS = False - # .. toggle_name: FEATURES['ALLOW_AUTOMATED_SIGNUPS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable to show a section in the membership tab of the instructor - # dashboard to allow an upload of a CSV file that contains a list of new accounts to create - # and register for course. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2014-10-21 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5670 - 'ALLOW_AUTOMATED_SIGNUPS': False, + # .. toggle_name: FEATURES['ALLOW_AUTOMATED_SIGNUPS'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Enable to show a section in the membership tab of the instructor + # dashboard to allow an upload of a CSV file that contains a list of new accounts to create + # and register for course. + # .. toggle_use_cases: opt_in + # .. toggle_creation_date: 2014-10-21 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5670 + settings.ALLOW_AUTOMATED_SIGNUPS = False - # .. toggle_name: FEATURES['ENABLE_AUTOMATED_SIGNUPS_EXTRA_FIELDS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When True, the CSV file that contains a list of - # new accounts to create and register for a course in the membership - # tab of the instructor dashboard will accept the cohort name to - # assign the new user and the enrollment course mode. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-10-26 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/21260 - 'ENABLE_AUTOMATED_SIGNUPS_EXTRA_FIELDS': False, + # .. toggle_name: FEATURES['ENABLE_AUTOMATED_SIGNUPS_EXTRA_FIELDS'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: When True, the CSV file that contains a list of + # new accounts to create and register for a course in the membership + # tab of the instructor dashboard will accept the cohort name to + # assign the new user and the enrollment course mode. + # .. toggle_use_cases: open_edx + # .. toggle_creation_date: 2021-10-26 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/21260 + settings.ENABLE_AUTOMATED_SIGNUPS_EXTRA_FIELDS = False - # .. toggle_name: FEATURES['CERTIFICATES_INSTRUCTOR_GENERATION'] # lint-amnesty, pylint: disable=annotation-missing-token - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable to allow batch generation of certificates from the instructor dashboard. - # In case of self-paced courses, the certificate generation button is hidden if certificate - # generation is not explicitly enabled globally or for the specific course. - # .. toggle_use_cases: opt_in - 'CERTIFICATES_INSTRUCTOR_GENERATION': False, + # .. toggle_name: FEATURES['CERTIFICATES_INSTRUCTOR_GENERATION'] # lint-amnesty, pylint: disable=annotation-missing-token + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Enable to allow batch generation of certificates from the instructor dashboard. + # In case of self-paced courses, the certificate generation button is hidden if certificate + # generation is not explicitly enabled globally or for the specific course. + # .. toggle_use_cases: opt_in + settings.CERTIFICATES_INSTRUCTOR_GENERATION = False - # .. toggle_name: FEATURES['ENABLE_CERTIFICATES_INSTRUCTOR_MANAGE] # lint-amnesty, pylint: disable=annotation-missing-token - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Allow course instructors to manage certificates from the instructor dashboard. - # .. toggle_use_cases: opt_in - 'ENABLE_CERTIFICATES_INSTRUCTOR_MANAGE': False, + # .. toggle_name: FEATURES['ENABLE_CERTIFICATES_INSTRUCTOR_MANAGE] # lint-amnesty, pylint: disable=annotation-missing-token + # .. toggle_implementation: DjangoSetting + # .. toggle_default: False + # .. toggle_description: Allow course instructors to manage certificates from the instructor dashboard. + # .. toggle_use_cases: opt_in + settings.ENABLE_CERTIFICATES_INSTRUCTOR_MANAGE = False - # .. toggle_name: FEATURES['BATCH_ENROLLMENT_NOTIFY_USERS_DEFAULT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Controls if the "Notify users by email" checkbox in the batch - # enrollment form on the instructor dashboard is already checked on page load or not. - # .. toggle_use_cases: opt_out - # .. toggle_creation_date: 2017-07-05 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15392 - 'BATCH_ENROLLMENT_NOTIFY_USERS_DEFAULT': True, - }) + # .. toggle_name: FEATURES['BATCH_ENROLLMENT_NOTIFY_USERS_DEFAULT'] + # .. toggle_implementation: DjangoSetting + # .. toggle_default: True + # .. toggle_description: Controls if the "Notify users by email" checkbox in the batch + # enrollment form on the instructor dashboard is already checked on page load or not. + # .. toggle_use_cases: opt_out + # .. toggle_creation_date: 2017-07-05 + # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15392 + settings.BATCH_ENROLLMENT_NOTIFY_USERS_DEFAULT = True diff --git a/lms/djangoapps/instructor/settings/production.py b/lms/djangoapps/instructor/settings/production.py index 7f91625587..86ec1d6d78 100644 --- a/lms/djangoapps/instructor/settings/production.py +++ b/lms/djangoapps/instructor/settings/production.py @@ -14,9 +14,9 @@ def plugin_settings(settings): "ANALYTICS_DASHBOARD_NAME", settings.ANALYTICS_DASHBOARD_NAME ) # Backward compatibility for deprecated feature names - if 'ENABLE_S3_GRADE_DOWNLOADS' in settings.FEATURES: + if hasattr(settings, 'ENABLE_S3_GRADE_DOWNLOADS'): warnings.warn( "'ENABLE_S3_GRADE_DOWNLOADS' is deprecated. Please use 'ENABLE_GRADE_DOWNLOADS' instead", DeprecationWarning, ) - settings.FEATURES['ENABLE_GRADE_DOWNLOADS'] = settings.FEATURES['ENABLE_S3_GRADE_DOWNLOADS'] + settings.ENABLE_GRADE_DOWNLOADS = settings.ENABLE_S3_GRADE_DOWNLOADS diff --git a/lms/djangoapps/instructor/settings/test.py b/lms/djangoapps/instructor/settings/test.py index b779b55352..92223867be 100644 --- a/lms/djangoapps/instructor/settings/test.py +++ b/lms/djangoapps/instructor/settings/test.py @@ -4,5 +4,5 @@ def plugin_settings(settings): """Settings for the instructor plugin.""" # Enable this feature for course staff grade downloads, to enable acceptance tests - settings.FEATURES['ENABLE_GRADE_DOWNLOADS'] = True - settings.FEATURES['ALLOW_COURSE_STAFF_GRADE_DOWNLOADS'] = True + settings.ENABLE_GRADE_DOWNLOADS = True + settings.ALLOW_COURSE_STAFF_GRADE_DOWNLOADS = True diff --git a/lms/envs/common.py b/lms/envs/common.py index 2075f3e70f..4740cf59fb 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -69,6 +69,10 @@ from openedx.core.release import doc_version from openedx.envs.common import * # pylint: disable=wildcard-import from lms.djangoapps.lms_xblock.mixin import LmsBlockMixin +from openedx.core.lib.features_setting_proxy import FeaturesProxy + +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) ################################### FEATURES ################################### # .. setting_name: PLATFORM_NAME @@ -84,988 +88,1000 @@ PLATFORM_TWITTER_ACCOUNT = "@YourPlatformTwitterAccount" ENABLE_JASMINE = False -# Features -FEATURES = { - # .. toggle_name: FEATURES['DISPLAY_DEBUG_INFO_TO_STAFF'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Add a "Staff Debug" button to course blocks for debugging - # by course staff. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-09-04 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2425 - 'DISPLAY_DEBUG_INFO_TO_STAFF': True, - - # .. toggle_name: FEATURES['DISPLAY_HISTOGRAMS_TO_STAFF'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: This displays histograms in the Staff Debug Info panel to course staff. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-02-13 - # .. toggle_warning: Generating histograms requires scanning the courseware_studentmodule table on each view. This - # can make staff access to courseware very slow on large courses. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2425 - 'DISPLAY_HISTOGRAMS_TO_STAFF': False, # For large courses this slows down courseware access for staff. - - 'REROUTE_ACTIVATION_EMAIL': False, # nonempty string = address for all activation emails - - # .. toggle_name: FEATURES['DISABLE_START_DATES'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When True, all courses will be active, regardless of start - # date. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2012-07-24 - # .. toggle_warning: This will cause ALL courses to be immediately visible. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/17913 - ## DO NOT SET TO True IN THIS FILE - ## Doing so will cause all courses to be released on production - 'DISABLE_START_DATES': False, - - # .. toggle_name: FEATURES['ENABLE_DISCUSSION_SERVICE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When True, it will enable the Discussion tab in courseware for all courses. Setting this - # to False will not contain inline discussion components and discussion tab in any courses. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2012-08-14 - # .. toggle_warning: If the discussion panel is present in the course and the value for this flag is False then, - # attempting to expand those components will cause errors. So, this should only be set to False with an LMS that - # is running courses that do not contain discussion components. - # For consistency in user-experience, keep the value in sync with the setting of the same name in the CMS. - 'ENABLE_DISCUSSION_SERVICE': True, - - # .. toggle_name: FEATURES['ENABLE_TEXTBOOK'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Add PDF and HTML textbook tabs to the courseware. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-03-27 - # .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name - # in the CMS. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/3064 - 'ENABLE_TEXTBOOK': True, - - # .. toggle_name: FEATURES['ENABLE_DISCUSSION_HOME_PANEL'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Hides or displays a welcome panel under the Discussion tab, which includes a subscription - # on/off setting for discussion digest emails. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-07-30 - # .. toggle_warning: This should remain off in production until digest notifications are online. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/520 - 'ENABLE_DISCUSSION_HOME_PANEL': False, - - # .. toggle_name: FEATURES['ENABLE_DISCUSSION_EMAIL_DIGEST'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set this to True if you want the discussion digest emails - # enabled automatically for new users. This will be set on all new account - # registrations. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-08-19 - # .. toggle_target_removal_date: None - # .. toggle_warning: It is not recommended to enable this feature if ENABLE_DISCUSSION_HOME_PANEL is not enabled, - # since subscribers who receive digests in that case will only be able to unsubscribe via links embedded in - # their emails, and they will have no way to resubscribe. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/4891 - 'ENABLE_DISCUSSION_EMAIL_DIGEST': False, - - # .. toggle_name: FEATURES['ENABLE_UNICODE_USERNAME'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set this to True to allow unicode characters in username. Enabling this will also - # automatically enable SOCIAL_AUTH_CLEAN_USERNAMES. When this is enabled, usernames will have to match the - # regular expression defined by USERNAME_REGEX_PARTIAL. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-06-27 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/14729 - 'ENABLE_UNICODE_USERNAME': False, - - # .. toggle_name: FEATURES['ENABLE_DJANGO_ADMIN_SITE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Set to False if you want to disable Django's admin site. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-09-26 - # .. toggle_warning: It is not recommended to disable this feature as there are many settings available on - # Django's admin site and will be inaccessible to the superuser. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/829 - 'ENABLE_DJANGO_ADMIN_SITE': True, - 'ENABLE_LMS_MIGRATION': False, - - # .. toggle_name: FEATURES['ENABLE_MASQUERADE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: None - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-04-13 - 'ENABLE_MASQUERADE': True, - - # .. toggle_name: FEATURES['DISABLE_LOGIN_BUTTON'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Removes the display of the login button in the navigation bar. - # Change is only at the UI level. Used in systems where login is automatic, eg MIT SSL - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-12-03 - 'DISABLE_LOGIN_BUTTON': False, - - # .. toggle_name: FEATURES['ENABLE_OAUTH2_PROVIDER'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable this feature to allow this Open edX platform to be an OAuth2 authentication - # provider. This is necessary to enable some other features, such as the REST API for the mobile application. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2014-09-09 - # .. toggle_target_removal_date: None - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_OAUTH2_PROVIDER': False, - - # .. toggle_name: FEATURES['ENABLE_XBLOCK_VIEW_ENDPOINT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable an API endpoint, named "xblock_view", to serve rendered XBlock views. This might be - # used by external applications. See for instance jquery-xblock (now unmaintained): - # https://github.com/openedx/jquery-xblock - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-03-14 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2968 - 'ENABLE_XBLOCK_VIEW_ENDPOINT': False, - - # Allows to configure the LMS to provide CORS headers to serve requests from other - # domains - 'ENABLE_CORS_HEADERS': False, - - # Can be turned off if course lists need to be hidden. Effects views and templates. - # .. toggle_name: FEATURES['COURSES_ARE_BROWSABLE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When this is set to True, all the courses will be listed on the /courses page and Explore - # Courses link will be visible. Set to False if courses list and Explore Courses link need to be hidden. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-09-28 - # .. toggle_warning: This Effects views and templates. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1073 - 'COURSES_ARE_BROWSABLE': True, - - # Can be turned off to disable the help link in the navbar - # .. toggle_name: FEATURES['ENABLE_HELP_LINK'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When True, a help link is displayed on the main navbar. Set False to hide it. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-03-05 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/26106 - 'ENABLE_HELP_LINK': True, - - # .. toggle_name: FEATURES['HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set, it hides the Courses list on the Learner Dashboard page if the learner has not - # yet activated the account and not enrolled in any courses. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2018-05-18 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1814 - 'HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED': False, - - # .. toggle_name: FEATURES['ENABLE_STUDENT_HISTORY_VIEW'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: This provides a UI to show a student's submission history in a problem by the Staff Debug - # tool. Set to False if you want to hide Submission History from the courseware page. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-02-15 - # .. toggle_tickets: https://github.com/openedx/edx-platform/commit/8f17e6ae9ed76fa75b3caf867b65ccb632cb6870 - 'ENABLE_STUDENT_HISTORY_VIEW': True, - - # Turn on a page that lets staff enter Python code to be run in the - # sandbox, for testing whether it's enabled properly. - 'ENABLE_DEBUG_RUN_PYTHON': False, - - # Enable URL that shows information about the status of various services - 'ENABLE_SERVICE_STATUS': False, - - # Don't autoplay videos for students - 'AUTOPLAY_VIDEOS': False, - - # Move the student to next page when a video finishes. Set to True to show - # an auto-advance button in videos. If False, videos never auto-advance. - 'ENABLE_AUTOADVANCE_VIDEOS': False, - - # Enable instructor dash to submit background tasks - 'ENABLE_INSTRUCTOR_BACKGROUND_TASKS': True, - - # Enable instructor to assign individual due dates - # Note: In order for this feature to work, you must also add - # 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' to - # the setting FIELD_OVERRIDE_PROVIDERS, in addition to setting this flag to - # True. - 'INDIVIDUAL_DUE_DATES': False, - - # .. toggle_name: CUSTOM_COURSES_EDX - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable Custom Courses for edX, a feature that is more commonly known as - # CCX. Documentation for configuring and using this feature is available at - # https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/enable_ccx.html - # .. toggle_warning: When set to true, 'lms.djangoapps.ccx.overrides.CustomCoursesForEdxOverrideProvider' will - # be added to MODULESTORE_FIELD_OVERRIDE_PROVIDERS - # .. toggle_use_cases: opt_in, circuit_breaker - # .. toggle_creation_date: 2015-04-10 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6636 - 'CUSTOM_COURSES_EDX': False, - - # Toggle to enable certificates of courses on dashboard - 'ENABLE_VERIFIED_CERTIFICATES': False, - # Settings for course import olx validation - 'ENABLE_COURSE_OLX_VALIDATION': False, - - # .. toggle_name: FEATURES['DISABLE_HONOR_CERTIFICATES'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to disable honor certificates. Typically used when your installation only - # allows verified certificates, like courses.edx.org. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2019-05-14 - # .. toggle_tickets: https://openedx.atlassian.net/browse/PROD-269 - 'DISABLE_HONOR_CERTIFICATES': False, # Toggle to disable honor certificates - - 'DISABLE_AUDIT_CERTIFICATES': False, # Toggle to disable audit certificates - - # .. toggle_name: FEATURES['AUTOMATIC_AUTH_FOR_TESTING'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to perform acceptance and load test. Auto auth view is responsible for load - # testing and is controlled by this feature flag. Session verification (of CacheBackedAuthenticationMiddleware) - # is a security feature, but it can be turned off by enabling this feature flag. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-07-25 - # .. toggle_warning: If this has been set to True then the account activation email will be skipped. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/417 - 'AUTOMATIC_AUTH_FOR_TESTING': False, - - # .. toggle_name: FEATURES['RESTRICT_AUTOMATIC_AUTH'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Prevent auto auth from creating superusers or modifying existing users. Auto auth is a - # mechanism where superusers can simply modify attributes of other users by accessing the "/auto_auth url" with - # the right - # querystring parameters. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2018-05-07 - # .. toggle_tickets: https://openedx.atlassian.net/browse/TE-2545 - 'RESTRICT_AUTOMATIC_AUTH': True, - - # .. toggle_name: FEATURES['ENABLE_LOGIN_MICROFRONTEND'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable the login micro frontend. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2018-05-07 - # .. toggle_warning: The login MFE domain name should be listed in LOGIN_REDIRECT_WHITELIST. - 'ENABLE_LOGIN_MICROFRONTEND': False, - - # .. toggle_name: FEATURES['SKIP_EMAIL_VALIDATION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Turn this on to skip sending emails for user validation. - # Beware, as this leaves the door open to potential spam abuse. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2018-05-07 - # .. toggle_warning: The login MFE domain name should be listed in LOGIN_REDIRECT_WHITELIST. - 'SKIP_EMAIL_VALIDATION': False, - - # .. toggle_name: FEATURES['ENABLE_COSMETIC_DISPLAY_PRICE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable the display of "cosmetic_display_price", set in a course advanced settings. This - # cosmetic price is used when there is no registration price associated to the course. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-10-10 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6876 - # .. toggle_warning: The use case of this feature toggle is uncertain. - 'ENABLE_COSMETIC_DISPLAY_PRICE': False, - - # Automatically approve student identity verification attempts - # .. toggle_name: FEATURES['AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If set to True, then we want to skip posting anything to Software Secure. Bypass posting - # anything to Software Secure if the auto verify feature for testing is enabled. We actually don't even create - # the message because that would require encryption and message signing that rely on settings.VERIFY_STUDENT - # values that aren't set in dev. So we just pretend like we successfully posted and automatically approve student - # identity verification attempts. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2013-10-03 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1184 - 'AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING': False, - - # Maximum number of rows to include in the csv file for downloading problem responses. - 'MAX_PROBLEM_RESPONSES_COUNT': 5000, - - 'ENABLED_PAYMENT_REPORTS': [ - "refund_report", - "itemized_purchase_report", - "university_revenue_share", - "certificate_status" - ], - - # Turn off account locking if failed login attempts exceeds a limit - # .. toggle_name: FEATURES['ENABLE_MAX_FAILED_LOGIN_ATTEMPTS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: This feature will keep track of the number of failed login attempts on a given user's - # email. If the number of consecutive failed login attempts - without a successful login at some point - reaches - # a configurable threshold (default 6), then the account will be locked for a configurable amount of seconds - # (30 minutes) which will prevent additional login attempts until this time period has passed. If a user - # successfully logs in, all the counter which tracks the number of failed attempts will be reset back to 0. If - # set to False then account locking will be disabled for failed login attempts. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-01-30 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2331 - 'ENABLE_MAX_FAILED_LOGIN_ATTEMPTS': True, - - # Hide any Personally Identifiable Information from application logs - 'SQUELCH_PII_IN_LOGS': True, - - # .. toggle_name: FEATURES['EMBARGO'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Turns on embargo functionality, which blocks users from - # the site or courses based on their location. Embargo can restrict users by states - # and whitelist/blacklist (IP Addresses (ie. 10.0.0.0), Networks (ie. 10.0.0.0/24)), or the user profile country. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-02-27 - # .. toggle_target_removal_date: None - # .. toggle_warning: reverse proxy should be configured appropriately for example Client IP address headers - # (e.g HTTP_X_FORWARDED_FOR) should be configured. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2749 - 'EMBARGO': False, - - # Whether the Wiki subsystem should be accessible via the direct /wiki/ paths. Setting this to True means - # that people can submit content and modify the Wiki in any arbitrary manner. We're leaving this as True in the - # defaults, so that we maintain current behavior - 'ALLOW_WIKI_ROOT_ACCESS': True, - - # .. toggle_name: FEATURES['ENABLE_THIRD_PARTY_AUTH'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Turn on third-party auth. Disabled for now because full implementations are not yet - # available. Remember to run migrations if you enable this; we don't create tables by default. This feature can - # be enabled on a per-site basis. When enabling this feature, remember to define the allowed authentication - # backends with the AUTHENTICATION_BACKENDS setting. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-09-15 - 'ENABLE_THIRD_PARTY_AUTH': False, - - # .. toggle_name: FEATURES['ENABLE_MKTG_SITE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Toggle to enable alternate urls for marketing links. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-03-24 - # .. toggle_warning: When this is enabled, the MKTG_URLS setting should be defined. The use case of this feature - # toggle is uncertain. - 'ENABLE_MKTG_SITE': False, - - # Prevent concurrent logins per user - 'PREVENT_CONCURRENT_LOGINS': True, - - # .. toggle_name: FEATURES['ALWAYS_REDIRECT_HOMEPAGE_TO_DASHBOARD_FOR_AUTHENTICATED_USER'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When a logged in user goes to the homepage ('/') the user will be redirected to the - # dashboard page when this flag is set to True - this is default Open edX behavior. Set to False to not redirect - # the user. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2014-09-16 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5220 - 'ALWAYS_REDIRECT_HOMEPAGE_TO_DASHBOARD_FOR_AUTHENTICATED_USER': True, - - # .. toggle_name: FEATURES['ENABLE_COURSE_SORTING_BY_START_DATE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When a user goes to the homepage ('/') the user sees the courses listed in the - # announcement dates order - this is default Open edX behavior. Set to True to change the course sorting behavior - # by their start dates, latest first. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-03-27 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7548 - 'ENABLE_COURSE_SORTING_BY_START_DATE': True, - - # .. toggle_name: FEATURES['ENABLE_COURSE_HOME_REDIRECT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: When enabled, along with the ENABLE_MKTG_SITE feature toggle, users who attempt to access a - # course "about" page will be redirected to the course home url. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2019-01-15 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/19604 - 'ENABLE_COURSE_HOME_REDIRECT': True, - - # Expose Mobile REST API. Note that if you use this, you must also set - # ENABLE_OAUTH2_PROVIDER to True - 'ENABLE_MOBILE_REST_API': False, - - # .. toggle_name: FEATURES['ENABLE_COMBINED_LOGIN_REGISTRATION_FOOTER'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Display the standard footer in the login page. This feature can be overridden by a site- - # specific configuration. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2016-06-24 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1320 - 'ENABLE_COMBINED_LOGIN_REGISTRATION_FOOTER': False, - - # Enable organizational email opt-in - 'ENABLE_MKTG_EMAIL_OPT_IN': False, - - # .. toggle_name: FEATURES['ENABLE_FOOTER_MOBILE_APP_LINKS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True if you want show the mobile app links (Apple App Store & Google Play Store) in - # the footer. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-01-13 - # .. toggle_warning: If you set this to True then you should also set your mobile application's app store and play - # store URLs in the MOBILE_STORE_URLS settings dictionary. These links are not part of the default theme. If you - # want these links on your footer then you should use the edx.org theme. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6588 - 'ENABLE_FOOTER_MOBILE_APP_LINKS': False, - - # Let students save and manage their annotations - # .. toggle_name: FEATURES['ENABLE_EDXNOTES'] - # .. toggle_implementation: SettingToggle - # .. toggle_default: False - # .. toggle_description: This toggle enables the students to save and manage their annotations in the - # course using the notes service. The bulk of the actual work in storing the notes is done by - # a separate service (see the edx-notes-api repo). - # .. toggle_warning: Requires the edx-notes-api service properly running and to have configured the django settings - # EDXNOTES_INTERNAL_API and EDXNOTES_PUBLIC_API. If you update this setting, also update it in Studio. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-01-04 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6321 - 'ENABLE_EDXNOTES': False, - - # Toggle to enable coordination with the Publisher tool (keep in sync with cms/envs/common.py) - 'ENABLE_PUBLISHER': False, - - # Milestones application flag - 'MILESTONES_APP': False, - - # Prerequisite courses feature flag - 'ENABLE_PREREQUISITE_COURSES': False, - - # For easily adding modes to courses during acceptance testing - 'MODE_CREATION_FOR_TESTING': False, - - # For caching programs in contexts where the LMS can only - # be reached over HTTP. - 'EXPOSE_CACHE_PROGRAMS_ENDPOINT': False, - - # Courseware search feature - # .. toggle_name: FEATURES['ENABLE_COURSEWARE_SEARCH'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When enabled, this adds a Search the course widget on the course outline and courseware - # pages for searching courseware data. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-01-29 - # .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. You will - # see the search widget on the courseware page only if the DISABLE_COURSE_OUTLINE_PAGE_FLAG is set. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6506 - 'ENABLE_COURSEWARE_SEARCH': False, - - # .. toggle_name: FEATURES['ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When enabled, this adds a Search the course widget on the course outline and courseware - # pages for searching courseware data but for course staff users only. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2019-12-06 - # .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. If - # ENABLE_COURSEWARE_SEARCH is enabled then the search widget will be visible to all learners and this flag's - # value does not matter in that case. This flag is enabled in devstack by default. - # .. toggle_tickets: https://openedx.atlassian.net/browse/TNL-6931 - 'ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF': False, - - # Dashboard search feature - # .. toggle_name: FEATURES['ENABLE_DASHBOARD_SEARCH'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When enabled, this adds a Search Your Courses widget on the dashboard page for searching - # courseware data. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-01-29 - # .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6506 - 'ENABLE_DASHBOARD_SEARCH': False, - - # log all information from cybersource callbacks - 'LOG_POSTPAY_CALLBACKS': True, - - # .. toggle_name: FEATURES['LICENSING'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Toggle platform-wide course licensing. The course.license attribute is then used to append - # license information to the courseware. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-05-14 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7315 - 'LICENSING': False, - - # .. toggle_name: FEATURES['CERTIFICATES_HTML_VIEW'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable course certificates on your instance of Open edX. - # .. toggle_warning: You must enable this feature flag in both Studio and the LMS and complete the configuration tasks - # described here: - # https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/enable_certificates.html pylint: disable=line-too-long,useless-suppression - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-03-13 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7113 - 'CERTIFICATES_HTML_VIEW': False, - - # .. toggle_name: FEATURES['CUSTOM_CERTIFICATE_TEMPLATES_ENABLED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable custom certificate templates which are configured via Django admin. - # .. toggle_warning: None - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-08-13 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/SOL-1044 - 'CUSTOM_CERTIFICATE_TEMPLATES_ENABLED': False, - - # .. toggle_name: FEATURES['ENABLE_COURSE_DISCOVERY'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Add a course search widget to the LMS for searching courses. When this is enabled, the - # latest courses are no longer displayed on the LMS landing page. Also, an "Explore Courses" item is added to the - # navbar. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-04-23 - # .. toggle_target_removal_date: None - # .. toggle_warning: The COURSE_DISCOVERY_MEANINGS setting should be properly defined. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7845 - 'ENABLE_COURSE_DISCOVERY': False, - - # .. toggle_name: FEATURES['ENABLE_COURSE_FILENAME_CCX_SUFFIX'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If set to True, CCX ID will be included in the generated filename for CCX courses. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-03-16 - # .. toggle_target_removal_date: None - # .. toggle_tickets: None - # .. toggle_warning: Turning this feature ON will affect all generated filenames which are related to CCX courses. - 'ENABLE_COURSE_FILENAME_CCX_SUFFIX': False, - - # Setting for overriding default filtering facets for Course discovery - # COURSE_DISCOVERY_FILTERS = ["org", "language", "modes"] - - # Software secure fake page feature flag - 'ENABLE_SOFTWARE_SECURE_FAKE': False, - - # Teams feature - 'ENABLE_TEAMS': True, - - # Show video bumper in LMS - 'ENABLE_VIDEO_BUMPER': False, - - # How many seconds to show the bumper again, default is 7 days: - 'SHOW_BUMPER_PERIODICITY': 7 * 24 * 3600, - - # .. toggle_name: FEATURES['ENABLE_SPECIAL_EXAMS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable to use special exams, aka timed and proctored exams. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-09-04 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/9744 - 'ENABLE_SPECIAL_EXAMS': False, - - # .. toggle_name: FEATURES['ENABLE_LTI_PROVIDER'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set to True, Open edX site can be used as an LTI Provider to other systems - # and applications. - # .. toggle_warning: After enabling this feature flag there are multiple steps involved to configure edX - # as LTI provider. Full guide is available here: - # https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/lti/index.html - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2015-04-24 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7689 - 'ENABLE_LTI_PROVIDER': False, - - # .. toggle_name: FEATURES['SHOW_HEADER_LANGUAGE_SELECTOR'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set to True, language selector will be visible in the header. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-05-25 - # .. toggle_warning: You should set the languages in the DarkLangConfig table to get this working. If you have - # not set any languages in the DarkLangConfig table then the language selector will not be visible in the header. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15133 - 'SHOW_HEADER_LANGUAGE_SELECTOR': False, - - # At edX it's safe to assume that English transcripts are always available - # This is not the case for all installations. - # The default value in {lms,cms}/envs/common.py and xmodule/tests/test_video.py should be consistent. - 'FALLBACK_TO_ENGLISH_TRANSCRIPTS': True, - - # .. toggle_name: FEATURES['SHOW_FOOTER_LANGUAGE_SELECTOR'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set to True, language selector will be visible in the footer. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-05-25 - # .. toggle_warning: LANGUAGE_COOKIE_NAME is required to use footer-language-selector, set it if it has not been set. - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15133 - 'SHOW_FOOTER_LANGUAGE_SELECTOR': False, - - # .. toggle_name: FEATURES['ENABLE_CSMH_EXTENDED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Write Courseware Student Module History (CSMH) to the extended table: this logs all - # student activities to MySQL, in a separate database. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2020-11-05 - # .. toggle_warning: Even though most Open edX instances run with a separate CSMH database, it may not always be - # the case. When disabling this feature flag, remember to remove "lms.djangoapps.coursewarehistoryextended" - # from the INSTALLED_APPS and the "StudentModuleHistoryExtendedRouter" from the DATABASE_ROUTERS. - 'ENABLE_CSMH_EXTENDED': True, - - # Read from both the CSMH and CSMHE history tables. - # This is the default, but can be disabled if all history - # lives in the Extended table, saving the frontend from - # making multiple queries. - 'ENABLE_READING_FROM_MULTIPLE_HISTORY_TABLES': True, - - # Set this to False to facilitate cleaning up invalid xml from your modulestore. - 'ENABLE_XBLOCK_XML_VALIDATION': True, - - # .. toggle_name: FEATURES['ALLOW_PUBLIC_ACCOUNT_CREATION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Allow public account creation. If this is disabled, users will no longer have access to - # the signup page. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-04-12 - # .. toggle_tickets: https://openedx.atlassian.net/browse/YONK-513 - 'ALLOW_PUBLIC_ACCOUNT_CREATION': True, - - # .. toggle_name: FEATURES['SHOW_REGISTRATION_LINKS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Allow registration links. If this is disabled, users will no longer see buttons to the - # the signup page. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2023-03-27 - 'SHOW_REGISTRATION_LINKS': True, - - # .. toggle_name: FEATURES['ENABLE_COOKIE_CONSENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enable header banner for cookie consent using this service: - # https://cookieconsent.insites.com/ - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-03-03 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1560 - 'ENABLE_COOKIE_CONSENT': False, - - # Whether or not the dynamic EnrollmentTrackUserPartition should be registered. - 'ENABLE_ENROLLMENT_TRACK_USER_PARTITION': True, - - # Enable one click program purchase - # See LEARNER-493 - 'ENABLE_ONE_CLICK_PROGRAM_PURCHASE': False, - - # .. toggle_name: FEATURES['ALLOW_EMAIL_ADDRESS_CHANGE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Allow users to change their email address on the Account Settings page. If this is - # disabled, users will not be able to change their email address. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-06-26 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1735 - 'ALLOW_EMAIL_ADDRESS_CHANGE': True, - - # .. toggle_name: FEATURES['ENABLE_BULK_ENROLLMENT_VIEW'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When set to True the bulk enrollment view is enabled and one can use it to enroll multiple - # users in a course using bulk enrollment API endpoint (/api/bulk_enroll/v1/bulk_enroll). - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-07-15 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15006 - 'ENABLE_BULK_ENROLLMENT_VIEW': False, - - # Set to enable Enterprise integration - 'ENABLE_ENTERPRISE_INTEGRATION': False, - - # .. toggle_name: FEATURES['ENABLE_HTML_XBLOCK_STUDENT_VIEW_DATA'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Whether HTML Block returns HTML content with the Course Blocks API when the API - # is called with student_view_data=html query parameter. - # .. toggle_warning: Because the Course Blocks API caches its data, the cache must be cleared (e.g. by - # re-publishing the course) for changes to this flag to take effect. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-08-28 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1880 - 'ENABLE_HTML_XBLOCK_STUDENT_VIEW_DATA': False, - - # .. toggle_name: FEATURES['ENABLE_PASSWORD_RESET_FAILURE_EMAIL'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Whether to send an email for failed password reset attempts or not. This happens when a - # user asks for a password reset but they don't have an account associated to their email. This is useful for - # notifying users that they don't have an account associated with email addresses they believe they've registered - # with. This setting can be overridden by a site-specific configuration. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2017-07-20 - # .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1832 - 'ENABLE_PASSWORD_RESET_FAILURE_EMAIL': False, - - # Sets the default browser support. For more information go to http://browser-update.org/customize.html - 'UNSUPPORTED_BROWSER_ALERT_VERSIONS': "{i:10,f:-3,o:-3,s:-3,c:-3}", - - # .. toggle_name: FEATURES['ENABLE_ACCOUNT_DELETION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: True - # .. toggle_description: Whether to display the account deletion section on Account Settings page. Set to False to - # hide this section. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2018-06-01 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/18298 - 'ENABLE_ACCOUNT_DELETION': True, - - # Enable feature to remove enrollments and users. Used to reset state of master's integration environments - 'ENABLE_ENROLLMENT_RESET': False, - 'DISABLE_MOBILE_COURSE_AVAILABLE': False, - - # .. toggle_name: FEATURES['ENABLE_CHANGE_USER_PASSWORD_ADMIN'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable changing a user password through django admin. This is disabled by - # default because enabling allows a method to bypass password policy. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2020-02-21 - # .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/21616' - 'ENABLE_CHANGE_USER_PASSWORD_ADMIN': False, - - # .. toggle_name: FEATURES['ENABLE_AUTHN_MICROFRONTEND'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Supports staged rollout of a new micro-frontend-based implementation of the logistration. - # .. toggle_use_cases: temporary, open_edx - # .. toggle_creation_date: 2020-09-08 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/24908' - # .. toggle_warning: Also set settings.AUTHN_MICROFRONTEND_URL for rollout. This temporary feature - # toggle does not have a target removal date. - 'ENABLE_AUTHN_MICROFRONTEND': os.environ.get("EDXAPP_ENABLE_AUTHN_MFE", False), - - # .. toggle_name: FEATURES['ENABLE_CATALOG_MICROFRONTEND'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Supports staged rollout of a new micro-frontend-based implementation of the catalog. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2025-05-15 - # .. toggle_target_removal_date: 2025-11-01 - 'ENABLE_CATALOG_MICROFRONTEND': False, - - ### ORA Feature Flags ### - # .. toggle_name: FEATURES['ENABLE_ORA_ALL_FILE_URLS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not - # discoverable. If enabled, will iterate through all possible file key suffixes up to the max for displaying - # file metadata in staff assessments. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-03-03 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_ORA_ALL_FILE_URLS': False, - - # .. toggle_name: FEATURES['ENABLE_ORA_USER_STATE_UPLOAD_DATA'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not - # discoverable. If enabled, will pull file metadata from StudentModule.state for display in staff assessments. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-03-03 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_ORA_USER_STATE_UPLOAD_DATA': False, - - # .. toggle_name: FEATURES['ENABLE_ORA_USERNAMES_ON_DATA_EXPORT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to add deanonymized usernames to ORA data - # report. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-06-11 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://openedx.atlassian.net/browse/TNL-7273 - # .. toggle_warning: This temporary feature toggle does not have a target removal date. - 'ENABLE_ORA_USERNAMES_ON_DATA_EXPORT': False, - - # .. toggle_name: FEATURES['ENABLE_COURSE_ASSESSMENT_GRADE_CHANGE_SIGNAL'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to start sending signals for assessment level grade updates. Notably, the only - # handler of this signal at the time of this writing sends assessment updates to enterprise integrated channels. - # .. toggle_use_cases: temporary - # .. toggle_creation_date: 2020-12-09 - # .. toggle_target_removal_date: 2021-02-01 - # .. toggle_tickets: https://openedx.atlassian.net/browse/ENT-3818 - 'ENABLE_COURSE_ASSESSMENT_GRADE_CHANGE_SIGNAL': False, - - # .. toggle_name: FEATURES['ALLOW_ADMIN_ENTERPRISE_COURSE_ENROLLMENT_DELETION'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If true, allows for the deletion of EnterpriseCourseEnrollment records via Django Admin. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2021-01-27 - # .. toggle_tickets: https://openedx.atlassian.net/browse/ENT-4022 - 'ALLOW_ADMIN_ENTERPRISE_COURSE_ENROLLMENT_DELETION': False, - - # .. toggle_name: FEATURES['ENABLE_BULK_USER_RETIREMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable bulk user retirement through REST API. This is disabled by - # default. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-03-11 - # .. toggle_target_removal_date: None - # .. toggle_warning: None - # .. toggle_tickets: 'https://openedx.atlassian.net/browse/OSPR-5290' - 'ENABLE_BULK_USER_RETIREMENT': False, - - # .. toggle_name: FEATURES['ENABLE_INTEGRITY_SIGNATURE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Whether to display honor code agreement for learners before their first grade assignment - # (https://github.com/edx/edx-name-affirmation) - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-02-15 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1348' - 'ENABLE_INTEGRITY_SIGNATURE': False, - - # .. toggle_name: FEATURES['ENABLE_LTI_PII_ACKNOWLEDGEMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enables the lti pii acknowledgement feature for a course - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2023-10 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://2u-internal.atlassian.net/browse/MST-2055' - 'ENABLE_LTI_PII_ACKNOWLEDGEMENT': False, - - # .. toggle_name: FEATURES['ENABLE_NEW_BULK_EMAIL_EXPERIENCE'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When true, replaces the bulk email tool found on the - # instructor dashboard with a link to the new communications MFE version instead. - # Setting the tool to false will leave the old bulk email tool experience in place. - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2022-03-21 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://openedx.atlassian.net/browse/MICROBA-1758' - 'ENABLE_NEW_BULK_EMAIL_EXPERIENCE': False, - - # .. toggle_name: MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: If enabled, the Library Content Block is marked as complete when users view it. - # Otherwise (by default), all children of this block must be completed. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-03-22 - # .. toggle_target_removal_date: None - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/28268 - # .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name - # in the LMS and CMS. - 'MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW': False, - - # .. toggle_name: FEATURES['DISABLE_UNENROLLMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to disable self-unenrollments via REST API. - # This also hides the "Unenroll" button on the Learner Dashboard. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2021-10-11 - # .. toggle_warning: For consistency in user experience, keep the value in sync with the setting of the same name - # in the LMS and CMS. - # .. toggle_tickets: 'https://github.com/open-craft/edx-platform/pull/429' - 'DISABLE_UNENROLLMENT': False, - - # .. toggle_name: FEATURES['ENABLE_CERTIFICATES_IDV_REQUIREMENT'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Whether to enforce ID Verification requirements for course certificates generation - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-04-26 - # .. toggle_target_removal_date: None - # .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1458' - 'ENABLE_CERTIFICATES_IDV_REQUIREMENT': False, - - # .. toggle_name: FEATURES['DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to disable enrollment for user invited to a course - # .. if user is registering before enrollment start date or after enrollment end date - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2022-06-06 - # .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/29538' - 'DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED': False, - - # .. toggle_name: FEATURES['SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS'] - # .. toggle_implementation: SettingToggle - # .. toggle_default: False - # .. toggle_description: When True, the system will publish certificate lifecycle signals to the event bus. - # This toggle is used to create the EVENT_BUS_PRODUCER_CONFIG setting. - # .. toggle_warning: The default may be changed in a later release. See - # https://github.com/openedx/openedx-events/issues/265 - # .. toggle_use_cases: opt_in - # .. toggle_creation_date: 2023-10-10 - # .. toggle_tickets: https://github.com/openedx/openedx-events/issues/210 - 'SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS': False, - - # .. toggle_name: FEATURES['ENABLE_GRADING_METHOD_IN_PROBLEMS'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Enables the grading method feature in capa problems. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-03-22 - # .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33911 - 'ENABLE_GRADING_METHOD_IN_PROBLEMS': False, - - # .. toggle_name: FEATURES['ENABLE_COURSEWARE_SEARCH_VERIFIED_REQUIRED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: When enabled, the courseware search feature will only be enabled - # for users in a verified enrollment track. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-04-24 - 'ENABLE_COURSEWARE_SEARCH_VERIFIED_ENROLLMENT_REQUIRED': False, - - # .. toggle_name: FEATURES['BADGES_ENABLED'] - # .. toggle_implementation: DjangoSetting - # .. toggle_default: False - # .. toggle_description: Set to True to enable badges functionality. - # .. toggle_use_cases: open_edx - # .. toggle_creation_date: 2024-04-02 - # .. toggle_target_removal_date: None - 'BADGES_ENABLED': False, -} +# FEATURES + +# .. toggle_name: settings.DISPLAY_DEBUG_INFO_TO_STAFF +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Add a "Staff Debug" button to course blocks for debugging +# by course staff. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-09-04 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2425 +DISPLAY_DEBUG_INFO_TO_STAFF = True + +# .. toggle_name: settings.DISPLAY_HISTOGRAMS_TO_STAFF +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: This displays histograms in the Staff Debug Info panel to course staff. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-02-13 +# .. toggle_warning: Generating histograms requires scanning the courseware_studentmodule table on each view. This +# can make staff access to courseware very slow on large courses. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2425 +DISPLAY_HISTOGRAMS_TO_STAFF = False # For large courses this slows down courseware access for staff. + +REROUTE_ACTIVATION_EMAIL = False # nonempty string = address for all activation emails + +# .. toggle_name: settings.DISABLE_START_DATES +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When True, all courses will be active, regardless of start +# date. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2012-07-24 +# .. toggle_warning: This will cause ALL courses to be immediately visible. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/17913 +## DO NOT SET TO True IN THIS FILE +## Doing so will cause all courses to be released on production +DISABLE_START_DATES = False + +# .. toggle_name: settings.ENABLE_DISCUSSION_SERVICE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When True, it will enable the Discussion tab in courseware for all courses. Setting this +# to False will not contain inline discussion components and discussion tab in any courses. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2012-08-14 +# .. toggle_warning: If the discussion panel is present in the course and the value for this flag is False then, +# attempting to expand those components will cause errors. So, this should only be set to False with an LMS that +# is running courses that do not contain discussion components. +# For consistency in user-experience, keep the value in sync with the setting of the same name in the CMS. +ENABLE_DISCUSSION_SERVICE = True + +# .. toggle_name: settings.ENABLE_TEXTBOOK +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Add PDF and HTML textbook tabs to the courseware. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-03-27 +# .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name +# in the CMS. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/3064 +ENABLE_TEXTBOOK = True + +# .. toggle_name: settings.ENABLE_DISCUSSION_HOME_PANEL +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Hides or displays a welcome panel under the Discussion tab, which includes a subscription +# on/off setting for discussion digest emails. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-07-30 +# .. toggle_warning: This should remain off in production until digest notifications are online. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/520 +ENABLE_DISCUSSION_HOME_PANEL = False + +# .. toggle_name: settings.ENABLE_DISCUSSION_EMAIL_DIGEST +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set this to True if you want the discussion digest emails +# enabled automatically for new users. This will be set on all new account +# registrations. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-08-19 +# .. toggle_target_removal_date: None +# .. toggle_warning: It is not recommended to enable this feature if ENABLE_DISCUSSION_HOME_PANEL is not enabled, +# since subscribers who receive digests in that case will only be able to unsubscribe via links embedded in +# their emails, and they will have no way to resubscribe. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/4891 +ENABLE_DISCUSSION_EMAIL_DIGEST = False + +# .. toggle_name: settings.ENABLE_UNICODE_USERNAME +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set this to True to allow unicode characters in username. Enabling this will also +# automatically enable SOCIAL_AUTH_CLEAN_USERNAMES. When this is enabled, usernames will have to match the +# regular expression defined by USERNAME_REGEX_PARTIAL. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-06-27 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/14729 +ENABLE_UNICODE_USERNAME = False + +# .. toggle_name: settings.ENABLE_DJANGO_ADMIN_SITE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Set to False if you want to disable Django's admin site. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-09-26 +# .. toggle_warning: It is not recommended to disable this feature as there are many settings available on +# Django's admin site and will be inaccessible to the superuser. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/829 +ENABLE_DJANGO_ADMIN_SITE = True +ENABLE_LMS_MIGRATION = False + +# .. toggle_name: settings.ENABLE_MASQUERADE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: None +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-04-13 +ENABLE_MASQUERADE = True + +# .. toggle_name: settings.DISABLE_LOGIN_BUTTON +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Removes the display of the login button in the navigation bar. +# Change is only at the UI level. Used in systems where login is automatic, eg MIT SSL +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-12-03 +DISABLE_LOGIN_BUTTON = False + +# .. toggle_name: settings.ENABLE_OAUTH2_PROVIDER +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable this feature to allow this Open edX platform to be an OAuth2 authentication +# provider. This is necessary to enable some other features, such as the REST API for the mobile application. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2014-09-09 +# .. toggle_target_removal_date: None +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_OAUTH2_PROVIDER = False + +# .. toggle_name: settings.ENABLE_XBLOCK_VIEW_ENDPOINT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable an API endpoint, named "xblock_view", to serve rendered XBlock views. This might be +# used by external applications. See for instance jquery-xblock (now unmaintained): +# https://github.com/openedx/jquery-xblock +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-03-14 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2968 +ENABLE_XBLOCK_VIEW_ENDPOINT = False + +# Allows to configure the LMS to provide CORS headers to serve requests from other +# domains +ENABLE_CORS_HEADERS = False + +# Can be turned off if course lists need to be hidden. Effects views and templates. +# .. toggle_name: settings.COURSES_ARE_BROWSABLE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When this is set to True, all the courses will be listed on the /courses page and Explore +# Courses link will be visible. Set to False if courses list and Explore Courses link need to be hidden. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-09-28 +# .. toggle_warning: This Effects views and templates. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1073 +COURSES_ARE_BROWSABLE = True + +# Can be turned off to disable the help link in the navbar +# .. toggle_name: settings.ENABLE_HELP_LINK +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When True, a help link is displayed on the main navbar. Set False to hide it. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-03-05 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/26106 +ENABLE_HELP_LINK = True + +# .. toggle_name: settings.HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set, it hides the Courses list on the Learner Dashboard page if the learner has not +# yet activated the account and not enrolled in any courses. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2018-05-18 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1814 +HIDE_DASHBOARD_COURSES_UNTIL_ACTIVATED = False + +# .. toggle_name: settings.ENABLE_STUDENT_HISTORY_VIEW +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: This provides a UI to show a student's submission history in a problem by the Staff Debug +# tool. Set to False if you want to hide Submission History from the courseware page. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-02-15 +# .. toggle_tickets: https://github.com/openedx/edx-platform/commit/8f17e6ae9ed76fa75b3caf867b65ccb632cb6870 +ENABLE_STUDENT_HISTORY_VIEW = True + +# Turn on a page that lets staff enter Python code to be run in the +# sandbox, for testing whether it's enabled properly. +ENABLE_DEBUG_RUN_PYTHON = False + +# Enable URL that shows information about the status of various services +ENABLE_SERVICE_STATUS = False + +# Don't autoplay videos for students +AUTOPLAY_VIDEOS = False + +# Move the student to next page when a video finishes. Set to True to show +# an auto-advance button in videos. If False, videos never auto-advance. +ENABLE_AUTOADVANCE_VIDEOS = False + +# Enable instructor dash to submit background tasks +ENABLE_INSTRUCTOR_BACKGROUND_TASKS = True + +# Enable instructor to assign individual due dates +# Note: In order for this feature to work, you must also add +# 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' to +# the setting FIELD_OVERRIDE_PROVIDERS, in addition to setting this flag to +# True. +INDIVIDUAL_DUE_DATES = False + +# .. toggle_name: CUSTOM_COURSES_EDX +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable Custom Courses for edX, a feature that is more commonly known as +# CCX. Documentation for configuring and using this feature is available at +# https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/enable_ccx.html +# .. toggle_warning: When set to true, 'lms.djangoapps.ccx.overrides.CustomCoursesForEdxOverrideProvider' will +# be added to MODULESTORE_FIELD_OVERRIDE_PROVIDERS +# .. toggle_use_cases: opt_in, circuit_breaker +# .. toggle_creation_date: 2015-04-10 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6636 +CUSTOM_COURSES_EDX = False + +# Toggle to enable certificates of courses on dashboard +ENABLE_VERIFIED_CERTIFICATES = False +# Settings for course import olx validation +ENABLE_COURSE_OLX_VALIDATION = False + +# .. toggle_name: settings.DISABLE_HONOR_CERTIFICATES +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to disable honor certificates. Typically used when your installation only +# allows verified certificates, like courses.edx.org. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2019-05-14 +# .. toggle_tickets: https://openedx.atlassian.net/browse/PROD-269 +DISABLE_HONOR_CERTIFICATES = False # Toggle to disable honor certificates + +DISABLE_AUDIT_CERTIFICATES = False # Toggle to disable audit certificates + +# .. toggle_name: settings.AUTOMATIC_AUTH_FOR_TESTING +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to perform acceptance and load test. Auto auth view is responsible for load +# testing and is controlled by this feature flag. Session verification (of CacheBackedAuthenticationMiddleware) +# is a security feature, but it can be turned off by enabling this feature flag. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-07-25 +# .. toggle_warning: If this has been set to True then the account activation email will be skipped. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/417 +AUTOMATIC_AUTH_FOR_TESTING = False + +# .. toggle_name: settings.RESTRICT_AUTOMATIC_AUTH +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Prevent auto auth from creating superusers or modifying existing users. Auto auth is a +# mechanism where superusers can simply modify attributes of other users by accessing the "/auto_auth url" with +# the right +# querystring parameters. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2018-05-07 +# .. toggle_tickets: https://openedx.atlassian.net/browse/TE-2545 +RESTRICT_AUTOMATIC_AUTH = True + +# .. toggle_name: settings.ENABLE_LOGIN_MICROFRONTEND +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable the login micro frontend. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2018-05-07 +# .. toggle_warning: The login MFE domain name should be listed in LOGIN_REDIRECT_WHITELIST. +ENABLE_LOGIN_MICROFRONTEND = False + +# .. toggle_name: settings.SKIP_EMAIL_VALIDATION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Turn this on to skip sending emails for user validation. +# Beware, as this leaves the door open to potential spam abuse. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2018-05-07 +# .. toggle_warning: The login MFE domain name should be listed in LOGIN_REDIRECT_WHITELIST. +SKIP_EMAIL_VALIDATION = False + +# .. toggle_name: settings.ENABLE_COSMETIC_DISPLAY_PRICE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable the display of "cosmetic_display_price", set in a course advanced settings. This +# cosmetic price is used when there is no registration price associated to the course. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-10-10 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6876 +# .. toggle_warning: The use case of this feature toggle is uncertain. +ENABLE_COSMETIC_DISPLAY_PRICE = False + +# Automatically approve student identity verification attempts +# .. toggle_name: settings.AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If set to True, then we want to skip posting anything to Software Secure. Bypass posting +# anything to Software Secure if the auto verify feature for testing is enabled. We actually don't even create +# the message because that would require encryption and message signing that rely on settings.VERIFY_STUDENT +# values that aren't set in dev. So we just pretend like we successfully posted and automatically approve student +# identity verification attempts. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2013-10-03 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/1184 +AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING = False + +# Maximum number of rows to include in the csv file for downloading problem responses. +MAX_PROBLEM_RESPONSES_COUNT = 5000 + +ENABLED_PAYMENT_REPORTS = [ + "refund_report", + "itemized_purchase_report", + "university_revenue_share", + "certificate_status" +] + +# Turn off account locking if failed login attempts exceeds a limit +# .. toggle_name: settings.ENABLE_MAX_FAILED_LOGIN_ATTEMPTS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: This feature will keep track of the number of failed login attempts on a given user's +# email. If the number of consecutive failed login attempts - without a successful login at some point - reaches +# a configurable threshold (default 6), then the account will be locked for a configurable amount of seconds +# (30 minutes) which will prevent additional login attempts until this time period has passed. If a user +# successfully logs in, all the counter which tracks the number of failed attempts will be reset back to 0. If +# set to False then account locking will be disabled for failed login attempts. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-01-30 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2331 +ENABLE_MAX_FAILED_LOGIN_ATTEMPTS = True + +# Hide any Personally Identifiable Information from application logs +SQUELCH_PII_IN_LOGS = True + +# .. toggle_name: settings.EMBARGO +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Turns on embargo functionality, which blocks users from +# the site or courses based on their location. Embargo can restrict users by states +# and whitelist/blacklist (IP Addresses (ie. 10.0.0.0), Networks (ie. 10.0.0.0/24)), or the user profile country. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-02-27 +# .. toggle_target_removal_date: None +# .. toggle_warning: reverse proxy should be configured appropriately for example Client IP address headers +# (e.g HTTP_X_FORWARDED_FOR) should be configured. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/2749 +EMBARGO = False + +# Whether the Wiki subsystem should be accessible via the direct /wiki/ paths. Setting this to True means +# that people can submit content and modify the Wiki in any arbitrary manner. We're leaving this as True in the +# defaults, so that we maintain current behavior +ALLOW_WIKI_ROOT_ACCESS = True + +# .. toggle_name: settings.ENABLE_THIRD_PARTY_AUTH +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Turn on third-party auth. Disabled for now because full implementations are not yet +# available. Remember to run migrations if you enable this; we don't create tables by default. This feature can +# be enabled on a per-site basis. When enabling this feature, remember to define the allowed authentication +# backends with the AUTHENTICATION_BACKENDS setting. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-09-15 +ENABLE_THIRD_PARTY_AUTH = False + +# .. toggle_name: settings.ENABLE_MKTG_SITE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Toggle to enable alternate urls for marketing links. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-03-24 +# .. toggle_warning: When this is enabled, the MKTG_URLS setting should be defined. The use case of this feature +# toggle is uncertain. +ENABLE_MKTG_SITE = False + +# Prevent concurrent logins per user +PREVENT_CONCURRENT_LOGINS = True + +# .. toggle_name: settings.ALWAYS_REDIRECT_HOMEPAGE_TO_DASHBOARD_FOR_AUTHENTICATED_USER +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When a logged in user goes to the homepage ('/') the user will be redirected to the +# dashboard page when this flag is set to True - this is default Open edX behavior. Set to False to not redirect +# the user. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2014-09-16 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/5220 +ALWAYS_REDIRECT_HOMEPAGE_TO_DASHBOARD_FOR_AUTHENTICATED_USER = True + +# .. toggle_name: settings.ENABLE_COURSE_SORTING_BY_START_DATE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When a user goes to the homepage ('/') the user sees the courses listed in the +# announcement dates order - this is default Open edX behavior. Set to True to change the course sorting behavior +# by their start dates, latest first. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-03-27 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7548 +ENABLE_COURSE_SORTING_BY_START_DATE = True + +# .. toggle_name: settings.ENABLE_COURSE_HOME_REDIRECT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When enabled, along with the ENABLE_MKTG_SITE feature toggle, users who attempt to access a +# course "about" page will be redirected to the course home url. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2019-01-15 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/19604 +ENABLE_COURSE_HOME_REDIRECT = True + +# Expose Mobile REST API. Note that if you use this, you must also set +# ENABLE_OAUTH2_PROVIDER to True +ENABLE_MOBILE_REST_API = False + +# .. toggle_name: settings.ENABLE_COMBINED_LOGIN_REGISTRATION_FOOTER +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Display the standard footer in the login page. This feature can be overridden by a site- +# specific configuration. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2016-06-24 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1320 +ENABLE_COMBINED_LOGIN_REGISTRATION_FOOTER = False + +# Enable organizational email opt-in +ENABLE_MKTG_EMAIL_OPT_IN = False + +# .. toggle_name: settings.ENABLE_FOOTER_MOBILE_APP_LINKS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True if you want show the mobile app links (Apple App Store & Google Play Store) in +# the footer. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-01-13 +# .. toggle_warning: If you set this to True then you should also set your mobile application's app store and play +# store URLs in the MOBILE_STORE_URLS settings dictionary. These links are not part of the default theme. If you +# want these links on your footer then you should use the edx.org theme. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6588 +ENABLE_FOOTER_MOBILE_APP_LINKS = False + +# Let students save and manage their annotations +# .. toggle_name: settings.ENABLE_EDXNOTES +# .. toggle_implementation: SettingToggle +# .. toggle_default: False +# .. toggle_description: This toggle enables the students to save and manage their annotations in the +# course using the notes service. The bulk of the actual work in storing the notes is done by +# a separate service (see the edx-notes-api repo). +# .. toggle_warning: Requires the edx-notes-api service properly running and to have configured the django settings +# EDXNOTES_INTERNAL_API and EDXNOTES_PUBLIC_API. If you update this setting, also update it in Studio. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-01-04 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6321 +ENABLE_EDXNOTES = False + +# Toggle to enable coordination with the Publisher tool (keep in sync with cms/envs/common.py) +ENABLE_PUBLISHER = False + +# Milestones application flag +MILESTONES_APP = False + +# Prerequisite courses feature flag +ENABLE_PREREQUISITE_COURSES = False + +# For easily adding modes to courses during acceptance testing +MODE_CREATION_FOR_TESTING = False + +# For caching programs in contexts where the LMS can only +# be reached over HTTP. +EXPOSE_CACHE_PROGRAMS_ENDPOINT = False + +# Courseware search feature +# .. toggle_name: settings.ENABLE_COURSEWARE_SEARCH +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When enabled, this adds a Search the course widget on the course outline and courseware +# pages for searching courseware data. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-01-29 +# .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. You will +# see the search widget on the courseware page only if the DISABLE_COURSE_OUTLINE_PAGE_FLAG is set. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6506 +ENABLE_COURSEWARE_SEARCH = False + +# .. toggle_name: settings.ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When enabled, this adds a Search the course widget on the course outline and courseware +# pages for searching courseware data but for course staff users only. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2019-12-06 +# .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. If +# ENABLE_COURSEWARE_SEARCH is enabled then the search widget will be visible to all learners and this flag's +# value does not matter in that case. This flag is enabled in devstack by default. +# .. toggle_tickets: https://openedx.atlassian.net/browse/TNL-6931 +ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF = False + +# Dashboard search feature +# .. toggle_name: settings.ENABLE_DASHBOARD_SEARCH +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When enabled, this adds a Search Your Courses widget on the dashboard page for searching +# courseware data. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-01-29 +# .. toggle_warning: In order to get this working, your courses data should be indexed in Elasticsearch. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/6506 +ENABLE_DASHBOARD_SEARCH = False + +# log all information from cybersource callbacks +LOG_POSTPAY_CALLBACKS = True + +# .. toggle_name: settings.LICENSING +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Toggle platform-wide course licensing. The course.license attribute is then used to append +# license information to the courseware. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-05-14 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7315 +LICENSING = False + +# .. toggle_name: settings.CERTIFICATES_HTML_VIEW +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable course certificates on your instance of Open edX. +# .. toggle_warning: You must enable this feature flag in both Studio and the LMS and complete the configuration tasks +# described here: +# https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/enable_certificates.html pylint: disable=line-too-long,useless-suppression +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-03-13 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7113 +CERTIFICATES_HTML_VIEW = False + +# .. toggle_name: settings.CUSTOM_CERTIFICATE_TEMPLATES_ENABLED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable custom certificate templates which are configured via Django admin. +# .. toggle_warning: None +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-08-13 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/SOL-1044 +CUSTOM_CERTIFICATE_TEMPLATES_ENABLED = False + +# .. toggle_name: settings.ENABLE_COURSE_DISCOVERY +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Add a course search widget to the LMS for searching courses. When this is enabled, the +# latest courses are no longer displayed on the LMS landing page. Also, an "Explore Courses" item is added to the +# navbar. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-04-23 +# .. toggle_target_removal_date: None +# .. toggle_warning: The COURSE_DISCOVERY_MEANINGS setting should be properly defined. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7845 +ENABLE_COURSE_DISCOVERY = False + +# .. toggle_name: settings.ENABLE_COURSE_FILENAME_CCX_SUFFIX +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If set to True, CCX ID will be included in the generated filename for CCX courses. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-03-16 +# .. toggle_target_removal_date: None +# .. toggle_tickets: None +# .. toggle_warning: Turning this feature ON will affect all generated filenames which are related to CCX courses. +ENABLE_COURSE_FILENAME_CCX_SUFFIX = False + +# Setting for overriding default filtering facets for Course discovery +# COURSE_DISCOVERY_FILTERS = ["org", "language", "modes"] + +# Software secure fake page feature flag +ENABLE_SOFTWARE_SECURE_FAKE = False + +# Teams feature +ENABLE_TEAMS = True + +# Show video bumper in LMS +ENABLE_VIDEO_BUMPER = False + +# How many seconds to show the bumper again, default is 7 days: +SHOW_BUMPER_PERIODICITY = 7 * 24 * 3600 + +# .. toggle_name: settings.ENABLE_SPECIAL_EXAMS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable to use special exams, aka timed and proctored exams. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-09-04 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/9744 +ENABLE_SPECIAL_EXAMS = False + +# .. toggle_name: settings.ENABLE_LTI_PROVIDER +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set to True, Open edX site can be used as an LTI Provider to other systems +# and applications. +# .. toggle_warning: After enabling this feature flag there are multiple steps involved to configure edX +# as LTI provider. Full guide is available here: +# https://docs.openedx.org/en/latest/site_ops/install_configure_run_guide/configuration/lti/index.html +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-04-24 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/7689 +ENABLE_LTI_PROVIDER = False + +# .. toggle_name: settings.SHOW_HEADER_LANGUAGE_SELECTOR +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set to True, language selector will be visible in the header. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-05-25 +# .. toggle_warning: You should set the languages in the DarkLangConfig table to get this working. If you have +# not set any languages in the DarkLangConfig table then the language selector will not be visible in the header. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15133 +SHOW_HEADER_LANGUAGE_SELECTOR = False + +# At edX it's safe to assume that English transcripts are always available +# This is not the case for all installations. +# The default value in {lms,cms}/envs/common.py and xmodule/tests/test_video.py should be consistent. +FALLBACK_TO_ENGLISH_TRANSCRIPTS = True + +# .. toggle_name: settings.SHOW_FOOTER_LANGUAGE_SELECTOR +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set to True, language selector will be visible in the footer. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-05-25 +# .. toggle_warning: LANGUAGE_COOKIE_NAME is required to use footer-language-selector, set it if it has not been set. +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15133 +SHOW_FOOTER_LANGUAGE_SELECTOR = False + +# .. toggle_name: settings.ENABLE_CSMH_EXTENDED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Write Courseware Student Module History (CSMH) to the extended table: this logs all +# student activities to MySQL, in a separate database. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2020-11-05 +# .. toggle_warning: Even though most Open edX instances run with a separate CSMH database, it may not always be +# the case. When disabling this feature flag, remember to remove "lms.djangoapps.coursewarehistoryextended" +# from the INSTALLED_APPS and the "StudentModuleHistoryExtendedRouter" from the DATABASE_ROUTERS. +ENABLE_CSMH_EXTENDED = True + +# Read from both the CSMH and CSMHE history tables. +# This is the default, but can be disabled if all history +# lives in the Extended table, saving the frontend from +# making multiple queries. +ENABLE_READING_FROM_MULTIPLE_HISTORY_TABLES = True + +# Set this to False to facilitate cleaning up invalid xml from your modulestore. +ENABLE_XBLOCK_XML_VALIDATION = True + +# .. toggle_name: settings.ALLOW_PUBLIC_ACCOUNT_CREATION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Allow public account creation. If this is disabled, users will no longer have access to +# the signup page. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-04-12 +# .. toggle_tickets: https://openedx.atlassian.net/browse/YONK-513 +ALLOW_PUBLIC_ACCOUNT_CREATION = True + +# .. toggle_name: settings.SHOW_REGISTRATION_LINKS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Allow registration links. If this is disabled, users will no longer see buttons to the +# the signup page. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2023-03-27 +SHOW_REGISTRATION_LINKS = True + +# .. toggle_name: settings.ENABLE_COOKIE_CONSENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enable header banner for cookie consent using this service: +# https://cookieconsent.insites.com/ +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-03-03 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1560 +ENABLE_COOKIE_CONSENT = False + +# Whether or not the dynamic EnrollmentTrackUserPartition should be registered. +ENABLE_ENROLLMENT_TRACK_USER_PARTITION = True + +# Enable one click program purchase +# See LEARNER-493 +ENABLE_ONE_CLICK_PROGRAM_PURCHASE = False + +# .. toggle_name: settings.ALLOW_EMAIL_ADDRESS_CHANGE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Allow users to change their email address on the Account Settings page. If this is +# disabled, users will not be able to change their email address. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-06-26 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1735 +ALLOW_EMAIL_ADDRESS_CHANGE = True + +# .. toggle_name: settings.ENABLE_BULK_ENROLLMENT_VIEW +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When set to True the bulk enrollment view is enabled and one can use it to enroll multiple +# users in a course using bulk enrollment API endpoint (/api/bulk_enroll/v1/bulk_enroll). +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-07-15 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/15006 +ENABLE_BULK_ENROLLMENT_VIEW = False + +# Set to enable Enterprise integration +ENABLE_ENTERPRISE_INTEGRATION = False + +# .. toggle_name: settings.ENABLE_HTML_XBLOCK_STUDENT_VIEW_DATA +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Whether HTML Block returns HTML content with the Course Blocks API when the API +# is called with student_view_data=html query parameter. +# .. toggle_warning: Because the Course Blocks API caches its data, the cache must be cleared (e.g. by +# re-publishing the course) for changes to this flag to take effect. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-08-28 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1880 +ENABLE_HTML_XBLOCK_STUDENT_VIEW_DATA = False + +# .. toggle_name: settings.ENABLE_PASSWORD_RESET_FAILURE_EMAIL +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Whether to send an email for failed password reset attempts or not. This happens when a +# user asks for a password reset but they don't have an account associated to their email. This is useful for +# notifying users that they don't have an account associated with email addresses they believe they've registered +# with. This setting can be overridden by a site-specific configuration. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2017-07-20 +# .. toggle_tickets: https://openedx.atlassian.net/browse/OSPR-1832 +ENABLE_PASSWORD_RESET_FAILURE_EMAIL = False + +# Sets the default browser support. For more information go to http://browser-update.org/customize.html +UNSUPPORTED_BROWSER_ALERT_VERSIONS = "{i:10,f:-3,o:-3,s:-3,c:-3}" + +# .. toggle_name: settings.ENABLE_ACCOUNT_DELETION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: Whether to display the account deletion section on Account Settings page. Set to False to +# hide this section. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2018-06-01 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/18298 +ENABLE_ACCOUNT_DELETION = True + +# Enable feature to remove enrollments and users. Used to reset state of master's integration environments +ENABLE_ENROLLMENT_RESET = False +DISABLE_MOBILE_COURSE_AVAILABLE = False + +# .. toggle_name: settings.ENABLE_CHANGE_USER_PASSWORD_ADMIN +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable changing a user password through django admin. This is disabled by +# default because enabling allows a method to bypass password policy. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2020-02-21 +# .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/21616' +ENABLE_CHANGE_USER_PASSWORD_ADMIN = False + +# .. toggle_name: settings.ENABLE_AUTHN_MICROFRONTEND +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Supports staged rollout of a new micro-frontend-based implementation of the logistration. +# .. toggle_use_cases: temporary, open_edx +# .. toggle_creation_date: 2020-09-08 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/24908' +# .. toggle_warning: Also set settings.AUTHN_MICROFRONTEND_URL for rollout. This temporary feature +# toggle does not have a target removal date. +ENABLE_AUTHN_MICROFRONTEND = os.environ.get("EDXAPP_ENABLE_AUTHN_MFE", False) + +# .. toggle_name: settings.ENABLE_CATALOG_MICROFRONTEND +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Supports staged rollout of a new micro-frontend-based implementation of the catalog. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2025-05-15 +# .. toggle_target_removal_date: 2025-11-01 +ENABLE_CATALOG_MICROFRONTEND = False + +### ORA Feature Flags ### +# .. toggle_name: settings.ENABLE_ORA_ALL_FILE_URLS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not +# discoverable. If enabled, will iterate through all possible file key suffixes up to the max for displaying +# file metadata in staff assessments. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-03-03 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_ORA_ALL_FILE_URLS = False + +# .. toggle_name: settings.ENABLE_ORA_USER_STATE_UPLOAD_DATA +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: A "work-around" feature toggle meant to help in cases where some file uploads are not +# discoverable. If enabled, will pull file metadata from StudentModule.state for display in staff assessments. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-03-03 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/EDUCATOR-4951 +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_ORA_USER_STATE_UPLOAD_DATA = False + +# .. toggle_name: settings.ENABLE_ORA_USERNAMES_ON_DATA_EXPORT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to add deanonymized usernames to ORA data +# report. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-06-11 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://openedx.atlassian.net/browse/TNL-7273 +# .. toggle_warning: This temporary feature toggle does not have a target removal date. +ENABLE_ORA_USERNAMES_ON_DATA_EXPORT = False + +# .. toggle_name: settings.ENABLE_COURSE_ASSESSMENT_GRADE_CHANGE_SIGNAL +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to start sending signals for assessment level grade updates. Notably, the only +# handler of this signal at the time of this writing sends assessment updates to enterprise integrated channels. +# .. toggle_use_cases: temporary +# .. toggle_creation_date: 2020-12-09 +# .. toggle_target_removal_date: 2021-02-01 +# .. toggle_tickets: https://openedx.atlassian.net/browse/ENT-3818 +ENABLE_COURSE_ASSESSMENT_GRADE_CHANGE_SIGNAL = False + +# .. toggle_name: settings.ALLOW_ADMIN_ENTERPRISE_COURSE_ENROLLMENT_DELETION +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If true, allows for the deletion of EnterpriseCourseEnrollment records via Django Admin. +# .. toggle_use_cases: opt_in +# .. toggle_creation_date: 2021-01-27 +# .. toggle_tickets: https://openedx.atlassian.net/browse/ENT-4022 +ALLOW_ADMIN_ENTERPRISE_COURSE_ENROLLMENT_DELETION = False + +# .. toggle_name: settings.ENABLE_BULK_USER_RETIREMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable bulk user retirement through REST API. This is disabled by +# default. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-03-11 +# .. toggle_target_removal_date: None +# .. toggle_warning: None +# .. toggle_tickets: 'https://openedx.atlassian.net/browse/OSPR-5290' +ENABLE_BULK_USER_RETIREMENT = False + +# .. toggle_name: settings.ENABLE_INTEGRITY_SIGNATURE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Whether to display honor code agreement for learners before their first grade assignment +# (https://github.com/edx/edx-name-affirmation) +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-02-15 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1348' +ENABLE_INTEGRITY_SIGNATURE = False + +# .. toggle_name: settings.ENABLE_LTI_PII_ACKNOWLEDGEMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enables the lti pii acknowledgement feature for a course +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2023-10 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://2u-internal.atlassian.net/browse/MST-2055' +ENABLE_LTI_PII_ACKNOWLEDGEMENT = False + +# .. toggle_name: settings.ENABLE_NEW_BULK_EMAIL_EXPERIENCE +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When true, replaces the bulk email tool found on the +# instructor dashboard with a link to the new communications MFE version instead. +# Setting the tool to false will leave the old bulk email tool experience in place. +# .. toggle_use_cases: opt_in +# .. toggle_creation_date: 2022-03-21 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://openedx.atlassian.net/browse/MICROBA-1758' +ENABLE_NEW_BULK_EMAIL_EXPERIENCE = False + +# .. toggle_name: MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: If enabled, the Library Content Block is marked as complete when users view it. +# Otherwise (by default), all children of this block must be completed. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-03-22 +# .. toggle_target_removal_date: None +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/28268 +# .. toggle_warning: For consistency in user-experience, keep the value in sync with the setting of the same name +# in the LMS and CMS. +MARK_LIBRARY_CONTENT_BLOCK_COMPLETE_ON_VIEW = False + +# .. toggle_name: settings.DISABLE_UNENROLLMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to disable self-unenrollments via REST API. +# This also hides the "Unenroll" button on the Learner Dashboard. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2021-10-11 +# .. toggle_warning: For consistency in user experience, keep the value in sync with the setting of the same name +# in the LMS and CMS. +# .. toggle_tickets: 'https://github.com/open-craft/edx-platform/pull/429' +DISABLE_UNENROLLMENT = False + +# .. toggle_name: settings.ENABLE_CERTIFICATES_IDV_REQUIREMENT +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Whether to enforce ID Verification requirements for course certificates generation +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-04-26 +# .. toggle_target_removal_date: None +# .. toggle_tickets: 'https://openedx.atlassian.net/browse/MST-1458' +ENABLE_CERTIFICATES_IDV_REQUIREMENT = False + +# .. toggle_name: settings.DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to disable enrollment for user invited to a course +# .. if user is registering before enrollment start date or after enrollment end date +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2022-06-06 +# .. toggle_tickets: 'https://github.com/openedx/edx-platform/pull/29538' +DISABLE_ALLOWED_ENROLLMENT_IF_ENROLLMENT_CLOSED = False + +# .. toggle_name: settings.SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS +# .. toggle_implementation: SettingToggle +# .. toggle_default: False +# .. toggle_description: When True, the system will publish certificate lifecycle signals to the event bus. +# This toggle is used to create the EVENT_BUS_PRODUCER_CONFIG setting. +# .. toggle_warning: The default may be changed in a later release. See +# https://github.com/openedx/openedx-events/issues/265 +# .. toggle_use_cases: opt_in +# .. toggle_creation_date: 2023-10-10 +# .. toggle_tickets: https://github.com/openedx/openedx-events/issues/210 +SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS = False + +# .. toggle_name: settings.ENABLE_GRADING_METHOD_IN_PROBLEMS +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Enables the grading method feature in capa problems. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-03-22 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/33911 +ENABLE_GRADING_METHOD_IN_PROBLEMS = False + +# .. toggle_name: settings.ENABLE_COURSEWARE_SEARCH_VERIFIED_REQUIRED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: When enabled, the courseware search feature will only be enabled +# for users in a verified enrollment track. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-04-24 +ENABLE_COURSEWARE_SEARCH_VERIFIED_ENROLLMENT_REQUIRED = False + +# .. toggle_name: settings.BADGES_ENABLED +# .. toggle_implementation: DjangoSetting +# .. toggle_default: False +# .. toggle_description: Set to True to enable badges functionality. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2024-04-02 +# .. toggle_target_removal_date: None +BADGES_ENABLED = False + +################ Enable credit eligibility feature #################### +# .. toggle_name: settings.ENABLE_CREDIT_ELIGIBILITY +# .. toggle_implementation: DjangoSetting +# .. toggle_default: True +# .. toggle_description: When enabled, it is possible to define a credit eligibility criteria in the CMS. A "Credit +# Eligibility" section then appears for those courses in the LMS. +# .. toggle_use_cases: open_edx +# .. toggle_creation_date: 2015-06-17 +# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/8550 +ENABLE_CREDIT_ELIGIBILITY = True + +ENABLE_CROSS_DOMAIN_CSRF_COOKIE = False # .. toggle_name: ENABLE_REQUIRE_THIRD_PARTY_AUTH # .. toggle_implementation: DjangoSetting @@ -1983,7 +1999,7 @@ PAID_COURSE_REGISTRATION_CURRENCY = ['usd', '$'] # .. setting_description: Set the public API endpoint LMS will use in the frontend to # interact with the edx_notes_api service. # .. setting_warning: This setting must be a publicly accessible endpoint. It is only used -# when the setting FEATURES['ENABLE_EDXNOTES'] is activated. +# when the setting settings.ENABLE_EDXNOTES is activated. EDXNOTES_PUBLIC_API = 'http://localhost:18120/api/v1' # .. setting_name: EDXNOTES_INTERNAL_API # .. setting_default: http://localhost:18120/api/v1 @@ -1991,7 +2007,7 @@ EDXNOTES_PUBLIC_API = 'http://localhost:18120/api/v1' # interact with the edx_notes_api service. # .. setting_warning: Normally set to the same value of EDXNOTES_PUBLIC_API. It is not # mandatory for this setting to be a publicly accessible endpoint, but to be accessible -# by the LMS service. It is only used when the setting FEATURES['ENABLE_EDXNOTES'] is +# by the LMS service. It is only used when the setting settings.ENABLE_EDXNOTES is # activated. EDXNOTES_INTERNAL_API = 'http://localhost:18120/api/v1' # .. setting_name: EDXNOTES_CLIENT_NAME @@ -3420,22 +3436,9 @@ VERIFICATION_EXPIRY_EMAIL = { "DEFAULT_EMAILS": 2, } - -################ Enable credit eligibility feature #################### -ENABLE_CREDIT_ELIGIBILITY = True -# .. toggle_name: FEATURES['ENABLE_CREDIT_ELIGIBILITY'] -# .. toggle_implementation: DjangoSetting -# .. toggle_default: True -# .. toggle_description: When enabled, it is possible to define a credit eligibility criteria in the CMS. A "Credit -# Eligibility" section then appears for those courses in the LMS. -# .. toggle_use_cases: open_edx -# .. toggle_creation_date: 2015-06-17 -# .. toggle_tickets: https://github.com/openedx/edx-platform/pull/8550 -FEATURES['ENABLE_CREDIT_ELIGIBILITY'] = ENABLE_CREDIT_ELIGIBILITY - ############# Cross-domain requests ################# -if FEATURES.get('ENABLE_CORS_HEADERS'): +if ENABLE_CORS_HEADERS: CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = () CORS_ORIGIN_ALLOW_ALL = False @@ -3915,7 +3918,7 @@ COMMENTS_SERVICE_KEY = '' CHECKPOINT_PATTERN = r'(?P[^/]+)' # For the fields override feature -# If using FEATURES['INDIVIDUAL_DUE_DATES'], you should add +# If using settings.INDIVIDUAL_DUE_DATES, you should add # 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider' to # this setting. FIELD_OVERRIDE_PROVIDERS = () @@ -4133,7 +4136,7 @@ HELP_TOKENS_BOOKS = { # These configuration settings are specific to the Enterprise service and you should # not find references to them within the edx-platform project. # -# Only used if FEATURES['ENABLE_ENTERPRISE_INTEGRATION'] == True. +# Only used if settings.ENABLE_ENTERPRISE_INTEGRATION == True. ENTERPRISE_PUBLIC_ENROLLMENT_API_URL = Derived( lambda settings: (settings.LMS_ROOT_URL or '') + settings.LMS_ENROLLMENT_API_PATH @@ -4842,13 +4845,13 @@ SIMPLE_HISTORY_DATE_INDEX = False def _should_send_certificate_events(settings): - return settings.FEATURES['SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS'] + return settings.SEND_LEARNING_CERTIFICATE_LIFECYCLE_EVENTS_TO_BUS #### Event bus producing #### def _should_send_learning_badge_events(settings): - return settings.FEATURES['BADGES_ENABLED'] + return settings.BADGES_ENABLED # .. setting_name: EVENT_BUS_PRODUCER_CONFIG # .. setting_default: all events disabled diff --git a/lms/envs/devstack.py b/lms/envs/devstack.py index a2ee3ea9d8..e2fc7fb6c2 100644 --- a/lms/envs/devstack.py +++ b/lms/envs/devstack.py @@ -142,31 +142,31 @@ PIPELINE['SASS_ARGUMENTS'] = '--debug-info' ########################### VERIFIED CERTIFICATES ################################# -FEATURES['AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING'] = True +AUTOMATIC_VERIFY_STUDENT_IDENTITY_FOR_TESTING = True ########################### External REST APIs ################################# -FEATURES['ENABLE_OAUTH2_PROVIDER'] = True -FEATURES['ENABLE_MOBILE_REST_API'] = True -FEATURES['ENABLE_VIDEO_ABSTRACTION_LAYER_API'] = True +ENABLE_OAUTH2_PROVIDER = True +ENABLE_MOBILE_REST_API = True +ENABLE_VIDEO_ABSTRACTION_LAYER_API = True ########################## SECURITY ####################### -FEATURES['ENABLE_MAX_FAILED_LOGIN_ATTEMPTS'] = False -FEATURES['SQUELCH_PII_IN_LOGS'] = False -FEATURES['PREVENT_CONCURRENT_LOGINS'] = False +ENABLE_MAX_FAILED_LOGIN_ATTEMPTS = False +SQUELCH_PII_IN_LOGS = False +PREVENT_CONCURRENT_LOGINS = False ########################### Milestones ################################# -FEATURES['MILESTONES_APP'] = True +MILESTONES_APP = True ########################### Entrance Exams ################################# -FEATURES['ENTRANCE_EXAMS'] = True +ENTRANCE_EXAMS = True ################################ COURSE LICENSES ################################ -FEATURES['LICENSING'] = True +LICENSING = True ########################## Courseware Search ####################### -FEATURES['ENABLE_COURSEWARE_SEARCH'] = True -FEATURES['ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF'] = True +ENABLE_COURSEWARE_SEARCH = True +ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF = True SEARCH_ENGINE = 'search.elastic.ElasticSearchEngine' SEARCH_COURSEWARE_CONTENT_LOG_PARAMS = True @@ -179,11 +179,11 @@ ELASTIC_SEARCH_CONFIG = [ ] ########################## Dashboard Search ####################### -FEATURES['ENABLE_DASHBOARD_SEARCH'] = False +ENABLE_DASHBOARD_SEARCH = False ########################## Certificates Web/HTML View ####################### -FEATURES['CERTIFICATES_HTML_VIEW'] = True +CERTIFICATES_HTML_VIEW = True ########################## Course Discovery ####################### @@ -205,14 +205,14 @@ COURSE_DISCOVERY_MEANINGS = { 'language': LANGUAGE_MAP, } -FEATURES['ENABLE_COURSE_DISCOVERY'] = False +ENABLE_COURSE_DISCOVERY = False # Setting for overriding default filtering facets for Course discovery # COURSE_DISCOVERY_FILTERS = ["org", "language", "modes"] -FEATURES['COURSES_ARE_BROWSEABLE'] = True +COURSES_ARE_BROWSEABLE = True HOMEPAGE_COURSE_MAX = 9 # Software secure fake page feature flag -FEATURES['ENABLE_SOFTWARE_SECURE_FAKE'] = True +ENABLE_SOFTWARE_SECURE_FAKE = True # Setting for the testing of Software Secure Result Callback VERIFY_STUDENT["SOFTWARE_SECURE"] = { @@ -226,14 +226,14 @@ SEARCH_SKIP_ENROLLMENT_START_DATE_FILTERING = True ########################## Shopping cart ########################## -FEATURES['ENABLE_COSMETIC_DISPLAY_PRICE'] = True +ENABLE_COSMETIC_DISPLAY_PRICE = True ######################### Program Enrollments ##################### -FEATURES['ENABLE_ENROLLMENT_RESET'] = True +ENABLE_ENROLLMENT_RESET = True ########################## Third Party Auth ####################### -if FEATURES.get('ENABLE_THIRD_PARTY_AUTH') and ( +if ENABLE_THIRD_PARTY_AUTH and ( 'common.djangoapps.third_party_auth.dummy.DummyBackend' not in AUTHENTICATION_BACKENDS ): AUTHENTICATION_BACKENDS = ['common.djangoapps.third_party_auth.dummy.DummyBackend'] + list(AUTHENTICATION_BACKENDS) @@ -293,7 +293,7 @@ LEARNING_MICROFRONTEND_URL = os.environ.get("LEARNING_MICROFRONTEND_URL", "http: LEARNING_MICROFRONTEND_NETLOC = os.environ.get("LEARNING_MICROFRONTEND_NETLOC", urlparse(LEARNING_MICROFRONTEND_URL).netloc) ###################### Cross-domain requests ###################### -FEATURES['ENABLE_CORS_HEADERS'] = True +ENABLE_CORS_HEADERS = True CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = () CORS_ORIGIN_ALLOW_ALL = True @@ -407,17 +407,15 @@ DISCUSSION_SPAM_URLS = [] ############## Docker based devstack settings ####################### -FEATURES.update({ - 'AUTOMATIC_AUTH_FOR_TESTING': True, - 'ENABLE_DISCUSSION_SERVICE': True, - 'SHOW_HEADER_LANGUAGE_SELECTOR': True, +AUTOMATIC_AUTH_FOR_TESTING = True +ENABLE_DISCUSSION_SERVICE = True +SHOW_HEADER_LANGUAGE_SELECTOR = True - # Enable enterprise integration by default. - # See https://github.com/openedx/edx-enterprise/blob/master/docs/development.rst for - # more background on edx-enterprise. - # Toggle this off if you don't want anything to do with enterprise in devstack. - 'ENABLE_ENTERPRISE_INTEGRATION': True, -}) +# Enable enterprise integration by default. +# See https://github.com/openedx/edx-enterprise/blob/master/docs/development.rst for +# more background on edx-enterprise. +# Toggle this off if you don't want anything to do with enterprise in devstack. +ENABLE_ENTERPRISE_INTEGRATION = True ENABLE_MKTG_SITE = os.environ.get('ENABLE_MARKETING_SITE', False) MARKETING_SITE_ROOT = os.environ.get('MARKETING_SITE_ROOT', 'http://localhost:8080') @@ -463,7 +461,7 @@ SYSTEM_WIDE_ROLE_CLASSES.append( 'system_wide_roles.SystemWideRoleAssignment', ) -if FEATURES.get('ENABLE_ENTERPRISE_INTEGRATION'): +if ENABLE_ENTERPRISE_INTEGRATION: SYSTEM_WIDE_ROLE_CLASSES.append( 'enterprise.SystemWideEnterpriseUserRoleAssignment', ) @@ -498,8 +496,8 @@ DCS_SESSION_COOKIE_SAMESITE_FORCE_ALL = True # LOGGING['loggers']['django.db.backends'] = {'handlers': ['console'], 'level': 'DEBUG', 'propagate': False} ################### Special Exams (Proctoring) and Prereqs ################### -FEATURES['ENABLE_SPECIAL_EXAMS'] = True -FEATURES['ENABLE_PREREQUISITE_COURSES'] = True +ENABLE_SPECIAL_EXAMS = True +ENABLE_PREREQUISITE_COURSES = True # Used in edx-proctoring for ID generation in lieu of SECRET_KEY - dummy value # (ref MST-637) diff --git a/lms/envs/production.py b/lms/envs/production.py index 584ebf726e..0620d4f2c0 100644 --- a/lms/envs/production.py +++ b/lms/envs/production.py @@ -32,6 +32,11 @@ from xmodule.modulestore.modulestore_settings import convert_module_store_settin from .common import * +from openedx.core.lib.features_setting_proxy import FeaturesProxy + +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) + def get_env_setting(setting): """ Get the environment setting or return exception """ @@ -198,7 +203,7 @@ LOGGING = get_logger_config( service_variant=SERVICE_VARIANT, ) -if FEATURES['ENABLE_CORS_HEADERS'] or FEATURES.get('ENABLE_CROSS_DOMAIN_CSRF_COOKIE'): +if ENABLE_CORS_HEADERS or ENABLE_CROSS_DOMAIN_CSRF_COOKIE: CORS_ALLOW_CREDENTIALS = True CORS_ORIGIN_WHITELIST = _YAML_TOKENS.get('CORS_ORIGIN_WHITELIST', ()) CORS_ORIGIN_ALLOW_ALL = _YAML_TOKENS.get('CORS_ORIGIN_ALLOW_ALL', False) @@ -281,7 +286,7 @@ EVENT_TRACKING_BACKENDS['segmentio']['OPTIONS']['processors'][0]['OPTIONS']['whi EVENT_TRACKING_SEGMENTIO_EMIT_WHITELIST ) -if FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): +if ENABLE_THIRD_PARTY_AUTH: AUTHENTICATION_BACKENDS = _YAML_TOKENS.get('THIRD_PARTY_AUTH_BACKENDS', [ 'social_core.backends.google.GoogleOAuth2', 'social_core.backends.linkedin.LinkedinOAuth2', @@ -318,7 +323,7 @@ if FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): THIRD_PARTY_AUTH_CUSTOM_AUTH_FORMS = _YAML_TOKENS.get('THIRD_PARTY_AUTH_CUSTOM_AUTH_FORMS', {}) ##### OAUTH2 Provider ############## -if FEATURES['ENABLE_OAUTH2_PROVIDER']: +if ENABLE_OAUTH2_PROVIDER: OAUTH_ENFORCE_SECURE = True OAUTH_ENFORCE_CLIENT_SECURE = True # Defaults for the following are defined in lms.envs.common @@ -326,10 +331,10 @@ if FEATURES['ENABLE_OAUTH2_PROVIDER']: OAUTH_EXPIRE_DELTA_PUBLIC = datetime.timedelta(days=OAUTH_EXPIRE_PUBLIC_CLIENT_DAYS) if ( - FEATURES['ENABLE_COURSEWARE_SEARCH'] or - FEATURES['ENABLE_DASHBOARD_SEARCH'] or - FEATURES['ENABLE_COURSE_DISCOVERY'] or - FEATURES['ENABLE_TEAMS'] + ENABLE_COURSEWARE_SEARCH or + ENABLE_DASHBOARD_SEARCH or + ENABLE_COURSE_DISCOVERY or + ENABLE_TEAMS ): # Use ElasticSearch as the search engine herein SEARCH_ENGINE = "search.elastic.ElasticSearchEngine" @@ -341,7 +346,7 @@ XBLOCK_SETTINGS.setdefault("VideoBlock", {})["licensing_enabled"] = FEATURES["LI XBLOCK_SETTINGS.setdefault("VideoBlock", {})['YOUTUBE_API_KEY'] = YOUTUBE_API_KEY ##### Custom Courses for EdX ##### -if FEATURES['CUSTOM_COURSES_EDX']: +if CUSTOM_COURSES_EDX: INSTALLED_APPS += ['lms.djangoapps.ccx', 'openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig'] MODULESTORE_FIELD_OVERRIDE_PROVIDERS += ( 'lms.djangoapps.ccx.overrides.CustomCoursesForEdxOverrideProvider', @@ -350,7 +355,7 @@ if FEATURES['CUSTOM_COURSES_EDX']: FIELD_OVERRIDE_PROVIDERS = tuple(FIELD_OVERRIDE_PROVIDERS) ##### Individual Due Date Extensions ##### -if FEATURES['INDIVIDUAL_DUE_DATES']: +if INDIVIDUAL_DUE_DATES: FIELD_OVERRIDE_PROVIDERS += ( 'lms.djangoapps.courseware.student_field_overrides.IndividualStudentOverrideProvider', ) @@ -375,7 +380,7 @@ PROFILE_IMAGE_DEFAULT_FILENAME = 'images/profiles/default' ##### Credit Provider Integration ##### ##################### LTI Provider ##################### -if FEATURES['ENABLE_LTI_PROVIDER']: +if ENABLE_LTI_PROVIDER: INSTALLED_APPS.append('lms.djangoapps.lti_provider.apps.LtiProviderConfig') AUTHENTICATION_BACKENDS.append('lms.djangoapps.lti_provider.users.LtiBackend') diff --git a/lms/envs/test.py b/lms/envs/test.py index c78604c0c1..c2b2b15569 100644 --- a/lms/envs/test.py +++ b/lms/envs/test.py @@ -27,10 +27,15 @@ from openedx.core.lib.derived import derive_settings from openedx.core.lib.tempdir import mkdtemp_clean from xmodule.modulestore.modulestore_settings import update_module_store_settings # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.lib.features_setting_proxy import FeaturesProxy + from .common import * from common.djangoapps.util.testing import patch_sessions, patch_testcase # pylint: disable=wrong-import-order +# A proxy for feature flags stored in the settings namespace +FEATURES = FeaturesProxy(globals()) + # This patch disables the commit_on_success decorator during tests # in TestCase subclasses. patch_testcase() @@ -55,33 +60,33 @@ MONGO_HOST = os.environ.get('EDXAPP_TEST_MONGO_HOST', 'localhost') THIS_UUID = uuid4().hex[:5] -FEATURES['DISABLE_SET_JWT_COOKIES_FOR_TESTS'] = True +DISABLE_SET_JWT_COOKIES_FOR_TESTS = True # can't test start dates with this True, but on the other hand, # can test everything else :) -FEATURES['DISABLE_START_DATES'] = True +DISABLE_START_DATES = True # Most tests don't use the discussion service, so we turn it off to speed them up. # Tests that do can enable this flag, but must use the UrlResetMixin class to force urls.py # to reload. For consistency in user-experience, keep the value of this setting in sync with # the one in cms/envs/test.py -FEATURES['ENABLE_DISCUSSION_SERVICE'] = False +ENABLE_DISCUSSION_SERVICE = False -FEATURES['ENABLE_SERVICE_STATUS'] = True +ENABLE_SERVICE_STATUS = True -FEATURES['ENABLE_VERIFIED_CERTIFICATES'] = True +ENABLE_VERIFIED_CERTIFICATES = True # Toggles embargo on for testing -FEATURES['EMBARGO'] = True +EMBARGO = True # Enable the milestones app in tests to be consistent with it being enabled in production -FEATURES['MILESTONES_APP'] = True +MILESTONES_APP = True -FEATURES['ENABLE_ENROLLMENT_TRACK_USER_PARTITION'] = True +ENABLE_ENROLLMENT_TRACK_USER_PARTITION = True -FEATURES['ENABLE_BULK_ENROLLMENT_VIEW'] = True +ENABLE_BULK_ENROLLMENT_VIEW = True -FEATURES['ENABLE_BULK_USER_RETIREMENT'] = True +ENABLE_BULK_USER_RETIREMENT = True DEFAULT_MOBILE_AVAILABLE = True @@ -221,13 +226,13 @@ CACHES = { ############################# SECURITY SETTINGS ################################ # Default to advanced security in common.py, so tests can reset here to use # a simpler security model -FEATURES['ENFORCE_PASSWORD_POLICY'] = False -FEATURES['ENABLE_MAX_FAILED_LOGIN_ATTEMPTS'] = False -FEATURES['SQUELCH_PII_IN_LOGS'] = False -FEATURES['PREVENT_CONCURRENT_LOGINS'] = False +ENFORCE_PASSWORD_POLICY = False +ENABLE_MAX_FAILED_LOGIN_ATTEMPTS = False +SQUELCH_PII_IN_LOGS = False +PREVENT_CONCURRENT_LOGINS = False ######### Third-party auth ########## -FEATURES['ENABLE_THIRD_PARTY_AUTH'] = True +ENABLE_THIRD_PARTY_AUTH = True AUTHENTICATION_BACKENDS = [ 'social_core.backends.google.GoogleOAuth2', @@ -250,12 +255,12 @@ THIRD_PARTY_AUTH_CUSTOM_AUTH_FORMS = { } ############################## OAUTH2 Provider ################################ -FEATURES['ENABLE_OAUTH2_PROVIDER'] = True +ENABLE_OAUTH2_PROVIDER = True OAUTH_ENFORCE_SECURE = False ########################### External REST APIs ################################# -FEATURES['ENABLE_MOBILE_REST_API'] = True -FEATURES['ENABLE_VIDEO_ABSTRACTION_LAYER_API'] = True +ENABLE_MOBILE_REST_API = True +ENABLE_VIDEO_ABSTRACTION_LAYER_API = True ################################# CELERY ###################################### @@ -343,7 +348,7 @@ PASSWORD_HASHERS = [ ] ### This enables the Metrics tab for the Instructor dashboard ########### -FEATURES['CLASS_DASHBOARD'] = True +CLASS_DASHBOARD = True ################### Make tests quieter @@ -393,13 +398,13 @@ MONGODB_LOG = { NOTES_DISABLED_TABS = [] # Enable EdxNotes for tests. -FEATURES['ENABLE_EDXNOTES'] = True +ENABLE_EDXNOTES = True # Enable courseware search for tests -FEATURES['ENABLE_COURSEWARE_SEARCH'] = True +ENABLE_COURSEWARE_SEARCH = True # Enable dashboard search for tests -FEATURES['ENABLE_DASHBOARD_SEARCH'] = True +ENABLE_DASHBOARD_SEARCH = True # Use MockSearchEngine as the search engine for test scenario SEARCH_ENGINE = "search.tests.mock_search_engine.MockSearchEngine" @@ -410,7 +415,7 @@ FACEBOOK_API_VERSION = "v2.8" ######### custom courses ######### INSTALLED_APPS += ['lms.djangoapps.ccx', 'openedx.core.djangoapps.ccxcon.apps.CCXConnectorConfig'] -FEATURES['CUSTOM_COURSES_EDX'] = True +CUSTOM_COURSES_EDX = True # Set dummy values for profile image settings. PROFILE_IMAGE_BACKEND = { @@ -427,12 +432,12 @@ PROFILE_IMAGE_MAX_BYTES = 1024 * 1024 PROFILE_IMAGE_MIN_BYTES = 100 # Enable the LTI provider feature for testing -FEATURES['ENABLE_LTI_PROVIDER'] = True +ENABLE_LTI_PROVIDER = True INSTALLED_APPS.append('lms.djangoapps.lti_provider.apps.LtiProviderConfig') AUTHENTICATION_BACKENDS.append('lms.djangoapps.lti_provider.users.LtiBackend') # Financial assistance page -FEATURES['ENABLE_FINANCIAL_ASSISTANCE_FORM'] = True +ENABLE_FINANCIAL_ASSISTANCE_FORM = True COURSE_BLOCKS_API_EXTRA_FIELDS = [ ('course', 'course_visibility'), diff --git a/openedx/core/djangoapps/ace_common/settings/common.py b/openedx/core/djangoapps/ace_common/settings/common.py index 634ab328ba..5d10766ede 100644 --- a/openedx/core/djangoapps/ace_common/settings/common.py +++ b/openedx/core/djangoapps/ace_common/settings/common.py @@ -24,7 +24,7 @@ def plugin_settings(settings): # lint-amnesty, pylint: disable=missing-function settings.ACE_ROUTING_KEY = ACE_ROUTING_KEY - settings.FEATURES['test_django_plugin'] = True + settings.test_django_plugin = True settings.FCM_APP_NAME = 'fcm-edx-platform' settings.ACE_CHANNEL_DEFAULT_PUSH = 'push_notification' diff --git a/openedx/core/djangoapps/models/course_details.py b/openedx/core/djangoapps/models/course_details.py index c00d7d0b88..344be4ea75 100644 --- a/openedx/core/djangoapps/models/course_details.py +++ b/openedx/core/djangoapps/models/course_details.py @@ -71,9 +71,8 @@ class CourseDetails: self.pre_requisite_courses = [] # pre-requisite courses self.entrance_exam_enabled = "" # is entrance exam enabled self.entrance_exam_id = "" # the content location for the entrance exam - self.entrance_exam_minimum_score_pct = settings.FEATURES.get( - 'ENTRANCE_EXAM_MIN_SCORE_PCT', - '50' + self.entrance_exam_minimum_score_pct = str( + settings.ENTRANCE_EXAM_MIN_SCORE_PCT ) # minimum passing score for entrance exam content module/tree, self.self_paced = None self.learning_info = [] diff --git a/openedx/core/lib/features_setting_proxy.py b/openedx/core/lib/features_setting_proxy.py new file mode 100644 index 0000000000..9de2b3c44d --- /dev/null +++ b/openedx/core/lib/features_setting_proxy.py @@ -0,0 +1,106 @@ +""" +Features Proxy Implementation +""" +import warnings + +from collections.abc import MutableMapping, Mapping + + +class FeaturesProxy(MutableMapping): + """ + A proxy for feature flags stored in the settings namespace. + + Features: + - Flattens features from configuration (e.g., YAML or env) into the local settings namespace. + - Automatically updates `django.conf.settings` when a feature is modified. + - Acts like a dict (get, set, update, etc.). + + Example usage: + fp = FeaturesProxy(LocalNamespace) + fp["NEW_FEATURE"] = True + val = fp.get("EXISTING_FLAG", False) + """ + + def __init__(self, namespace=None): + """Store the namespace (as a dict)""" + self.ns = namespace or {} + + def __getitem__(self, key): + """Retrieve a feature flag by key""" + return self.ns[key] + + def __setitem__(self, key, value): + """Sets a key-value pair while emitting a deprecation warning about using FEATURES as a dict.""" + warnings.warn( + f"Accessing FEATURES as a dict is deprecated. " + f"Add '{key} = {value!r}' to your Django settings module instead of modifying FEATURES.", + DeprecationWarning, + stacklevel=2 + ) + self.ns[key] = value + + def __delitem__(self, key): + """Remove a feature flag from the namespace.""" + del self.ns[key] + + def __iter__(self): + return iter(self.ns) + + def __len__(self): + return len(self.ns) + + def __contains__(self, key): + return key in self.ns + + def clear(self): + """Remove all feature flags from the namespace.""" + self.ns.clear() + + def get(self, key, default=None): + """Standard dict-style get with default""" + return self.ns.get(key, default) + + def update(self, other=(), /, **kwds): + """ + Update multiple features at once, ensuring each goes through __setitem__ + to emit deprecation warnings. + + Mirrors dict.update() behavior: + - If `other` is a mapping, uses its keys. + - If `other` is iterable of pairs, updates from those. + - Then applies any keyword arguments. + + Examples: + proxy.update({'FEATURE_A': True}) + -> other = {'FEATURE_A': True} + + proxy.update([('FEATURE_A', True)]) + -> other = [('FEATURE_A', True)] + + proxy.update(FEATURE_B=False) + -> kwds = {'FEATURE_B': False} + + proxy.update({'FEATURE_A': True}, FEATURE_B=False) + -> other={'FEATURE_A': True}; kwds = {'FEATURE_B': False} + """ + if isinstance(other, Mapping): + # Handles objects that formally conform to the Mapping interface + # Mapping-like types: defaultdict, OrderedDict, Counter + for key in other: + self[key] = other[key] + elif hasattr(other, "keys"): + # Fallback for objects that implement a .keys() method but + # may not formally subclass Mapping + for key in other.keys(): + self[key] = other[key] + else: + for key, value in other: + self[key] = value + for key, value in kwds.items(): + self[key] = value + + def copy(self): + """ + Return a shallow copy of the underlying namespace wrapped in a new FeaturesProxy. + """ + return FeaturesProxy(self.ns.copy()) diff --git a/openedx/envs/common.py b/openedx/envs/common.py index c888ec8fd7..f6a9a8647a 100644 --- a/openedx/envs/common.py +++ b/openedx/envs/common.py @@ -884,3 +884,5 @@ API_DOCUMENTATION_URL = 'https://course-catalog-api-guide.readthedocs.io/en/late AUTH_DOCUMENTATION_URL = 'https://course-catalog-api-guide.readthedocs.io/en/latest/authentication/index.html' CSRF_TRUSTED_ORIGINS = [] + +ENTRANCE_EXAM_MIN_SCORE_PCT = 50 diff --git a/openedx/features/announcements/settings/common.py b/openedx/features/announcements/settings/common.py index 1a1a5ca497..4de3740d2d 100644 --- a/openedx/features/announcements/settings/common.py +++ b/openedx/features/announcements/settings/common.py @@ -16,6 +16,6 @@ def plugin_settings(settings): .. toggle_creation_date: 2017-11-08 .. toggle_tickets: https://github.com/openedx/edx-platform/pull/16496 """ - settings.FEATURES['ENABLE_ANNOUNCEMENTS'] = False + settings.ENABLE_ANNOUNCEMENTS = False # Configure number of announcements to show per page - settings.FEATURES['ANNOUNCEMENTS_PER_PAGE'] = 5 + settings.ANNOUNCEMENTS_PER_PAGE = 5 diff --git a/openedx/features/announcements/settings/test.py b/openedx/features/announcements/settings/test.py index 47d57ca3dc..8c8406d23f 100644 --- a/openedx/features/announcements/settings/test.py +++ b/openedx/features/announcements/settings/test.py @@ -5,4 +5,4 @@ def plugin_settings(settings): """ Test settings for Announcements """ - settings.FEATURES['ENABLE_ANNOUNCEMENTS'] = True + settings.ENABLE_ANNOUNCEMENTS = True