31 lines
1.1 KiB
Python
31 lines
1.1 KiB
Python
"""
|
|
Utility library containing operations used/shared by multiple courseware modules
|
|
"""
|
|
|
|
|
|
def yield_dynamic_descriptor_descendents(descriptor, module_creator): # pylint: disable=invalid-name
|
|
"""
|
|
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.
|
|
"""
|
|
def get_dynamic_descriptor_children(descriptor):
|
|
"""
|
|
Internal recursive helper for traversing the child hierarchy
|
|
"""
|
|
module_children = []
|
|
if descriptor.has_dynamic_children():
|
|
module = module_creator(descriptor)
|
|
if module is not None:
|
|
module_children = module.get_child_descriptors()
|
|
else:
|
|
module_children = descriptor.get_children()
|
|
return module_children
|
|
|
|
stack = [descriptor]
|
|
|
|
while len(stack) > 0:
|
|
next_descriptor = stack.pop()
|
|
stack.extend(get_dynamic_descriptor_children(next_descriptor))
|
|
yield next_descriptor
|