fix: library ref mgmt cmd task params (#33427)
* fix: library ref mgmt cmd task params * fix: lint fix * fix: lint fix
This commit is contained in:
@@ -35,14 +35,15 @@ class Command(BaseCommand):
|
||||
"""A method to replace 'source_library_id' in all relevant blocks."""
|
||||
|
||||
courses = CourseOverview.get_all_courses()
|
||||
course_id_strings = [str(course.id) for course in courses]
|
||||
|
||||
# Use Celery to distribute the workload
|
||||
tasks = group(
|
||||
replace_all_library_source_blocks_ids_for_course.s(
|
||||
course,
|
||||
course_id_string,
|
||||
v1_to_v2_lib_map
|
||||
)
|
||||
for course in courses
|
||||
for course_id_string in course_id_strings
|
||||
)
|
||||
results = tasks.apply_async()
|
||||
|
||||
@@ -58,7 +59,8 @@ class Command(BaseCommand):
|
||||
def validate(self, v1_to_v2_lib_map):
|
||||
""" Validate that replace_all_library_source_blocks_ids was successful"""
|
||||
courses = CourseOverview.get_all_courses()
|
||||
tasks = group(validate_all_library_source_blocks_ids_for_course.s(course, v1_to_v2_lib_map) for course in courses) # lint-amnesty, pylint: disable=line-too-long
|
||||
course_id_strings = [str(course.id) for course in courses]
|
||||
tasks = group(validate_all_library_source_blocks_ids_for_course.s(course_id, v1_to_v2_lib_map) for course_id in course_id_strings) # lint-amnesty, pylint: disable=line-too-long
|
||||
results = tasks.apply_async()
|
||||
|
||||
validation = set()
|
||||
@@ -80,9 +82,16 @@ class Command(BaseCommand):
|
||||
def undo(self, v1_to_v2_lib_map):
|
||||
""" undo the changes made by replace_all_library_source_blocks_ids"""
|
||||
courses = CourseOverview.get_all_courses()
|
||||
course_id_strings = [str(course.id) for course in courses]
|
||||
|
||||
# Use Celery to distribute the workload
|
||||
tasks = group(undo_all_library_source_blocks_ids_for_course.s(course, v1_to_v2_lib_map) for course in courses)
|
||||
tasks = group(
|
||||
undo_all_library_source_blocks_ids_for_course.s(
|
||||
course_id,
|
||||
v1_to_v2_lib_map
|
||||
)
|
||||
for course_id in course_id_strings
|
||||
)
|
||||
results = tasks.apply_async()
|
||||
|
||||
for result in results.get():
|
||||
|
||||
@@ -1006,23 +1006,24 @@ def delete_v1_library(v1_library_key_string):
|
||||
|
||||
@shared_task(time_limit=30)
|
||||
@set_code_owner_attribute
|
||||
def validate_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map):
|
||||
def validate_all_library_source_blocks_ids_for_course(course_key_string, v1_to_v2_lib_map):
|
||||
"""Search a Modulestore for all library source blocks in a course by querying mongo.
|
||||
replace all source_library_ids with the corresponding v2 value from the map
|
||||
"""
|
||||
course_id = CourseKey.from_string(course_key_string)
|
||||
store = modulestore()
|
||||
with store.bulk_operations(course.id):
|
||||
with store.bulk_operations(course_id):
|
||||
visited = []
|
||||
for branch in [ModuleStoreEnum.BranchName.draft, ModuleStoreEnum.BranchName.published]:
|
||||
blocks = store.get_items(
|
||||
course.id.for_branch(branch),
|
||||
course_id.for_branch(branch),
|
||||
settings={'source_library_id': {'$exists': True}}
|
||||
)
|
||||
for xblock in blocks:
|
||||
if xblock.source_library_id not in v1_to_v2_lib_map.values():
|
||||
# lint-amnesty, pylint: disable=broad-except
|
||||
raise Exception(
|
||||
f'{xblock.source_library_id} in {course.id} is not found in mapping. Validation failed'
|
||||
f'{xblock.source_library_id} in {course_id} is not found in mapping. Validation failed'
|
||||
)
|
||||
visited.append(xblock.source_library_id)
|
||||
# return sucess
|
||||
@@ -1031,18 +1032,20 @@ def validate_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map):
|
||||
|
||||
@shared_task(time_limit=30)
|
||||
@set_code_owner_attribute
|
||||
def replace_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map): # lint-amnesty, pylint: disable=useless-return
|
||||
def replace_all_library_source_blocks_ids_for_course(course_key_string, v1_to_v2_lib_map): # lint-amnesty, pylint: disable=useless-return
|
||||
"""Search a Modulestore for all library source blocks in a course by querying mongo.
|
||||
replace all source_library_ids with the corresponding v2 value from the map.
|
||||
|
||||
This will trigger a publish on the course for every published library source block.
|
||||
"""
|
||||
store = modulestore()
|
||||
with store.bulk_operations(course.id):
|
||||
course_id = CourseKey.from_string(course_key_string)
|
||||
|
||||
with store.bulk_operations(course_id):
|
||||
#for branch in [ModuleStoreEnum.BranchName.draft, ModuleStoreEnum.BranchName.published]:
|
||||
draft_blocks, published_blocks = [
|
||||
store.get_items(
|
||||
course.id.for_branch(branch),
|
||||
course_id.for_branch(branch),
|
||||
settings={'source_library_id': {'$exists': True}}
|
||||
)
|
||||
for branch in [ModuleStoreEnum.BranchName.draft, ModuleStoreEnum.BranchName.published]
|
||||
@@ -1058,7 +1061,7 @@ def replace_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map):
|
||||
LOGGER.error(
|
||||
'Key %s not found in mapping. Skipping block for course %s',
|
||||
str({draft_library_source_block.source_library_id}),
|
||||
str(course.id)
|
||||
str(course_id)
|
||||
)
|
||||
continue
|
||||
|
||||
@@ -1088,18 +1091,19 @@ def replace_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map):
|
||||
|
||||
@shared_task(time_limit=30)
|
||||
@set_code_owner_attribute
|
||||
def undo_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map): # lint-amnesty, pylint: disable=useless-return
|
||||
def undo_all_library_source_blocks_ids_for_course(course_key_string, v1_to_v2_lib_map): # lint-amnesty, pylint: disable=useless-return
|
||||
"""Search a Modulestore for all library source blocks in a course by querying mongo.
|
||||
replace all source_library_ids with the corresponding v1 value from the inverted map.
|
||||
This is exists to undo changes made previously.
|
||||
"""
|
||||
course_id = CourseKey.from_string(course_key_string)
|
||||
|
||||
v2_to_v1_lib_map = {v: k for k, v in v1_to_v2_lib_map.items()}
|
||||
|
||||
store = modulestore()
|
||||
draft_blocks, published_blocks = [
|
||||
store.get_items(
|
||||
course.id.for_branch(branch),
|
||||
course_id.for_branch(branch),
|
||||
settings={'source_library_id': {'$exists': True}}
|
||||
)
|
||||
for branch in [ModuleStoreEnum.BranchName.draft, ModuleStoreEnum.BranchName.published]
|
||||
@@ -1115,7 +1119,7 @@ def undo_all_library_source_blocks_ids_for_course(course, v1_to_v2_lib_map): #
|
||||
LOGGER.error(
|
||||
'Key %s not found in mapping. Skipping block for course %s',
|
||||
str({draft_library_source_block.source_library_id}),
|
||||
str(course.id)
|
||||
str(course_id)
|
||||
)
|
||||
continue
|
||||
|
||||
|
||||
Reference in New Issue
Block a user