revert: show empty container blocks from the course blocks api when called by mobile (#27707)
REVE-52 is merged and mobile
traffic from older app versions is < 5% of the mobile traffic.
Therefore we dont need changes from this PR 325fbe4eb2 (diff-c061bf405edf96531766b26cc2bcc2bb3639d851e5d9f844612c2ea57c35e56e)
LEARNER-8377
This commit is contained in:
@@ -6,9 +6,7 @@ API function for retrieving course blocks data
|
||||
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 lms.djangoapps.course_blocks.transformers.hide_empty import HideEmptyTransformer
|
||||
from openedx.core.djangoapps.content.block_structure.transformers import BlockStructureTransformers
|
||||
from openedx.core.lib.mobile_utils import is_request_from_mobile_app
|
||||
from openedx.features.effort_estimation.api import EffortEstimationTransformer
|
||||
|
||||
from .serializers import BlockDictSerializer, BlockSerializer
|
||||
@@ -98,10 +96,6 @@ def get_blocks(
|
||||
if hide_access_denials:
|
||||
transformers += [AccessDeniedMessageFilterTransformer()]
|
||||
|
||||
# TODO: Remove this after REVE-52 lands and old-mobile-app traffic falls to < 5% of mobile traffic
|
||||
if is_request_from_mobile_app(request):
|
||||
transformers += [HideEmptyTransformer()]
|
||||
|
||||
if include_effort_estimation:
|
||||
transformers += [EffortEstimationTransformer()]
|
||||
|
||||
|
||||
@@ -108,11 +108,10 @@ class TestGetBlocks(SharedModuleStoreTestCase):
|
||||
assert block['type'] == 'problem'
|
||||
|
||||
|
||||
# TODO: Remove this class after REVE-52 lands and old-mobile-app traffic falls to < 5% of mobile traffic
|
||||
@ddt.ddt
|
||||
class TestGetBlocksMobileHack(SharedModuleStoreTestCase):
|
||||
class TestGetBlocksVideoUrls(SharedModuleStoreTestCase):
|
||||
"""
|
||||
Tests that requests from the mobile app don't receive empty containers.
|
||||
Tests the video blocks returned have their URL re-written for
|
||||
encoded videos.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
@@ -143,19 +142,6 @@ class TestGetBlocksMobileHack(SharedModuleStoreTestCase):
|
||||
self.request = RequestFactory().get("/dummy")
|
||||
self.request.user = self.user
|
||||
|
||||
@ddt.data(
|
||||
*product([True, False], ['chapter', 'sequential', 'vertical'])
|
||||
)
|
||||
@ddt.unpack
|
||||
def test_empty_containers(self, is_mobile, container_type):
|
||||
with patch('lms.djangoapps.course_api.blocks.api.is_request_from_mobile_app', return_value=is_mobile):
|
||||
blocks = get_blocks(self.request, self.course.location)
|
||||
full_container_key = self.course.id.make_usage_key(container_type, f'full_{container_type}')
|
||||
assert str(full_container_key) in blocks['blocks']
|
||||
empty_container_key = self.course.id.make_usage_key(container_type, f'empty_{container_type}')
|
||||
assert_containment = self.assertNotIn if is_mobile else self.assertIn
|
||||
assert_containment(str(empty_container_key), blocks['blocks'])
|
||||
|
||||
@patch('xmodule.video_module.VideoBlock.student_view_data')
|
||||
def test_video_urls_rewrite(self, video_data_patch):
|
||||
"""
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
"""
|
||||
Hide Empty Transformer implementation.
|
||||
"""
|
||||
# TODO: Remove this file after REVE-52 lands and old-mobile-app traffic falls to < 5% of mobile traffic
|
||||
|
||||
|
||||
from openedx.core.djangoapps.content.block_structure.transformer import BlockStructureTransformer
|
||||
|
||||
|
||||
class HideEmptyTransformer(BlockStructureTransformer):
|
||||
"""
|
||||
A transformer that removes any block from the course that could have
|
||||
children but doesn't.
|
||||
"""
|
||||
WRITE_VERSION = 1
|
||||
READ_VERSION = 1
|
||||
|
||||
@classmethod
|
||||
def name(cls):
|
||||
"""
|
||||
Unique identifier for the transformer's class;
|
||||
same identifier used in setup.py.
|
||||
"""
|
||||
return "hide_empty"
|
||||
|
||||
@classmethod
|
||||
def collect(cls, block_structure):
|
||||
"""
|
||||
Collects any information that's necessary to execute this
|
||||
transformer's transform method.
|
||||
"""
|
||||
block_structure.request_xblock_fields('children', 'has_children')
|
||||
|
||||
def transform(self, usage_info, block_structure):
|
||||
def _filter(block_key):
|
||||
has_children = block_structure.get_xblock_field(block_key, 'has_children')
|
||||
children = block_structure.get_xblock_field(block_key, 'children')
|
||||
return has_children and not any(child in block_structure for child in children)
|
||||
|
||||
for _ in block_structure.post_order_traversal(
|
||||
filter_func=block_structure.create_removal_filter(_filter)
|
||||
):
|
||||
pass
|
||||
1
setup.py
1
setup.py
@@ -59,7 +59,6 @@ setup(
|
||||
"start_date = lms.djangoapps.course_blocks.transformers.start_date:StartDateTransformer",
|
||||
"user_partitions = lms.djangoapps.course_blocks.transformers.user_partitions:UserPartitionTransformer",
|
||||
"visibility = lms.djangoapps.course_blocks.transformers.visibility:VisibilityTransformer",
|
||||
"hide_empty = lms.djangoapps.course_blocks.transformers.hide_empty:HideEmptyTransformer",
|
||||
"hidden_content = lms.djangoapps.course_blocks.transformers.hidden_content:HiddenContentTransformer",
|
||||
"course_blocks_api = lms.djangoapps.course_api.blocks.transformers.blocks_api:BlocksAPITransformer",
|
||||
"milestones = lms.djangoapps.course_api.blocks.transformers.milestones:MilestonesAndSpecialExamsTransformer", # lint-amnesty, pylint: disable=line-too-long
|
||||
|
||||
Reference in New Issue
Block a user