Skip to content

Commit f51343c

Browse files
farhankdmccormick
andauthored
refactor: move transcripts_utils from xmodule to video-config (#37600)
As part of the ongoing effort to deprecate and eventually remove xmodule, we’ve started gradually migrating the necessary code files from xmodule to more appropriate locations within the codebase. Ticket: openedx/public-engineering#445 Also: this tweaks importlinter ignores & add follow-up issue links Co-authored-by: Kyle McCormick <[email protected]>
1 parent fcf03cc commit f51343c

File tree

18 files changed

+58
-42
lines changed

18 files changed

+58
-42
lines changed

cms/djangoapps/contentstore/helpers.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
"""
22
Helper methods for Studio views.
3+
4+
Before adding more stuff here, take a look at:
5+
https://github.com/openedx/edx-platform/issues/37637
6+
Only Studio-specfic helper functions should be added here.
7+
Platform-wide Python APIs should be added to an appropriate api.py file instead.
38
"""
49
from __future__ import annotations
510
import json
@@ -26,7 +31,7 @@
2631
from xmodule.exceptions import NotFoundError
2732
from xmodule.modulestore.django import modulestore
2833
from xmodule.xml_block import XmlMixin
29-
from xmodule.video_block.transcripts_utils import Transcript, build_components_import_path
34+
from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, build_components_import_path
3035
from edxval.api import (
3136
create_external_video,
3237
create_or_update_video_transcript,

cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
from openedx.core.djangoapps.content_libraries import api as lib_api
123123
from xmodule.modulestore.django import modulestore
124124
from xmodule.modulestore.exceptions import ItemNotFoundError
125-
from xmodule.video_block.transcripts_utils import clear_transcripts
125+
from openedx.core.djangoapps.video_config.transcripts_utils import clear_transcripts
126126

127127
logger = logging.getLogger(__name__)
128128

cms/djangoapps/contentstore/tests/test_transcripts_utils.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order
2424
from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order
2525
from xmodule.modulestore.tests.factories import CourseFactory, BlockFactory # lint-amnesty, pylint: disable=wrong-import-order
26-
from xmodule.video_block import transcripts_utils # lint-amnesty, pylint: disable=wrong-import-order
26+
from openedx.core.djangoapps.video_config import transcripts_utils # lint-amnesty, pylint: disable=wrong-import-order
2727

2828
TEST_DATA_CONTENTSTORE = copy.deepcopy(settings.CONTENTSTORE)
2929
TEST_DATA_CONTENTSTORE['DOC_STORE_CONFIG']['db'] = 'test_xcontent_%s' % uuid4().hex
@@ -235,7 +235,7 @@ def test_success_downloading_subs(self):
235235
self.clear_sub_content(good_youtube_sub)
236236

237237
language_code = 'en'
238-
with patch('xmodule.video_block.transcripts_utils.requests.get') as mock_get:
238+
with patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') as mock_get:
239239
setup_caption_responses(mock_get, language_code, caption_response_string)
240240
transcripts_utils.download_youtube_subs(good_youtube_sub, self.course, settings)
241241

@@ -258,7 +258,7 @@ def test_subs_for_html5_vid_with_periods(self):
258258
self.assertEqual(html5_ids[2], 'baz.1.4')
259259
self.assertEqual(html5_ids[3], 'foo')
260260

261-
@patch('xmodule.video_block.transcripts_utils.requests.get')
261+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get')
262262
def test_fail_downloading_subs(self, mock_get):
263263

264264
track_status_code = 404
@@ -459,7 +459,7 @@ class TestYoutubeTranscripts(unittest.TestCase):
459459
"""
460460
Tests for checking right datastructure returning when using youtube api.
461461
"""
462-
@patch('xmodule.video_block.transcripts_utils.requests.get')
462+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get')
463463
def test_youtube_bad_status_code(self, mock_get):
464464
track_status_code = 404
465465
setup_caption_responses(mock_get, 'en', 'test', track_status_code)
@@ -468,7 +468,7 @@ def test_youtube_bad_status_code(self, mock_get):
468468
link = transcripts_utils.get_transcript_links_from_youtube(youtube_id, settings, translation)
469469
transcripts_utils.get_transcript_from_youtube(link, youtube_id, translation)
470470

471-
@patch('xmodule.video_block.transcripts_utils.requests.get')
471+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get')
472472
def test_youtube_empty_text(self, mock_get):
473473
setup_caption_responses(mock_get, 'en', '')
474474
youtube_id = 'bad_youtube_id'
@@ -492,7 +492,7 @@ def test_youtube_good_result(self):
492492
}
493493
youtube_id = 'good_youtube_id'
494494
language_code = 'en'
495-
with patch('xmodule.video_block.transcripts_utils.requests.get') as mock_get:
495+
with patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') as mock_get:
496496
setup_caption_responses(mock_get, language_code, caption_response_string)
497497
link = transcripts_utils.get_transcript_links_from_youtube(youtube_id, settings, translation)
498498
transcripts = transcripts_utils.get_transcript_from_youtube(link['en'], youtube_id, translation)
@@ -890,7 +890,7 @@ def test_get_transcript_from_content_store_for_ur(self):
890890
self.assertEqual(filename, 'ur_video_101.sjson')
891891
self.assertEqual(mimetype, self.sjson_mime_type)
892892

893-
@patch('xmodule.video_block.transcripts_utils.get_video_transcript_content')
893+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content')
894894
def test_get_transcript_from_val(self, mock_get_video_transcript_content):
895895
"""
896896
Verify that `get_transcript` function returns correct data when transcript is in val.
@@ -952,7 +952,7 @@ def test_get_transcript_no_en_transcript(self):
952952
exception_message = str(no_en_transcript_exception.exception)
953953
self.assertEqual(exception_message, 'No transcript for `en` language')
954954

955-
@patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data')
955+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data')
956956
def test_get_transcript_incorrect_json_(self, mock_get_video_transcript_data):
957957
"""
958958
Verify that `get transcript` function returns a working json file if the original throws an error
@@ -966,7 +966,7 @@ def test_get_transcript_incorrect_json_(self, mock_get_video_transcript_data):
966966
transcripts_utils.TranscriptsGenerationException,
967967
UnicodeDecodeError('aliencodec', b'\x02\x01', 1, 2, 'alien codec found!')
968968
)
969-
@patch('xmodule.video_block.transcripts_utils.Transcript')
969+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.Transcript')
970970
def test_get_transcript_val_exceptions(self, exception_to_raise, mock_Transcript):
971971
"""
972972
Verify that `get_transcript_from_val` function raises `NotFoundError` when specified exceptions raised.
@@ -986,7 +986,7 @@ def test_get_transcript_val_exceptions(self, exception_to_raise, mock_Transcript
986986
transcripts_utils.TranscriptsGenerationException,
987987
UnicodeDecodeError('aliencodec', b'\x02\x01', 1, 2, 'alien codec found!')
988988
)
989-
@patch('xmodule.video_block.transcripts_utils.Transcript')
989+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.Transcript')
990990
def test_get_transcript_content_store_exceptions(self, exception_to_raise, mock_Transcript):
991991
"""
992992
Verify that `get_transcript_from_contentstore` function raises `NotFoundError` when specified exceptions raised.
@@ -1051,7 +1051,7 @@ def mock_django_get_language_info(self, side_effect=None):
10511051
"""
10521052
Helper for cleaner mocking
10531053
"""
1054-
with patch('xmodule.video_block.transcripts_utils.get_language_info') as mock_get:
1054+
with patch('openedx.core.djangoapps.video_config.transcripts_utils.get_language_info') as mock_get:
10551055
if side_effect:
10561056
mock_get.side_effect = side_effect
10571057
yield mock_get

