/
githubmirror
/
edx-platform
Обзор
Документация
Войти
/
githubmirror
/
edx-platform
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
release-ulmo
lms/djangoapps/course_api/blocks/utils.py
65 строк
2 KB
Kyrylo Kireiev
fix: [FC-0092] fix 500 when return_type is list (#36969)
09 сен 2025, 21:35
Не верифицирован
09 сен 2025, 21:35
7f885c7
Код
Авторство
О чём код?
""" Utils for Blocks """ from rest_framework.utils.serializer_helpers import ReturnList from openedx.core.djangoapps.discussions.models import ( DiscussionsConfiguration, Provider, ) def filter_discussion_xblocks_from_response(response, course_key): """ Removes discussion xblocks if discussion provider is openedx. """ configuration = DiscussionsConfiguration.get(context_key=course_key) provider = configuration.provider_type if provider != Provider.OPEN_EDX: return response is_list_response = isinstance(response.data, ReturnList) # Find discussion xblock IDs if is_list_response: discussion_xblocks = [ block.get('id') for block in response.data if block.get('type') == 'discussion' ] else: discussion_xblocks = [ key for key, value in response.data.get('blocks', {}).items() if value.get('type') == 'discussion' ] # Filter out discussion blocks if is_list_response: filtered_blocks = [ block for block in response.data if block.get('type') != 'discussion' ] else: filtered_blocks = { key: value for key, value in response.data.get('blocks', {}).items() if value.get('type') != 'discussion' } # Remove references to discussion xblocks # These references needs to be removed because they no longer exist blocks_iterable = filtered_blocks if is_list_response else filtered_blocks.values() for block_data in blocks_iterable: for key in ['descendants', 'children']: if key in block_data: block_data[key] = [ descendant for descendant in block_data[key] if descendant not in discussion_xblocks ] # Update response if is_list_response: response.data = ReturnList(filtered_blocks, serializer=None) else: response.data['blocks'] = filtered_blocks return response