diff --git a/cms/djangoapps/contentstore/config/waffle.py b/cms/djangoapps/contentstore/config/waffle.py index 540dad49bb..e9c1bd90cd 100644 --- a/cms/djangoapps/contentstore/config/waffle.py +++ b/cms/djangoapps/contentstore/config/waffle.py @@ -52,22 +52,6 @@ SHOW_REVIEW_RULES_FLAG = CourseWaffleFlag( # lint-amnesty, pylint: disable=togg module_name=__name__, ) -# Waffle flag to move the registration of special exams to an async celery task -# .. toggle_name: contentstore.async_register_exams -# .. toggle_implementation: CourseWaffleFlag -# .. toggle_default: False -# .. toggle_description: Toggles the asynchronous registration of special exams -# .. toggle_use_cases: temporary, open_edx -# .. toggle_creation_date: 2021-04-21 -# .. toggle_target_removal_date: 2021-05-07 -# .. toggle_warnings: -# .. toggle_tickets: https://openedx.atlassian.net/browse/MST-757 -ENABLE_ASYNC_REGISTER_EXAMS = CourseWaffleFlag( - waffle_namespace=waffle_flags(), - flag_name='async_register_exams', - module_name=__name__, -) - # Waffle flag to redirect to the library authoring MFE. # .. toggle_name: contentstore.library_authoring_mfe # .. toggle_implementation: WaffleFlag diff --git a/cms/djangoapps/contentstore/signals/handlers.py b/cms/djangoapps/contentstore/signals/handlers.py index 478d99e94c..b82caf05dc 100644 --- a/cms/djangoapps/contentstore/signals/handlers.py +++ b/cms/djangoapps/contentstore/signals/handlers.py @@ -14,17 +14,14 @@ from cms.djangoapps.contentstore.courseware_index import ( CoursewareSearchIndexer, LibrarySearchIndexer ) -from cms.djangoapps.contentstore.proctoring import register_special_exams from common.djangoapps.track.event_transaction_utils import get_event_transaction_id, get_event_transaction_type from common.djangoapps.util.module_utils import yield_dynamic_descriptor_descendants from lms.djangoapps.grades.api import task_compute_all_grades_for_course -from openedx.core.djangoapps.credit.signals import on_course_publish from openedx.core.djangoapps.content.learning_sequences.api import key_supports_outlines from openedx.core.lib.gating import api as gating_api from xmodule.modulestore.django import SignalHandler, modulestore from .signals import GRADING_POLICY_CHANGED -from ..config.waffle import ENABLE_ASYNC_REGISTER_EXAMS log = logging.getLogger(__name__) @@ -52,34 +49,25 @@ def listen_for_course_publish(sender, course_key, **kwargs): # pylint: disable= registering proctored exams, building up credit requirements, and performing search indexing """ - is_enabled = ENABLE_ASYNC_REGISTER_EXAMS.is_enabled(course_key) - if is_enabled: - from cms.djangoapps.contentstore.tasks import update_special_exams_and_publish - course_key_str = str(course_key) - update_special_exams_and_publish.delay(course_key_str) - else: - # first is to registered exams, the credit subsystem will assume that - # all proctored exams have already been registered, so we have to do that first - try: - register_special_exams(course_key) - # pylint: disable=broad-except - except Exception as exception: - log.exception(exception) - - # then call into the credit subsystem (in /openedx/djangoapps/credit) - # to perform any 'on_publish' workflow - on_course_publish(course_key) - # import here, because signal is registered at startup, but items in tasks are not yet able to be loaded - from cms.djangoapps.contentstore.tasks import update_outline_from_modulestore_task, update_search_index + from cms.djangoapps.contentstore.tasks import ( + update_outline_from_modulestore_task, + update_search_index, + update_special_exams_and_publish + ) + + # register special exams asynchronously + course_key_str = str(course_key) + update_special_exams_and_publish.delay(course_key_str) + if key_supports_outlines(course_key): # Push the course outline to learning_sequences asynchronously. - update_outline_from_modulestore_task.delay(str(course_key)) + update_outline_from_modulestore_task.delay(course_key_str) # Finally call into the course search subsystem # to kick off an indexing action if CoursewareSearchIndexer.indexing_is_enabled() and CourseAboutSearchIndexer.indexing_is_enabled(): - update_search_index.delay(str(course_key), datetime.now(UTC).isoformat()) + update_search_index.delay(course_key_str, datetime.now(UTC).isoformat()) @receiver(SignalHandler.library_updated) diff --git a/cms/djangoapps/contentstore/tests/test_proctoring.py b/cms/djangoapps/contentstore/tests/test_proctoring.py index b7221e31a8..95f8282cd4 100644 --- a/cms/djangoapps/contentstore/tests/test_proctoring.py +++ b/cms/djangoapps/contentstore/tests/test_proctoring.py @@ -9,11 +9,9 @@ from unittest.mock import patch import ddt from django.conf import settings from edx_proctoring.api import get_all_exams_for_course, get_review_policy_by_exam_id -from edx_toggles.toggles.testutils import override_waffle_flag from pytz import UTC from cms.djangoapps.contentstore.signals.handlers import listen_for_course_publish -from cms.djangoapps.contentstore.config.waffle import ENABLE_ASYNC_REGISTER_EXAMS from common.djangoapps.student.tests.factories import UserFactory from common.lib.xmodule.xmodule.modulestore import ModuleStoreEnum from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase @@ -102,9 +100,7 @@ class TestProctoredExams(ModuleStoreTestCase): is_onboarding_exam=is_onboarding_exam, ) - with patch('cms.djangoapps.contentstore.tasks.update_special_exams_and_publish') as mock_task: - listen_for_course_publish(self, self.course.id) - mock_task.delay.assert_not_called() + listen_for_course_publish(self, self.course.id) self._verify_exam_data(sequence, True) @@ -319,7 +315,6 @@ class TestProctoredExams(ModuleStoreTestCase): exams = get_all_exams_for_course(str(self.course.id)) assert exams[0]['due_date'] is not None - @override_waffle_flag(ENABLE_ASYNC_REGISTER_EXAMS, active=True) def test_async_waffle_flag_publishes(self): chapter = ItemFactory.create(parent=self.course, category='chapter', display_name='Test Section') sequence = ItemFactory.create( @@ -341,7 +336,6 @@ class TestProctoredExams(ModuleStoreTestCase): self.assertEqual(len(exams), 1) self._verify_exam_data(sequence, True) - @override_waffle_flag(ENABLE_ASYNC_REGISTER_EXAMS, active=True) def test_async_waffle_flag_task(self): chapter = ItemFactory.create(parent=self.course, category='chapter', display_name='Test Section') ItemFactory.create(