feat: add discussions context to course blocks API (#29300)

Add a new course blocks transformer that adds discussion context for units.
This commit is contained in:
Kshitij Sobti
2021-12-07 06:10:48 +00:00
committed by GitHub
parent 51fe9b9da4
commit 9f4bc9900b
12 changed files with 196 additions and 14 deletions

View File

@@ -7,6 +7,7 @@ import lms.djangoapps.course_blocks.api as course_blocks_api
from lms.djangoapps.course_blocks.transformers.access_denied_filter import AccessDeniedMessageFilterTransformer
from lms.djangoapps.course_blocks.transformers.hidden_content import HiddenContentTransformer
from openedx.core.djangoapps.content.block_structure.transformers import BlockStructureTransformers
from openedx.core.djangoapps.discussions.transformers import DiscussionsTopicLinkTransformer
from openedx.features.effort_estimation.api import EffortEstimationTransformer
from .serializers import BlockDictSerializer, BlockSerializer
@@ -75,6 +76,10 @@ def get_blocks(
include_gated_sections = 'show_gated_sections' in requested_fields
include_has_scheduled_content = 'has_scheduled_content' in requested_fields
include_special_exams = 'special_exam_info' in requested_fields
include_discussions_context = (
DiscussionsTopicLinkTransformer.EMBED_URL in requested_fields or
DiscussionsTopicLinkTransformer.EXTERNAL_ID in requested_fields
)
if user is not None:
transformers += course_blocks_api.get_course_block_access_transformers(user)
@@ -99,13 +104,16 @@ def get_blocks(
if include_effort_estimation:
transformers += [EffortEstimationTransformer()]
if include_discussions_context:
transformers += [DiscussionsTopicLinkTransformer()]
transformers += [
BlocksAPITransformer(
block_counts,
student_view_data,
depth,
nav_depth
)
),
]
# transform

View File

@@ -2,12 +2,12 @@
Serializers for Course Blocks related return objects.
"""
from django.conf import settings
from rest_framework import serializers
from rest_framework.reverse import reverse
from lms.djangoapps.course_blocks.transformers.visibility import VisibilityTransformer
from openedx.core.djangoapps.discussions.transformers import DiscussionsTopicLinkTransformer
from .transformers.block_completion import BlockCompletionTransformer
from .transformers.block_counts import BlockCountsTransformer
@@ -21,13 +21,14 @@ class SupportedFieldType:
"""
Metadata about fields supported by different transformers
"""
def __init__(
self,
block_field_name,
transformer=None,
requested_field_name=None,
serializer_field_name=None,
default_value=None
self,
block_field_name,
transformer=None,
requested_field_name=None,
serializer_field_name=None,
default_value=None
):
self.transformer = transformer
self.block_field_name = block_field_name
@@ -82,6 +83,8 @@ SUPPORTED_FIELDS = [
SupportedFieldType(BlockCompletionTransformer.COMPLETION, BlockCompletionTransformer),
SupportedFieldType(BlockCompletionTransformer.COMPLETE),
SupportedFieldType(BlockCompletionTransformer.RESUME_BLOCK),
SupportedFieldType(DiscussionsTopicLinkTransformer.EXTERNAL_ID),
SupportedFieldType(DiscussionsTopicLinkTransformer.EMBED_URL),
*[SupportedFieldType(field_name) for field_name in ExtraFieldsTransformer.get_requested_extra_fields()],
]
@@ -111,6 +114,7 @@ class BlockSerializer(serializers.Serializer): # pylint: disable=abstract-metho
"""
Serializer for single course block
"""
def _get_field(self, block_key, transformer, field_name, default):
"""
Get the field value requested. The field may be an XBlock field, a