diff --git a/cms/djangoapps/contentstore/signals/handlers.py b/cms/djangoapps/contentstore/signals/handlers.py index 5011af10f0..44c8c8a126 100644 --- a/cms/djangoapps/contentstore/signals/handlers.py +++ b/cms/djangoapps/contentstore/signals/handlers.py @@ -23,7 +23,7 @@ from cms.djangoapps.contentstore.courseware_index import ( LibrarySearchIndexer, ) 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 common.djangoapps.util.block_utils import yield_dynamic_descriptor_descendants from lms.djangoapps.grades.api import task_compute_all_grades_for_course from openedx.core.djangoapps.content.learning_sequences.api import key_supports_outlines from openedx.core.djangoapps.discussions.tasks import update_discussions_settings_from_course_task diff --git a/common/djangoapps/util/block_utils.py b/common/djangoapps/util/block_utils.py new file mode 100644 index 0000000000..7c84ace75c --- /dev/null +++ b/common/djangoapps/util/block_utils.py @@ -0,0 +1,36 @@ +""" +Utility library containing operations used/shared by multiple CourseBlocks. +""" + + +def yield_dynamic_descriptor_descendants(descriptor, user_id, block_creator=None): + """ + This returns all of the descendants of a descriptor. If the descriptor + has dynamic children, the block will be created using block_creator + and the children (as descriptors) of that module will be returned. + """ + stack = [descriptor] + + while len(stack) > 0: + next_descriptor = stack.pop() + stack.extend(get_dynamic_descriptor_children(next_descriptor, user_id, block_creator)) + yield next_descriptor + + +def get_dynamic_descriptor_children(descriptor, user_id, block_creator=None, usage_key_filter=None): + """ + Returns the children of the given descriptor, while supporting descriptors with dynamic children. + """ + block_children = [] + if descriptor.has_dynamic_children(): + block = None + if descriptor.scope_ids.user_id and user_id == descriptor.scope_ids.user_id: + # do not rebind the block if it's already bound to a user. + block = descriptor + elif block_creator: + block = block_creator(descriptor) + if block: + block_children = block.get_child_descriptors() + else: + block_children = descriptor.get_children(usage_key_filter) + return block_children diff --git a/common/djangoapps/util/module_utils.py b/common/djangoapps/util/module_utils.py deleted file mode 100644 index bb51521a89..0000000000 --- a/common/djangoapps/util/module_utils.py +++ /dev/null @@ -1,36 +0,0 @@ -""" -Utility library containing operations used/shared by multiple courseware modules -""" - - -def yield_dynamic_descriptor_descendants(descriptor, user_id, module_creator=None): - """ - This returns all of the descendants of a descriptor. If the descriptor - has dynamic children, the module will be created using module_creator - and the children (as descriptors) of that module will be returned. - """ - stack = [descriptor] - - while len(stack) > 0: - next_descriptor = stack.pop() - stack.extend(get_dynamic_descriptor_children(next_descriptor, user_id, module_creator)) - yield next_descriptor - - -def get_dynamic_descriptor_children(descriptor, user_id, module_creator=None, usage_key_filter=None): - """ - Returns the children of the given descriptor, while supporting descriptors with dynamic children. - """ - module_children = [] - if descriptor.has_dynamic_children(): - module = None - if descriptor.scope_ids.user_id and user_id == descriptor.scope_ids.user_id: - # do not rebind the module if it's already bound to a user. - module = descriptor - elif module_creator: - module = module_creator(descriptor) - if module: - module_children = module.get_child_descriptors() - else: - module_children = descriptor.get_children(usage_key_filter) - return module_children diff --git a/lms/djangoapps/courseware/tests/test_block_render.py b/lms/djangoapps/courseware/tests/test_block_render.py index 3e0630f2ff..26506987ff 100644 --- a/lms/djangoapps/courseware/tests/test_block_render.py +++ b/lms/djangoapps/courseware/tests/test_block_render.py @@ -926,7 +926,7 @@ class TestHandleXBlockCallback(SharedModuleStoreTestCase, LoginEnrollmentTestCas ) @ddt.unpack @patch('lms.djangoapps.courseware.block_render.get_block_for_descriptor', wraps=get_block_for_descriptor) - def test_will_recheck_access_handler_attribute(self, handler, will_recheck_access, mock_get_module): + def test_will_recheck_access_handler_attribute(self, handler, will_recheck_access, mock_get_block): """Confirm that we pay attention to any 'will_recheck_access' attributes on handler methods""" course = CourseFactory.create() descriptor_kwargs = { @@ -941,8 +941,8 @@ class TestHandleXBlockCallback(SharedModuleStoreTestCase, LoginEnrollmentTestCas request.user = self.mock_user render.handle_xblock_callback(request, str(course.id), usage_id, handler) - assert mock_get_module.call_count == 1 - assert mock_get_module.call_args[1]['will_recheck_access'] == will_recheck_access + assert mock_get_block.call_count == 1 + assert mock_get_block.call_args[1]['will_recheck_access'] == will_recheck_access @ddt.ddt