Skip to content

Commit 4df35f9

Browse files
committed
chore: move waffle flags, configs to video service
1 parent f51343c commit 4df35f9

File tree

4 files changed

+79
-20
lines changed

4 files changed

+79
-20
lines changed

lms/djangoapps/courseware/tests/test_video_mongo.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,9 @@ def test_get_html_on_toggling_hls_feature(self, hls_feature_enabled, expected_va
12011201
'youtube': 'https://yt.com/?v=v0TFmdO4ZP0',
12021202
'desktop_mp4': 'https://mp4.com/dm.mp4'
12031203
}
1204-
with patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled') as feature_enabled:
1204+
with patch(
1205+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled'
1206+
) as feature_enabled:
12051207
feature_enabled.return_value = hls_feature_enabled
12061208
video_xml = '<video display_name="Video" download_video="true" edx_video_id="12345-67890">[]</video>'
12071209
self.initialize_block(data=video_xml)
@@ -1211,7 +1213,10 @@ def test_get_html_on_toggling_hls_feature(self, hls_feature_enabled, expected_va
12111213
expected_val_profiles,
12121214
)
12131215

1214-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True))
1216+
@patch(
1217+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
1218+
Mock(return_value=True)
1219+
)
12151220
@patch('xmodule.video_block.video_block.edxval_api.get_urls_for_profiles')
12161221
def test_get_html_hls(self, get_urls_for_profiles):
12171222
"""
@@ -1309,7 +1314,10 @@ def test_poster_image_without_edx_video_id(self, get_course_video_image_url):
13091314

13101315
assert "'poster': 'null'" in context
13111316

1312-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=False))
1317+
@patch(
1318+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
1319+
Mock(return_value=False)
1320+
)
13131321
def test_hls_primary_playback_on_toggling_hls_feature(self):
13141322
"""
13151323
Verify that `prioritize_hls` is set to `False` if `HLSPlaybackEnabledFlag` is disabled.
@@ -1356,7 +1364,10 @@ def test_hls_primary_playback_on_toggling_hls_feature(self):
13561364
'result': 'false'
13571365
},
13581366
)
1359-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True))
1367+
@patch(
1368+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
1369+
Mock(return_value=True)
1370+
)
13601371
def test_deprecate_youtube_course_waffle_flag(self, data):
13611372
"""
13621373
Tests various combinations of a `prioritize_hls` flag being set in waffle and overridden for a course.
@@ -1417,7 +1428,10 @@ def setUp(self):
14171428
),
14181429
)
14191430
@ddt.unpack
1420-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True))
1431+
@patch(
1432+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
1433+
Mock(return_value=True)
1434+
)
14211435
def test_val_encoding_in_context(self, val_video_encodings, video_url):
14221436
"""
14231437
Tests that the val encodings correctly override the video url when the edx video id is set and
@@ -1458,7 +1472,10 @@ def test_val_encoding_in_context(self, val_video_encodings, video_url):
14581472
),
14591473
)
14601474
@ddt.unpack
1461-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True))
1475+
@patch(
1476+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
1477+
Mock(return_value=True)
1478+
)
14621479
def test_val_encoding_in_context_without_external_youtube_source(self, val_video_encodings, video_url):
14631480
"""
14641481
Tests that the val encodings correctly override the video url when the edx video id is set and

openedx/core/djangoapps/video_config/services.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@
1212

1313
from openedx.core.djangoapps.video_config import sharing
1414
from organizations.api import get_course_organization
15-
15+
from openedx.core.djangoapps.video_config.models import (
16+
CourseYoutubeBlockedFlag,
17+
HLSPlaybackEnabledFlag,
18+
)
19+
from openedx.core.djangoapps.video_config.toggles import TRANSCRIPT_FEEDBACK
20+
from openedx.core.djangoapps.video_pipeline.config.waffle import DEPRECATE_YOUTUBE
1621

1722
log = logging.getLogger(__name__)
1823

@@ -62,3 +67,27 @@ def get_public_sharing_context(self, video_block, course_key: CourseKey) -> dict
6267
context['sharing_sites_info'] = sharing_sites_info
6368

6469
return context
70+
71+
def is_transcript_feedback_enabled(self, course_id: CourseKey) -> bool:
72+
"""
73+
Check if transcript feedback is enabled for the course.
74+
"""
75+
return TRANSCRIPT_FEEDBACK.is_enabled(course_id)
76+
77+
def is_youtube_deprecated(self, course_id: CourseKey) -> bool:
78+
"""
79+
Check if YouTube is deprecated for the course.
80+
"""
81+
return DEPRECATE_YOUTUBE.is_enabled(course_id)
82+
83+
def is_youtube_blocked_for_course(self, course_id: CourseKey) -> bool:
84+
"""
85+
Check if YouTube is blocked for the course.
86+
"""
87+
return CourseYoutubeBlockedFlag.feature_enabled(course_id)
88+
89+
def is_hls_playback_enabled(self, course_id: CourseKey) -> bool:
90+
"""
91+
Check if HLS playback is enabled for the course.
92+
"""
93+
return HLSPlaybackEnabledFlag.feature_enabled(course_id)

xmodule/tests/test_video.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,10 @@ def test_student_view_data(self, field_data, expected_student_view_data):
944944
student_view_data = block.student_view_data()
945945
assert student_view_data == expected_student_view_data
946946

947-
@patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True))
947+
@patch(
948+
'openedx.core.djangoapps.video_config.services.VideoConfigService.is_hls_playback_enabled',
949+
Mock(return_value=True)
950+
)
948951
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages',
949952
Mock(return_value=['es']))
950953
@patch('edxval.api.get_video_info_for_course_and_profiles', Mock(return_value={}))

xmodule/video_block/video_block.py

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from django.conf import settings
2323
from edx_django_utils.cache import RequestCache
2424
from lxml import etree
25+
from opaque_keys.edx.keys import CourseKey
2526
from opaque_keys.edx.locator import AssetLocator
2627
from web_fragments.fragment import Fragment
2728
from xblock.completable import XBlockCompletionMode
@@ -31,9 +32,6 @@
3132
from xblocks_contrib.video import VideoBlock as _ExtractedVideoBlock
3233

3334
from common.djangoapps.xblock_django.constants import ATTR_KEY_REQUEST_COUNTRY_CODE, ATTR_KEY_USER_ID
34-
from openedx.core.djangoapps.video_config.models import HLSPlaybackEnabledFlag, CourseYoutubeBlockedFlag
35-
from openedx.core.djangoapps.video_config.toggles import TRANSCRIPT_FEEDBACK
36-
from openedx.core.djangoapps.video_pipeline.config.waffle import DEPRECATE_YOUTUBE
3735
from openedx.core.lib.cache_utils import request_cached
3836
from openedx.core.lib.license import LicenseMixin
3937
from xmodule.contentstore.content import StaticContent
@@ -106,8 +104,8 @@
106104
EXPORT_IMPORT_STATIC_DIR = 'static'
107105

108106

109-
@XBlock.wants('settings', 'completion', 'i18n', 'request_cache')
110-
@XBlock.needs('mako', 'user', 'video_config')
107+
@XBlock.wants('settings', 'completion', 'i18n', 'request_cache', 'video_config')
108+
@XBlock.needs('mako', 'user')
111109
class _BuiltInVideoBlock(
112110
VideoFields, VideoTranscriptsMixin, VideoStudioViewHandlers, VideoStudentViewHandlers,
113111
EmptyDataRawMixin, XmlMixin, EditingMixin, XModuleToXBlockMixin,
@@ -188,18 +186,26 @@ def get_transcripts_for_student(self, transcripts, dest_lang=None):
188186
sorted_languages = OrderedDict(sorted_languages)
189187
return track_url, transcript_language, sorted_languages
190188

189+
def is_hls_playback_enabled(self, course_id: CourseKey) -> bool:
190+
"""
191+
Check if HLS playback is enabled for the course.
192+
"""
193+
video_config_service = self.runtime.service(self, 'video_config')
194+
return video_config_service.is_hls_playback_enabled(course_id) if video_config_service else False
195+
191196
@property
192197
def youtube_deprecated(self):
193198
"""
194199
Return True if youtube is deprecated and hls as primary playback is enabled else False
195200
"""
201+
video_config_service = self.runtime.service(self, 'video_config')
196202
# Return False if `hls` playback feature is disabled.
197-
if not HLSPlaybackEnabledFlag.feature_enabled(self.location.course_key):
203+
if not self.is_hls_playback_enabled(self.location.course_key):
198204
return False
199205

200206
# check if youtube has been deprecated and hls as primary playback
201207
# is enabled for this course
202-
return DEPRECATE_YOUTUBE.is_enabled(self.location.course_key)
208+
return video_config_service.is_youtube_deprecated(self.location.course_key) if video_config_service else False
203209

204210
def youtube_disabled_for_course(self): # lint-amnesty, pylint: disable=missing-function-docstring
205211
if not self.location.context_key.is_course:
@@ -209,7 +215,9 @@ def youtube_disabled_for_course(self): # lint-amnesty, pylint: disable=missing-
209215
if cache_response.is_found:
210216
return cache_response.value
211217

212-
youtube_is_disabled = CourseYoutubeBlockedFlag.feature_enabled(self.location.course_key)
218+
video_config_service = self.runtime.service(self, 'video_config')
219+
youtube_is_disabled = video_config_service.is_youtube_blocked_for_course(
220+
self.location.course_key) if video_config_service else False
213221
request_cache.set(self.location.context_key, youtube_is_disabled)
214222
return youtube_is_disabled
215223

@@ -300,7 +308,7 @@ def get_html(self, view=STUDENT_VIEW, context=None): # lint-amnesty, pylint: di
300308
try:
301309
val_profiles = ["youtube", "desktop_webm", "desktop_mp4"]
302310

303-
if HLSPlaybackEnabledFlag.feature_enabled(self.course_id):
311+
if self.is_hls_playback_enabled(self.course_id):
304312
val_profiles.append('hls')
305313

306314
# strip edx_video_id to prevent ValVideoNotFoundError error if unwanted spaces are there. TNL-5769
@@ -499,7 +507,9 @@ def is_transcript_feedback_enabled(self):
499507
return False # Only courses support this feature at all (not libraries)
500508
try:
501509
# Video transcript feedback must be enabled in order to show the widget
502-
feature_enabled = TRANSCRIPT_FEEDBACK.is_enabled(self.context_key)
510+
video_config_service = self.runtime.service(self, 'video_config')
511+
feature_enabled = video_config_service.is_transcript_feedback_enabled(
512+
self.context_key) if video_config_service else False
503513
except Exception as err: # pylint: disable=broad-except
504514
log.exception(f"Error retrieving course for course ID: {self.context_key}")
505515
return False
@@ -881,7 +891,7 @@ def get_youtube_link(video_id):
881891
if self.edx_video_id and edxval_api:
882892

883893
val_profiles = ['youtube', 'desktop_webm', 'desktop_mp4']
884-
if HLSPlaybackEnabledFlag.feature_enabled(self.scope_ids.usage_id.context_key.for_branch(None)):
894+
if self.is_hls_playback_enabled(self.scope_ids.usage_id.context_key.for_branch(None)):
885895
val_profiles.append('hls')
886896

887897
# Get video encodings for val profiles.
@@ -1137,7 +1147,7 @@ def student_view_data(self, context=None):
11371147
# Check in VAL data first if edx_video_id exists
11381148
if self.edx_video_id:
11391149
video_profile_names = context.get("profiles", ["mobile_low", 'desktop_mp4', 'desktop_webm', 'mobile_high'])
1140-
if HLSPlaybackEnabledFlag.feature_enabled(self.location.course_key) and 'hls' not in video_profile_names:
1150+
if self.is_hls_playback_enabled(self.location.course_key) and 'hls' not in video_profile_names:
11411151
video_profile_names.append('hls')
11421152

11431153
# get and cache bulk VAL data for course

0 commit comments

Comments
 (0)