def waffle(): """ Deprecated: Returns the namespaced, cached, audited Waffle class for Grades. Note: Replace uses of this function with direct references to each switch. See waffle_switch(name) docstring for details. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix='Grades: ')
def waffle(): """ Deprecated: Returns the namespaced, cached, audited Waffle Switch class for Studio pages. IMPORTANT: Do NOT copy this pattern and do NOT use this to reference new switches. Instead, replace the string constant above with the actual switch instance. For example:: ENABLE_ACCESSIBILITY_POLICY_PAGE = WaffleSwitch(f'{WAFFLE_NAMESPACE}.enable_policy_page') """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix='Studio: ')
def waffle(): """ Returns the namespaced, cached, audited Waffle class for Certificates. IMPORTANT: Do NOT copy this pattern and do NOT use this to reference new switches. Instead, replace the string constant above with the actual switch instance. For example:: AUTO_CERTIFICATE_GENERATION = WaffleSwitch(f'{WAFFLE_NAMESPACE}.auto_certificate_generation') """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix='Certificates: ')
def waffle(): """ Deprecated: Returns the namespaced, cached, audited shared Waffle Switch class. IMPORTANT: Do NOT copy this pattern and do NOT use this to reference new switches. Instead, replace the string constant above with the actual switch instance. For example:: ENABLE_COURSE_ABOUT_SIDEBAR_HTML = WaffleSwitch(f'{WAFFLE_NAMESPACE}.enable_about_sidebar_html') """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'Course Experience: ')
""" Waffle flags and switches for user authn. """ from edx_toggles.toggles import LegacyWaffleSwitch, LegacyWaffleSwitchNamespace _WAFFLE_NAMESPACE = u'user_authn' _WAFFLE_SWITCH_NAMESPACE = LegacyWaffleSwitchNamespace(name=_WAFFLE_NAMESPACE, log_prefix=u'UserAuthN: ') # .. toggle_name: user_authn.enable_login_using_thirdparty_auth_only # .. toggle_implementation: WaffleSwitch # .. toggle_default: False # .. toggle_description: When enabled, users must be sign in using their allowed domain SSO account. This includes sign- # ins to the Django admin dashboard at "/admin". # .. toggle_use_cases: temporary # .. toggle_creation_date: 2019-11-20 # .. toggle_target_removal_date: 2020-01-31 # .. toggle_warnings: Requires THIRD_PARTY_AUTH_ONLY_DOMAIN to also be set. # .. toggle_tickets: ENT-2461 ENABLE_LOGIN_USING_THIRDPARTY_AUTH_ONLY = LegacyWaffleSwitch( _WAFFLE_SWITCH_NAMESPACE, 'enable_login_using_thirdparty_auth_only', __name__ )
""" Contains configuration for schedules app """ from crum import get_current_request from edx_toggles.toggles import LegacyWaffleSwitch, LegacyWaffleFlagNamespace, LegacyWaffleSwitchNamespace, WaffleFlag from lms.djangoapps.experiments.flags import ExperimentWaffleFlag from lms.djangoapps.experiments.models import ExperimentData WAFFLE_FLAG_NAMESPACE = LegacyWaffleFlagNamespace(name='schedules') WAFFLE_SWITCH_NAMESPACE = LegacyWaffleSwitchNamespace(name='schedules') # .. toggle_name: schedules.enable_debugging # .. toggle_implementation: WaffleFlag # .. toggle_default: False # .. toggle_description: Enable debug level of logging for schedules messages. # .. toggle_use_cases: open_edx # .. toggle_creation_date: 2017-09-17 DEBUG_MESSAGE_WAFFLE_FLAG = WaffleFlag('schedules.enable_debugging', __name__) COURSE_UPDATE_SHOW_UNSUBSCRIBE_WAFFLE_SWITCH = LegacyWaffleSwitch( # lint-amnesty, pylint: disable=toggle-missing-annotation WAFFLE_SWITCH_NAMESPACE, 'course_update_show_unsubscribe', __name__) # This experiment waffle is supporting an A/B test we are running on sending course updates from an external service, # rather than through platform and ACE. See ticket AA-661 for more information. # Don't use this flag directly, instead use the `set_up_external_updates_for_enrollment` and `query_external_updates` # methods below. We save this flag decision at enrollment time and don't change it even if the flag changes. So you # can't just directly look at flag result. _EXTERNAL_COURSE_UPDATES_EXPERIMENT_ID = 18 _EXTERNAL_COURSE_UPDATES_FLAG = ExperimentWaffleFlag(
""" Platform support for Programs. This package is a thin wrapper around interactions with the Programs service, supporting learner- and author-facing features involving that service if and only if the service is deployed in the Open edX installation. To ensure maximum separation of concerns, and a minimum of interdependencies, this package should be kept small, thin, and stateless. """ default_app_config = 'openedx.core.djangoapps.programs.apps.ProgramsConfig' from edx_toggles.toggles import LegacyWaffleSwitch, LegacyWaffleSwitchNamespace # lint-amnesty, pylint: disable=wrong-import-position PROGRAMS_WAFFLE_SWITCH_NAMESPACE = LegacyWaffleSwitchNamespace(name='programs') # This is meant to be enabled until https://openedx.atlassian.net/browse/LEARNER-5573 needs to be resolved ALWAYS_CALCULATE_PROGRAM_PRICE_AS_ANONYMOUS_USER = LegacyWaffleSwitch( PROGRAMS_WAFFLE_SWITCH_NAMESPACE, 'always_calculate_program_price_as_anonymous_user', __name__)
def _create_courseware_context(self, request): """ Returns and creates the rendering context for the courseware. Also returns the table of contents for the courseware. """ course_url_name = default_course_url_name(self.course.id) course_url = reverse( course_url_name, kwargs={'course_id': six.text_type(self.course.id)}) show_search = ( settings.FEATURES.get('ENABLE_COURSEWARE_SEARCH') or (settings.FEATURES.get('ENABLE_COURSEWARE_SEARCH_FOR_COURSE_STAFF') and self.is_staff)) staff_access = self.is_staff courseware_context = { 'csrf': csrf(self.request)['csrf_token'], 'course': self.course, 'course_url': course_url, 'chapter': self.chapter, 'section': self.section, 'init': '', 'fragment': Fragment(), 'staff_access': staff_access, 'can_masquerade': self.can_masquerade, 'masquerade': self.masquerade, 'supports_preview_menu': True, 'studio_url': get_studio_url(self.course, 'course'), 'xqa_server': settings.FEATURES.get('XQA_SERVER', "http://your_xqa_server.com"), 'bookmarks_api_url': reverse('bookmarks'), 'language_preference': self._get_language_preference(), 'disable_optimizely': not LegacyWaffleSwitchNamespace('RET').is_enabled( 'enable_optimizely_in_courseware'), 'section_title': None, 'sequence_title': None, 'disable_accordion': not DISABLE_COURSE_OUTLINE_PAGE_FLAG.is_enabled(self.course.id), 'show_search': show_search, } courseware_context.update( get_experiment_user_metadata_context( self.course, self.effective_user, )) table_of_contents = toc_for_course( self.effective_user, self.request, self.course, self.chapter_url_name, self.section_url_name, self.field_data_cache, ) courseware_context['accordion'] = render_accordion( self.request, self.course, table_of_contents['chapters'], ) courseware_context['course_sock_fragment'] = CourseSockFragmentView( ).render_to_fragment(request, course=self.course) # entrance exam data self._add_entrance_exam_to_context(courseware_context) if self.section: # chromeless data if self.section.chrome: chrome = [ s.strip() for s in self.section.chrome.lower().split(",") ] if 'accordion' not in chrome: courseware_context['disable_accordion'] = True if 'tabs' not in chrome: courseware_context['disable_tabs'] = True # default tab if self.section.default_tab: courseware_context['default_tab'] = self.section.default_tab # section data courseware_context[ 'section_title'] = self.section.display_name_with_default section_context = self._create_section_context( table_of_contents['previous_of_active_section'], table_of_contents['next_of_active_section'], ) courseware_context['fragment'] = self.section.render( self.view, section_context) if self.section.position and self.section.has_children: self._add_sequence_title_to_context(courseware_context) # Courseware MFE link if show_courseware_mfe_link(request.user, staff_access, self.course.id): courseware_context['microfrontend_link'] = self.microfrontend_url else: courseware_context['microfrontend_link'] = None return courseware_context
def waffle(): """ Returns the namespaced, cached, audited Waffle class for user_api. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'UserAPI: ')
def waffle(): """ Returns the namespaced, cached, audited shared Waffle Switch class. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'Course Experience: ')
def waffle(): """ Returns the namespaced and cached Waffle class for BlockStructures. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'BlockStructure: ')
""" Toggles for course apps. """ from edx_toggles.toggles import LegacyWaffleSwitchNamespace from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag #: Namespace for use by course apps for creating availability toggles COURSE_APPS_WAFFLE_NAMESPACE = LegacyWaffleSwitchNamespace("course_apps") # .. toggle_name: course_apps.proctoring_settings_modal_view # .. toggle_use_cases: temporary # .. toggle_implementation: CourseWaffleFlag # .. toggle_default: False # .. toggle_description: When enabled, users will be directed to a new proctoring settings # modal on the Pages and Resources view when accessing proctored exam settings. # .. toggle_warnings: None # .. toggle_creation_date: 2021-08-17 # .. toggle_target_removal_date: None PROCTORING_SETTINGS_MODAL_VIEW = CourseWaffleFlag( COURSE_APPS_WAFFLE_NAMESPACE, 'proctoring_settings_modal_view', module_name=__name__, ) def proctoring_settings_modal_view_enabled(course_key): """ Returns a boolean if proctoring settings modal view is enabled for a course. """ return PROCTORING_SETTINGS_MODAL_VIEW.is_enabled(course_key)
def waffle(): """ Returns the namespaced, cached, audited Waffle class for open_edx_util. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'OpenEdX Util: ')
""" This module contains various configuration settings via waffle switches for the course_details view. """ from edx_toggles.toggles import LegacyWaffleFlagNamespace, LegacyWaffleSwitchNamespace from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag COURSE_DETAIL_WAFFLE_NAMESPACE = 'course_detail' COURSE_DETAIL_WAFFLE_FLAG_NAMESPACE = LegacyWaffleFlagNamespace(name=COURSE_DETAIL_WAFFLE_NAMESPACE) WAFFLE_SWITCHES = LegacyWaffleSwitchNamespace(name=COURSE_DETAIL_WAFFLE_NAMESPACE) # Course Override Flag COURSE_DETAIL_UPDATE_CERTIFICATE_DATE = u'course_detail_update_certificate_date' def waffle_flags(): """ Returns the namespaced, cached, audited Waffle flags dictionary for course detail. """ return { COURSE_DETAIL_UPDATE_CERTIFICATE_DATE: CourseWaffleFlag( waffle_namespace=COURSE_DETAIL_WAFFLE_NAMESPACE, flag_name=COURSE_DETAIL_UPDATE_CERTIFICATE_DATE, module_name=__name__, ) } def enable_course_detail_update_certificate_date(course_id):
""" This module contains various configuration settings via waffle switches for the instructor_task app. """ from edx_toggles.toggles import LegacyWaffleFlagNamespace, LegacyWaffleSwitchNamespace from openedx.core.djangoapps.waffle_utils import CourseWaffleFlag WAFFLE_NAMESPACE = 'instructor_task' # TODO: Remove and replace with direct references to each flag. INSTRUCTOR_TASK_WAFFLE_FLAG_NAMESPACE = LegacyWaffleFlagNamespace( name=WAFFLE_NAMESPACE) # TODO: Remove and replace with direct references to each switch. WAFFLE_SWITCHES = LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE) # Waffle switches # TODO: Replace with WaffleSwitch(). See WAFFLE_SWITCHES comment. OPTIMIZE_GET_LEARNERS_FOR_COURSE = 'optimize_get_learners_for_course' # Course override flags # TODO: Replace with WaffleFlag(). See waffle_flags() docstring. GENERATE_PROBLEM_GRADE_REPORT_VERIFIED_ONLY = 'generate_problem_grade_report_verified_only' # TODO: Replace with WaffleFlag(). See waffle_flags() docstring. GENERATE_COURSE_GRADE_REPORT_VERIFIED_ONLY = 'generate_course_grade_report_verified_only' def waffle_flags(): """ Returns the namespaced, cached, audited Waffle flags dictionary for Grades.
""" Course API """ # lint-amnesty, pylint: disable=django-not-configured from edx_toggles.toggles import LegacyWaffleSwitch, LegacyWaffleSwitchNamespace WAFFLE_SWITCH_NAMESPACE = LegacyWaffleSwitchNamespace( name='course_list_api_rate_limit') # .. toggle_name: course_list_api_rate_limit.rate_limit_2 # .. toggle_implementation: WaffleSwitch # .. toggle_default: False # .. toggle_description: Waffle switch to enable the throttling of 2 requests/minute to the course API. For staff # users, this limit is 10 requests/minute. # .. toggle_use_cases: circuit_breaker # .. toggle_creation_date: 2018-06-12 # .. toggle_target_removal_date: None # .. toggle_warnings: None # .. toggle_tickets: https://openedx.atlassian.net/browse/LEARNER-5527 USE_RATE_LIMIT_2_FOR_COURSE_LIST_API = LegacyWaffleSwitch( WAFFLE_SWITCH_NAMESPACE, 'rate_limit_2', __name__) # .. toggle_name: course_list_api_rate_limit.rate_limit_10 # .. toggle_implementation: WaffleSwitch # .. toggle_default: False # .. toggle_description: Waffle switch to enable the throttling of 10 requests/minute to the course API. For staff # users, this limit is 20 requests/minute. # .. toggle_use_cases: circuit_breaker # .. toggle_creation_date: 2018-06-12 # .. toggle_target_removal_date: None # .. toggle_warnings: None # .. toggle_tickets: https://openedx.atlassian.net/browse/LEARNER-5527 USE_RATE_LIMIT_10_FOR_COURSE_LIST_API = LegacyWaffleSwitch( WAFFLE_SWITCH_NAMESPACE, 'rate_limit_10', __name__)
def waffle(): """ Returns the namespaced, cached, audited Waffle class for Certificates. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix='Certificates: ')
def waffle(): """ Returns the namespaced, cached, audited Waffle Switch class for Studio pages. """ return LegacyWaffleSwitchNamespace(name=WAFFLE_NAMESPACE, log_prefix=u'Studio: ')
""" Student app helpers and settings """ from edx_toggles.toggles import LegacyWaffleSwitchNamespace # Namespace for student app waffle switches STUDENT_WAFFLE_NAMESPACE = LegacyWaffleSwitchNamespace(name='student')
""" Waffle flags and switches for third party auth . """ from edx_toggles.toggles import LegacyWaffleSwitch, LegacyWaffleSwitchNamespace _WAFFLE_NAMESPACE = u'third_party_auth' _WAFFLE_SWITCH_NAMESPACE = LegacyWaffleSwitchNamespace( name=_WAFFLE_NAMESPACE, log_prefix=u'ThirdPartyAuth: ') # .. toggle_name: third_party_auth.enable_multiple_sso_accounts_association_to_saml_user # .. toggle_implementation: WaffleSwitch # .. toggle_default: False # .. toggle_description: If enabled than learner should not be prompted for their edX password arriving via SAML # and already linked to the enterprise customer linked to the same IdP." # .. toggle_use_cases: temporary # .. toggle_creation_date: 2021-01-29 # .. toggle_target_removal_date: 2021-04-31 # .. toggle_warnings: None. # .. toggle_tickets: ENT-4034 ENABLE_MULTIPLE_SSO_ACCOUNTS_ASSOCIATION_TO_SAML_USER = LegacyWaffleSwitch( _WAFFLE_SWITCH_NAMESPACE, 'enable_multiple_sso_accounts_association_to_saml_user', __name__)