cms/djangoapps/contentstore/tests/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase
1616
from xmodule.modulestore.tests.factories import CourseFactory
1717
from xmodule.modulestore.tests.utils import ProceduralCourseTestMixin
18-
from xmodule.tests.test_transcripts_utils import YoutubeVideoHTMLResponse
18+
from openedx.core.djangoapps.video_config.tests.test_transcripts_utils import YoutubeVideoHTMLResponse
1919

2020
from cms.djangoapps.contentstore.utils import reverse_url
2121
from common.djangoapps.student.models import Registration

cms/djangoapps/contentstore/transcript_storage_handlers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
from common.djangoapps.util.json_request import JsonResponse
2424
from openedx.core.djangoapps.video_config.models import VideoTranscriptEnabledFlag
2525
from openedx.core.djangoapps.video_pipeline.api import update_3rd_party_transcription_service_credentials
26-
from xmodule.video_block.transcripts_utils import Transcript, TranscriptsGenerationException # lint-amnesty, pylint: disable=wrong-import-order
26+
from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, TranscriptsGenerationException # lint-amnesty, pylint: disable=wrong-import-order
2727

2828
from .toggles import use_mock_video_uploads
2929
from .video_storage_handlers import TranscriptProvider

cms/djangoapps/contentstore/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1811,7 +1811,7 @@ def get_course_videos_context(course_block, pagination_conf, course_key=None):
18111811
)
18121812
from openedx.core.djangoapps.video_config.models import VideoTranscriptEnabledFlag
18131813
from openedx.core.djangoapps.video_config.toggles import use_xpert_translations_component
1814-
from xmodule.video_block.transcripts_utils import Transcript # lint-amnesty, pylint: disable=wrong-import-order
1814+
from openedx.core.djangoapps.video_config.transcripts_utils import Transcript # lint-amnesty, pylint: disable=wrong-import-order
18151815

18161816
from .video_storage_handlers import (
18171817
get_all_transcript_languages,

cms/djangoapps/contentstore/views/tests/test_transcripts.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order
2626
from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order
2727
from xmodule.video_block import VideoBlock # lint-amnesty, pylint: disable=wrong-import-order
28-
from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
28+
from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
2929
GetTranscriptsFromYouTubeException,
3030
Transcript,
3131
get_video_transcript_content,
@@ -981,7 +981,7 @@ def test_check_youtube(self):
981981
}
982982
)
983983

984-
@patch('xmodule.video_block.transcripts_utils.requests.get')
984+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get')
985985
def test_check_youtube_with_transcript_name(self, mock_get):
986986
"""
987987
Test that the transcripts are fetched correctly when the the transcript name is set
@@ -1121,7 +1121,7 @@ def test_fail_for_non_video_block(self):
11211121
'Transcripts are supported only for "video" blocks.',
11221122
)
11231123

1124-
@patch('xmodule.video_block.transcripts_utils.get_video_transcript_content')
1124+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content')
11251125
def test_command_for_fallback_transcript(self, mock_get_video_transcript_content):
11261126
"""
11271127
Verify the command if a transcript is there in edx-val.

cms/djangoapps/contentstore/views/transcripts_ajax.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order
3131
from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order
3232
from xmodule.modulestore.exceptions import ItemNotFoundError # lint-amnesty, pylint: disable=wrong-import-order
33-
from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
33+
from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
3434
GetTranscriptsFromYouTubeException,
3535
Transcript,
3636
TranscriptsGenerationException,

lms/djangoapps/courseware/tests/test_video_handlers.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
# noinspection PyUnresolvedReferences
2929
from xmodule.tests.helpers import override_descriptor_system # pylint: disable=unused-import
3030
from xmodule.video_block import VideoBlock # lint-amnesty, pylint: disable=wrong-import-order
31-
from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
31+
from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order
3232
Transcript,
3333
edxval_api,
3434
get_transcript,
@@ -293,7 +293,7 @@ def test_available_translation_non_en(self):
293293
response = self.block.transcript(request=request, dispatch='available_translations')
294294
assert json.loads(response.body.decode('utf-8')) == ['uk']
295295

296-
@patch('xmodule.video_block.transcripts_utils.get_video_transcript_content')
296+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content')
297297
def test_multiple_available_translations(self, mock_get_video_transcript_content):
298298
mock_get_video_transcript_content.return_value = {
299299
'content': json.dumps({
@@ -319,8 +319,8 @@ def test_multiple_available_translations(self, mock_get_video_transcript_content
319319
response = self.block.transcript(request=request, dispatch='available_translations')
320320
assert sorted(json.loads(response.body.decode('utf-8'))) == sorted(['en', 'uk'])
321321

322-
@patch('xmodule.video_block.transcripts_utils.get_video_transcript_content')
323-
@patch('xmodule.video_block.transcripts_utils.get_available_transcript_languages')
322+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content')
323+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages')
324324
@ddt.data(
325325
(
326326
['en', 'uk', 'ro'],
@@ -396,7 +396,7 @@ def test_val_available_translations(
396396
response = self.block.transcript(request=request, dispatch='available_translations')
397397
self.assertCountEqual(json.loads(response.body.decode('utf-8')), result)
398398

399-
@patch('xmodule.video_block.transcripts_utils.edxval_api.get_available_transcript_languages')
399+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_available_transcript_languages')
400400
def test_val_available_translations_feature_disabled(self, mock_get_available_transcript_languages):
401401
"""
402402
Tests available translations with val transcript languages when feature is disabled.
@@ -445,7 +445,7 @@ def test_available_translation_en_and_non_en(self, lang):
445445
response = self.block.transcript(request=request, dispatch=self.dispatch)
446446
assert json.loads(response.body.decode('utf-8')) == [lang]
447447

448-
@patch('xmodule.video_block.transcripts_utils.get_available_transcript_languages')
448+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages')
449449
def test_multiple_available_translations(self, mock_get_transcript_languages):
450450
"""
451451
Verify that available translations dispatch works as expected for multiple
@@ -534,7 +534,7 @@ def test_download_en_no_sub(self):
534534
get_transcript(self.block)
535535

536536
@patch(
537-
'xmodule.video_block.transcripts_utils.get_transcript_for_video',
537+
'openedx.core.djangoapps.video_config.transcripts_utils.get_transcript_for_video',
538538
return_value=(Transcript.SRT, "塞", 'Subs!')
539539
)
540540
def test_download_non_en_non_ascii_filename(self, __):
@@ -544,7 +544,7 @@ def test_download_non_en_non_ascii_filename(self, __):
544544
assert response.headers['Content-Type'] == 'application/x-subrip; charset=utf-8'
545545
assert response.headers['Content-Disposition'] == 'attachment; filename="en_塞.srt"'
546546

547-
@patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data')
547+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data')
548548
@patch('xmodule.video_block.get_transcript', Mock(side_effect=NotFoundError))
549549
def test_download_fallback_transcript(self, mock_get_video_transcript_data):
550550
"""
@@ -814,7 +814,7 @@ def _set_static_asset_path(self):
814814
with store.branch_setting(ModuleStoreEnum.Branch.draft_preferred, self.course.id):
815815
store.update_item(self.course, self.user.id)
816816

817-
@patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data')
817+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data')
818818
@patch('xmodule.video_block.VideoBlock.translation', Mock(side_effect=NotFoundError))
819819
@patch('xmodule.video_block.VideoBlock.get_static_transcript', Mock(return_value=Response(status=404)))
820820
def test_translation_fallback_transcript(self, mock_get_video_transcript_data):

lms/djangoapps/courseware/tests/test_video_mongo.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
from xmodule.tests.test_import import DummyModuleStoreRuntime
5151
from xmodule.tests.test_video import VideoBlockTestBase
5252
from xmodule.video_block import VideoBlock, bumper_utils, video_utils
53-
from xmodule.video_block.transcripts_utils import Transcript, save_to_store, subs_filename
53+
from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, save_to_store, subs_filename
5454
from xmodule.video_block.video_block import EXPORT_IMPORT_COURSE_DIR, EXPORT_IMPORT_STATIC_DIR
5555
from xmodule.x_module import PUBLIC_VIEW, STUDENT_VIEW
5656

@@ -1755,7 +1755,7 @@ def test_with_edx_video_id_video_not_in_val(self, allow_cache_miss):
17551755
({'uk': 1, 'de': 1}, 'en-subs', ['de', 'en'], ['en', 'uk', 'de']),
17561756
)
17571757
@ddt.unpack
1758-
@patch('xmodule.video_block.transcripts_utils.edxval_api.get_available_transcript_languages')
1758+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_available_transcript_languages')
17591759
def test_student_view_with_val_transcripts_enabled(self, transcripts, english_sub, val_transcripts,
17601760
expected_transcripts, mock_get_transcript_languages):
17611761
"""
@@ -1950,7 +1950,7 @@ def test_export_val_data_not_found(self):
19501950
expected = etree.XML(expected_str, parser=parser)
19511951
self.assertXmlEqual(expected, actual)
19521952

1953-
@patch('xmodule.video_block.transcripts_utils.get_video_ids_info')
1953+
@patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_ids_info')
19541954
def test_export_no_video_ids(self, mock_get_video_ids_info):
19551955
"""
19561956
Tests export when there is no video id. `export_to_xml` only works in case of video id.

0 commit comments

Comments
 (0)