From acace4b41edcfd62b95b3fa5a1bdbdebdedd8eb8 Mon Sep 17 00:00:00 2001 From: Muhammad Adeel Tajamul <77053848+muhammadadeeltajamul@users.noreply.github.com> Date: Thu, 2 Mar 2023 06:09:16 +0500 Subject: [PATCH] fix: removed discussion xblock from descendant in blocks api (#31856) Co-authored-by: adeel.tajamul --- lms/djangoapps/course_api/blocks/utils.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/lms/djangoapps/course_api/blocks/utils.py b/lms/djangoapps/course_api/blocks/utils.py index 9353656d4c..7950f0a0be 100644 --- a/lms/djangoapps/course_api/blocks/utils.py +++ b/lms/djangoapps/course_api/blocks/utils.py @@ -14,9 +14,26 @@ def filter_discussion_xblocks_from_response(response, course_key): configuration = DiscussionsConfiguration.get(context_key=course_key) provider = configuration.provider_type if provider == Provider.OPEN_EDX: - response.data['blocks'] = { + # Finding ids of discussion xblocks + discussion_xblocks = [ + key for key, value in response.data.get('blocks', {}).items() + if value.get('type') == 'discussion' + ] + # Filtering discussion xblocks keys from blocks + filtered_blocks = { key: value for key, value in response.data.get('blocks', {}).items() if value.get('type') != 'discussion' } + # Removing reference of discussion xblocks from unit + # These references needs to be removed because they no longer exist + for _, block_data in filtered_blocks.items(): + descendants = block_data.get('descendants', []) + if descendants: + descendants = [ + descendant for descendant in descendants + if descendant not in discussion_xblocks + ] + block_data['descendants'] = descendants + response.data['blocks'] = filtered_blocks return response