Commit bd05dc0b by John Eskew

Wrap course structure generation task in bulk operation.

parent 843c073f
...@@ -13,38 +13,40 @@ def _generate_course_structure(course_key): ...@@ -13,38 +13,40 @@ def _generate_course_structure(course_key):
""" """
Generates a course structure dictionary for the specified course. Generates a course structure dictionary for the specified course.
""" """
course = modulestore().get_course(course_key, depth=None) with modulestore().bulk_operations(course_key):
blocks_stack = [course] course = modulestore().get_course(course_key, depth=None)
blocks_dict = {} blocks_stack = [course]
while blocks_stack: blocks_dict = {}
curr_block = blocks_stack.pop() while blocks_stack:
children = curr_block.get_children() if curr_block.has_children else [] curr_block = blocks_stack.pop()
key = unicode(curr_block.scope_ids.usage_id) children = curr_block.get_children() if curr_block.has_children else []
block = { key = unicode(curr_block.scope_ids.usage_id)
"usage_key": key, block = {
"block_type": curr_block.category, "usage_key": key,
"display_name": curr_block.display_name, "block_type": curr_block.category,
"children": [unicode(child.scope_ids.usage_id) for child in children] "display_name": curr_block.display_name,
"children": [unicode(child.scope_ids.usage_id) for child in children]
}
# Retrieve these attributes separately so that we can fail gracefully
# if the block doesn't have the attribute.
attrs = (('graded', False), ('format', None))
for attr, default in attrs:
if hasattr(curr_block, attr):
block[attr] = getattr(curr_block, attr, default)
else:
log.warning('Failed to retrieve %s attribute of block %s. Defaulting to %s.', attr, key, default)
block[attr] = default
blocks_dict[key] = block
# Add this blocks children to the stack so that we can traverse them as well.
blocks_stack.extend(children)
return {
"root": unicode(course.scope_ids.usage_id),
"blocks": blocks_dict
} }
# Retrieve these attributes separately so that we can fail gracefully if the block doesn't have the attribute.
attrs = (('graded', False), ('format', None))
for attr, default in attrs:
if hasattr(curr_block, attr):
block[attr] = getattr(curr_block, attr, default)
else:
log.warning('Failed to retrieve %s attribute of block %s. Defaulting to %s.', attr, key, default)
block[attr] = default
blocks_dict[key] = block
# Add this blocks children to the stack so that we can traverse them as well.
blocks_stack.extend(children)
return {
"root": unicode(course.scope_ids.usage_id),
"blocks": blocks_dict
}
@task(name=u'openedx.core.djangoapps.content.course_structures.tasks.update_course_structure') @task(name=u'openedx.core.djangoapps.content.course_structures.tasks.update_course_structure')
def update_course_structure(course_key): def update_course_structure(course_key):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment