From f51343c8718d7bf472ab9e6da35fbf91bc6de7d0 Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Khan Date: Fri, 14 Nov 2025 23:26:35 +0500 Subject: [PATCH] refactor: move transcripts_utils from xmodule to video-config (#37600) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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: https://github.com/openedx/public-engineering/issues/445 Also: this tweaks importlinter ignores & add follow-up issue links Co-authored-by: Kyle McCormick --- cms/djangoapps/contentstore/helpers.py | 7 +++++- .../rest_api/v2/views/downstreams.py | 2 +- .../tests/test_transcripts_utils.py | 22 +++++++++---------- cms/djangoapps/contentstore/tests/utils.py | 2 +- .../transcript_storage_handlers.py | 2 +- cms/djangoapps/contentstore/utils.py | 2 +- .../views/tests/test_transcripts.py | 6 ++--- .../contentstore/views/transcripts_ajax.py | 2 +- .../courseware/tests/test_video_handlers.py | 18 +++++++-------- .../courseware/tests/test_video_mongo.py | 6 ++--- .../content_libraries/api/libraries.py | 1 + .../tests/test_transcripts_utils.py | 2 +- .../video_config}/transcripts_utils.py | 2 +- setup.cfg | 13 +++++++++-- xmodule/tests/test_video.py | 7 +++--- xmodule/video_block/__init__.py | 2 +- xmodule/video_block/video_block.py | 2 +- xmodule/video_block/video_handlers.py | 2 +- 18 files changed, 58 insertions(+), 42 deletions(-) rename {xmodule => openedx/core/djangoapps/video_config}/tests/test_transcripts_utils.py (98%) rename {xmodule/video_block => openedx/core/djangoapps/video_config}/transcripts_utils.py (99%) diff --git a/cms/djangoapps/contentstore/helpers.py b/cms/djangoapps/contentstore/helpers.py index c5890b5b81..9bfab1f1f3 100644 --- a/cms/djangoapps/contentstore/helpers.py +++ b/cms/djangoapps/contentstore/helpers.py @@ -1,5 +1,10 @@ """ Helper methods for Studio views. + +Before adding more stuff here, take a look at: +https://github.com/openedx/edx-platform/issues/37637 +Only Studio-specfic helper functions should be added here. +Platform-wide Python APIs should be added to an appropriate api.py file instead. """ from __future__ import annotations import json @@ -26,7 +31,7 @@ from xmodule.contentstore.django import contentstore from xmodule.exceptions import NotFoundError from xmodule.modulestore.django import modulestore from xmodule.xml_block import XmlMixin -from xmodule.video_block.transcripts_utils import Transcript, build_components_import_path +from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, build_components_import_path from edxval.api import ( create_external_video, create_or_update_video_transcript, diff --git a/cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py b/cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py index 7cfd095ae9..16dc977c8a 100644 --- a/cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py +++ b/cms/djangoapps/contentstore/rest_api/v2/views/downstreams.py @@ -122,7 +122,7 @@ from openedx.core.lib.api.view_utils import ( from openedx.core.djangoapps.content_libraries import api as lib_api from xmodule.modulestore.django import modulestore from xmodule.modulestore.exceptions import ItemNotFoundError -from xmodule.video_block.transcripts_utils import clear_transcripts +from openedx.core.djangoapps.video_config.transcripts_utils import clear_transcripts logger = logging.getLogger(__name__) diff --git a/cms/djangoapps/contentstore/tests/test_transcripts_utils.py b/cms/djangoapps/contentstore/tests/test_transcripts_utils.py index ea56394bd6..5a401e62d9 100644 --- a/cms/djangoapps/contentstore/tests/test_transcripts_utils.py +++ b/cms/djangoapps/contentstore/tests/test_transcripts_utils.py @@ -23,7 +23,7 @@ from xmodule.contentstore.django import contentstore # lint-amnesty, pylint: di from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.tests.django_utils import SharedModuleStoreTestCase # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.tests.factories import CourseFactory, BlockFactory # lint-amnesty, pylint: disable=wrong-import-order -from xmodule.video_block import transcripts_utils # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.djangoapps.video_config import transcripts_utils # lint-amnesty, pylint: disable=wrong-import-order TEST_DATA_CONTENTSTORE = copy.deepcopy(settings.CONTENTSTORE) TEST_DATA_CONTENTSTORE['DOC_STORE_CONFIG']['db'] = 'test_xcontent_%s' % uuid4().hex @@ -235,7 +235,7 @@ class TestDownloadYoutubeSubs(TestYoutubeSubsBase): self.clear_sub_content(good_youtube_sub) language_code = 'en' - with patch('xmodule.video_block.transcripts_utils.requests.get') as mock_get: + with patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') as mock_get: setup_caption_responses(mock_get, language_code, caption_response_string) transcripts_utils.download_youtube_subs(good_youtube_sub, self.course, settings) @@ -258,7 +258,7 @@ class TestDownloadYoutubeSubs(TestYoutubeSubsBase): self.assertEqual(html5_ids[2], 'baz.1.4') self.assertEqual(html5_ids[3], 'foo') - @patch('xmodule.video_block.transcripts_utils.requests.get') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') def test_fail_downloading_subs(self, mock_get): track_status_code = 404 @@ -459,7 +459,7 @@ class TestYoutubeTranscripts(unittest.TestCase): """ Tests for checking right datastructure returning when using youtube api. """ - @patch('xmodule.video_block.transcripts_utils.requests.get') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') def test_youtube_bad_status_code(self, mock_get): track_status_code = 404 setup_caption_responses(mock_get, 'en', 'test', track_status_code) @@ -468,7 +468,7 @@ class TestYoutubeTranscripts(unittest.TestCase): link = transcripts_utils.get_transcript_links_from_youtube(youtube_id, settings, translation) transcripts_utils.get_transcript_from_youtube(link, youtube_id, translation) - @patch('xmodule.video_block.transcripts_utils.requests.get') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') def test_youtube_empty_text(self, mock_get): setup_caption_responses(mock_get, 'en', '') youtube_id = 'bad_youtube_id' @@ -492,7 +492,7 @@ class TestYoutubeTranscripts(unittest.TestCase): } youtube_id = 'good_youtube_id' language_code = 'en' - with patch('xmodule.video_block.transcripts_utils.requests.get') as mock_get: + with patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') as mock_get: setup_caption_responses(mock_get, language_code, caption_response_string) link = transcripts_utils.get_transcript_links_from_youtube(youtube_id, settings, translation) transcripts = transcripts_utils.get_transcript_from_youtube(link['en'], youtube_id, translation) @@ -890,7 +890,7 @@ class TestGetTranscript(SharedModuleStoreTestCase): self.assertEqual(filename, 'ur_video_101.sjson') self.assertEqual(mimetype, self.sjson_mime_type) - @patch('xmodule.video_block.transcripts_utils.get_video_transcript_content') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content') def test_get_transcript_from_val(self, mock_get_video_transcript_content): """ Verify that `get_transcript` function returns correct data when transcript is in val. @@ -952,7 +952,7 @@ class TestGetTranscript(SharedModuleStoreTestCase): exception_message = str(no_en_transcript_exception.exception) self.assertEqual(exception_message, 'No transcript for `en` language') - @patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data') def test_get_transcript_incorrect_json_(self, mock_get_video_transcript_data): """ Verify that `get transcript` function returns a working json file if the original throws an error @@ -966,7 +966,7 @@ class TestGetTranscript(SharedModuleStoreTestCase): transcripts_utils.TranscriptsGenerationException, UnicodeDecodeError('aliencodec', b'\x02\x01', 1, 2, 'alien codec found!') ) - @patch('xmodule.video_block.transcripts_utils.Transcript') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.Transcript') def test_get_transcript_val_exceptions(self, exception_to_raise, mock_Transcript): """ Verify that `get_transcript_from_val` function raises `NotFoundError` when specified exceptions raised. @@ -986,7 +986,7 @@ class TestGetTranscript(SharedModuleStoreTestCase): transcripts_utils.TranscriptsGenerationException, UnicodeDecodeError('aliencodec', b'\x02\x01', 1, 2, 'alien codec found!') ) - @patch('xmodule.video_block.transcripts_utils.Transcript') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.Transcript') def test_get_transcript_content_store_exceptions(self, exception_to_raise, mock_Transcript): """ Verify that `get_transcript_from_contentstore` function raises `NotFoundError` when specified exceptions raised. @@ -1051,7 +1051,7 @@ class TestGetEndonymOrLabel(unittest.TestCase): """ Helper for cleaner mocking """ - with patch('xmodule.video_block.transcripts_utils.get_language_info') as mock_get: + with patch('openedx.core.djangoapps.video_config.transcripts_utils.get_language_info') as mock_get: if side_effect: mock_get.side_effect = side_effect yield mock_get diff --git a/cms/djangoapps/contentstore/tests/utils.py b/cms/djangoapps/contentstore/tests/utils.py index bb1ca02052..42f57563c2 100644 --- a/cms/djangoapps/contentstore/tests/utils.py +++ b/cms/djangoapps/contentstore/tests/utils.py @@ -15,7 +15,7 @@ from xmodule.modulestore.split_mongo.split import SplitMongoModuleStore from xmodule.modulestore.tests.django_utils import TEST_DATA_SPLIT_MODULESTORE, ModuleStoreTestCase from xmodule.modulestore.tests.factories import CourseFactory from xmodule.modulestore.tests.utils import ProceduralCourseTestMixin -from xmodule.tests.test_transcripts_utils import YoutubeVideoHTMLResponse +from openedx.core.djangoapps.video_config.tests.test_transcripts_utils import YoutubeVideoHTMLResponse from cms.djangoapps.contentstore.utils import reverse_url from common.djangoapps.student.models import Registration diff --git a/cms/djangoapps/contentstore/transcript_storage_handlers.py b/cms/djangoapps/contentstore/transcript_storage_handlers.py index b2a682f429..ba26d4d678 100644 --- a/cms/djangoapps/contentstore/transcript_storage_handlers.py +++ b/cms/djangoapps/contentstore/transcript_storage_handlers.py @@ -23,7 +23,7 @@ from opaque_keys.edx.keys import CourseKey from common.djangoapps.util.json_request import JsonResponse from openedx.core.djangoapps.video_config.models import VideoTranscriptEnabledFlag from openedx.core.djangoapps.video_pipeline.api import update_3rd_party_transcription_service_credentials -from xmodule.video_block.transcripts_utils import Transcript, TranscriptsGenerationException # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, TranscriptsGenerationException # lint-amnesty, pylint: disable=wrong-import-order from .toggles import use_mock_video_uploads from .video_storage_handlers import TranscriptProvider diff --git a/cms/djangoapps/contentstore/utils.py b/cms/djangoapps/contentstore/utils.py index 78e41b7b18..3b263570f6 100644 --- a/cms/djangoapps/contentstore/utils.py +++ b/cms/djangoapps/contentstore/utils.py @@ -1811,7 +1811,7 @@ def get_course_videos_context(course_block, pagination_conf, course_key=None): ) from openedx.core.djangoapps.video_config.models import VideoTranscriptEnabledFlag from openedx.core.djangoapps.video_config.toggles import use_xpert_translations_component - from xmodule.video_block.transcripts_utils import Transcript # lint-amnesty, pylint: disable=wrong-import-order + from openedx.core.djangoapps.video_config.transcripts_utils import Transcript # lint-amnesty, pylint: disable=wrong-import-order from .video_storage_handlers import ( get_all_transcript_languages, diff --git a/cms/djangoapps/contentstore/views/tests/test_transcripts.py b/cms/djangoapps/contentstore/views/tests/test_transcripts.py index 61c0bd81b9..a3b70641ed 100644 --- a/cms/djangoapps/contentstore/views/tests/test_transcripts.py +++ b/cms/djangoapps/contentstore/views/tests/test_transcripts.py @@ -25,7 +25,7 @@ from xmodule.contentstore.django import contentstore # lint-amnesty, pylint: di from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order from xmodule.video_block import VideoBlock # lint-amnesty, pylint: disable=wrong-import-order -from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order GetTranscriptsFromYouTubeException, Transcript, get_video_transcript_content, @@ -981,7 +981,7 @@ class TestCheckTranscripts(BaseTranscripts): } ) - @patch('xmodule.video_block.transcripts_utils.requests.get') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.requests.get') def test_check_youtube_with_transcript_name(self, mock_get): """ Test that the transcripts are fetched correctly when the the transcript name is set @@ -1121,7 +1121,7 @@ class TestCheckTranscripts(BaseTranscripts): 'Transcripts are supported only for "video" blocks.', ) - @patch('xmodule.video_block.transcripts_utils.get_video_transcript_content') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content') def test_command_for_fallback_transcript(self, mock_get_video_transcript_content): """ Verify the command if a transcript is there in edx-val. diff --git a/cms/djangoapps/contentstore/views/transcripts_ajax.py b/cms/djangoapps/contentstore/views/transcripts_ajax.py index 9b667d9d67..26bde09035 100644 --- a/cms/djangoapps/contentstore/views/transcripts_ajax.py +++ b/cms/djangoapps/contentstore/views/transcripts_ajax.py @@ -30,7 +30,7 @@ from xmodule.contentstore.django import contentstore # lint-amnesty, pylint: di from xmodule.exceptions import NotFoundError # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.exceptions import ItemNotFoundError # lint-amnesty, pylint: disable=wrong-import-order -from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order GetTranscriptsFromYouTubeException, Transcript, TranscriptsGenerationException, diff --git a/lms/djangoapps/courseware/tests/test_video_handlers.py b/lms/djangoapps/courseware/tests/test_video_handlers.py index ef0fb86283..2e2f615ee9 100644 --- a/lms/djangoapps/courseware/tests/test_video_handlers.py +++ b/lms/djangoapps/courseware/tests/test_video_handlers.py @@ -28,7 +28,7 @@ from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disa # noinspection PyUnresolvedReferences from xmodule.tests.helpers import override_descriptor_system # pylint: disable=unused-import from xmodule.video_block import VideoBlock # lint-amnesty, pylint: disable=wrong-import-order -from xmodule.video_block.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order +from openedx.core.djangoapps.video_config.transcripts_utils import ( # lint-amnesty, pylint: disable=wrong-import-order Transcript, edxval_api, get_transcript, @@ -293,7 +293,7 @@ class TestTranscriptAvailableTranslationsDispatch(TestVideo): # lint-amnesty, p response = self.block.transcript(request=request, dispatch='available_translations') assert json.loads(response.body.decode('utf-8')) == ['uk'] - @patch('xmodule.video_block.transcripts_utils.get_video_transcript_content') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content') def test_multiple_available_translations(self, mock_get_video_transcript_content): mock_get_video_transcript_content.return_value = { 'content': json.dumps({ @@ -319,8 +319,8 @@ class TestTranscriptAvailableTranslationsDispatch(TestVideo): # lint-amnesty, p response = self.block.transcript(request=request, dispatch='available_translations') assert sorted(json.loads(response.body.decode('utf-8'))) == sorted(['en', 'uk']) - @patch('xmodule.video_block.transcripts_utils.get_video_transcript_content') - @patch('xmodule.video_block.transcripts_utils.get_available_transcript_languages') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages') @ddt.data( ( ['en', 'uk', 'ro'], @@ -396,7 +396,7 @@ class TestTranscriptAvailableTranslationsDispatch(TestVideo): # lint-amnesty, p response = self.block.transcript(request=request, dispatch='available_translations') self.assertCountEqual(json.loads(response.body.decode('utf-8')), result) - @patch('xmodule.video_block.transcripts_utils.edxval_api.get_available_transcript_languages') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_available_transcript_languages') def test_val_available_translations_feature_disabled(self, mock_get_available_transcript_languages): """ Tests available translations with val transcript languages when feature is disabled. @@ -445,7 +445,7 @@ class TestTranscriptAvailableTranslationsBumperDispatch(TestVideo): # lint-amne response = self.block.transcript(request=request, dispatch=self.dispatch) assert json.loads(response.body.decode('utf-8')) == [lang] - @patch('xmodule.video_block.transcripts_utils.get_available_transcript_languages') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages') def test_multiple_available_translations(self, mock_get_transcript_languages): """ Verify that available translations dispatch works as expected for multiple @@ -534,7 +534,7 @@ class TestTranscriptDownloadDispatch(TestVideo): # lint-amnesty, pylint: disabl get_transcript(self.block) @patch( - 'xmodule.video_block.transcripts_utils.get_transcript_for_video', + 'openedx.core.djangoapps.video_config.transcripts_utils.get_transcript_for_video', return_value=(Transcript.SRT, "塞", 'Subs!') ) def test_download_non_en_non_ascii_filename(self, __): @@ -544,7 +544,7 @@ class TestTranscriptDownloadDispatch(TestVideo): # lint-amnesty, pylint: disabl assert response.headers['Content-Type'] == 'application/x-subrip; charset=utf-8' assert response.headers['Content-Disposition'] == 'attachment; filename="en_塞.srt"' - @patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data') @patch('xmodule.video_block.get_transcript', Mock(side_effect=NotFoundError)) def test_download_fallback_transcript(self, mock_get_video_transcript_data): """ @@ -814,7 +814,7 @@ class TestTranscriptTranslationGetDispatch(TestVideo): # lint-amnesty, pylint: with store.branch_setting(ModuleStoreEnum.Branch.draft_preferred, self.course.id): store.update_item(self.course, self.user.id) - @patch('xmodule.video_block.transcripts_utils.edxval_api.get_video_transcript_data') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_video_transcript_data') @patch('xmodule.video_block.VideoBlock.translation', Mock(side_effect=NotFoundError)) @patch('xmodule.video_block.VideoBlock.get_static_transcript', Mock(return_value=Response(status=404))) def test_translation_fallback_transcript(self, mock_get_video_transcript_data): diff --git a/lms/djangoapps/courseware/tests/test_video_mongo.py b/lms/djangoapps/courseware/tests/test_video_mongo.py index b5a8646032..620cad8970 100644 --- a/lms/djangoapps/courseware/tests/test_video_mongo.py +++ b/lms/djangoapps/courseware/tests/test_video_mongo.py @@ -50,7 +50,7 @@ from xmodule.tests.helpers import override_descriptor_system # pylint: disable= from xmodule.tests.test_import import DummyModuleStoreRuntime from xmodule.tests.test_video import VideoBlockTestBase from xmodule.video_block import VideoBlock, bumper_utils, video_utils -from xmodule.video_block.transcripts_utils import Transcript, save_to_store, subs_filename +from openedx.core.djangoapps.video_config.transcripts_utils import Transcript, save_to_store, subs_filename from xmodule.video_block.video_block import EXPORT_IMPORT_COURSE_DIR, EXPORT_IMPORT_STATIC_DIR from xmodule.x_module import PUBLIC_VIEW, STUDENT_VIEW @@ -1755,7 +1755,7 @@ class TestVideoBlockStudentViewJson(BaseTestVideoXBlock, CacheIsolationTestCase) ({'uk': 1, 'de': 1}, 'en-subs', ['de', 'en'], ['en', 'uk', 'de']), ) @ddt.unpack - @patch('xmodule.video_block.transcripts_utils.edxval_api.get_available_transcript_languages') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.edxval_api.get_available_transcript_languages') def test_student_view_with_val_transcripts_enabled(self, transcripts, english_sub, val_transcripts, expected_transcripts, mock_get_transcript_languages): """ @@ -1950,7 +1950,7 @@ class VideoBlockTest(TestCase, VideoBlockTestBase): expected = etree.XML(expected_str, parser=parser) self.assertXmlEqual(expected, actual) - @patch('xmodule.video_block.transcripts_utils.get_video_ids_info') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_ids_info') def test_export_no_video_ids(self, mock_get_video_ids_info): """ Tests export when there is no video id. `export_to_xml` only works in case of video id. diff --git a/openedx/core/djangoapps/content_libraries/api/libraries.py b/openedx/core/djangoapps/content_libraries/api/libraries.py index 66281addb6..bb4bde44ee 100644 --- a/openedx/core/djangoapps/content_libraries/api/libraries.py +++ b/openedx/core/djangoapps/content_libraries/api/libraries.py @@ -701,6 +701,7 @@ def get_allowed_block_types(library_key: LibraryLocatorV2): # pylint: disable=u for block_type in enabled_block_types: # TODO: unify the contentstore helper with the xblock.api version of # xblock_type_display_name + # https://github.com/openedx/edx-platform/issues/37637 display_name = studio_helpers.xblock_type_display_name(block_type, None) # For now as a crude heuristic, we exclude blocks that don't have a display_name if display_name: diff --git a/xmodule/tests/test_transcripts_utils.py b/openedx/core/djangoapps/video_config/tests/test_transcripts_utils.py similarity index 98% rename from xmodule/tests/test_transcripts_utils.py rename to openedx/core/djangoapps/video_config/tests/test_transcripts_utils.py index bb4141f06c..273d31444f 100644 --- a/xmodule/tests/test_transcripts_utils.py +++ b/openedx/core/djangoapps/video_config/tests/test_transcripts_utils.py @@ -11,7 +11,7 @@ from unittest import mock, TestCase import ddt -from ..video_block.transcripts_utils import get_transcript_link_from_youtube +from openedx.core.djangoapps.video_config.transcripts_utils import get_transcript_link_from_youtube YOUTUBE_VIDEO_ID = "z-LoKnweV6w" diff --git a/xmodule/video_block/transcripts_utils.py b/openedx/core/djangoapps/video_config/transcripts_utils.py similarity index 99% rename from xmodule/video_block/transcripts_utils.py rename to openedx/core/djangoapps/video_config/transcripts_utils.py index 1e2204d1da..cbd0a0b31b 100644 --- a/xmodule/video_block/transcripts_utils.py +++ b/openedx/core/djangoapps/video_config/transcripts_utils.py @@ -28,7 +28,7 @@ from xmodule.contentstore.content import StaticContent from xmodule.contentstore.django import contentstore from xmodule.exceptions import NotFoundError -from .bumper_utils import get_bumper_settings +from xmodule.video_block.bumper_utils import get_bumper_settings try: from edxval import api as edxval_api diff --git a/setup.cfg b/setup.cfg index e4419bd149..74ae82786e 100644 --- a/setup.cfg +++ b/setup.cfg @@ -160,7 +160,15 @@ ignore_imports = # -> openedx.features.enterprise_support.utils openedx.features.enterprise_support.utils -> lms.djangoapps.branding.api cms.djangoapps.contentstore.rest_api.v1.views.settings -> lms.djangoapps.certificates.api - + # We are ignoring this existing import until we can refactor contenstore/helpers. + # https://github.com/openedx/edx-platform/issues/37637 + openedx.core.djangoapps.content_libraries.api.libraries -> cms.djangoapps.contentstore.helpers + openedx.core.djangoapps.content_libraries.api.blocks -> cms.djangoapps.contentstore.helpers + openedx.core.djangoapps.content_staging.serializers -> cms.djangoapps.contentstore.helpers + # These imports will become OK once we move content_libraries into CMS + # https://github.com/openedx/edx-platform/issues/33428 + openedx.core.djangoapps.content_libraries.permissions -> cms.djangoapps.course_creators.views + openedx.core.djangoapps.content_libraries.tasks -> cms.djangoapps.contentstore.storage [importlinter:contract:2] name = Do not depend on non-public API of isolated apps. @@ -207,7 +215,8 @@ ignore_imports = **.tests.** -> ** # FIXME: the exceptions below are from before we added this import linting rule. Should refactor to eliminate them. - # In particular, the contentstore.helpers module is too big and has too many imports - split it up? + # In particular, the contentstore.helpers module is too big and has too many imports + # See https://github.com/openedx/edx-platform/issues/37637 # The CSV export hard-codes support for courses and libraries. Refactor to do something like learning_context.get_children() openedx.core.djangoapps.content_tagging.helpers.objecttag_export_helpers -> openedx.core.djangoapps.content_libraries.api diff --git a/xmodule/tests/test_video.py b/xmodule/tests/test_video.py index 39d0abf2c2..1c32603fe7 100644 --- a/xmodule/tests/test_video.py +++ b/xmodule/tests/test_video.py @@ -36,7 +36,7 @@ from xblock.fields import ScopeIds from xmodule.tests import get_test_descriptor_system from xmodule.validation import StudioValidationMessage from xmodule.video_block import EXPORT_IMPORT_STATIC_DIR, VideoBlock, create_youtube_string -from xmodule.video_block.transcripts_utils import save_to_store +from openedx.core.djangoapps.video_config.transcripts_utils import save_to_store from xblock.core import XBlockAside from xmodule.modulestore.tests.test_asides import AsideTestType @@ -945,9 +945,10 @@ class VideoBlockStudentViewDataTestCase(unittest.TestCase): assert student_view_data == expected_student_view_data @patch('xmodule.video_block.video_block.HLSPlaybackEnabledFlag.feature_enabled', Mock(return_value=True)) - @patch('xmodule.video_block.transcripts_utils.get_available_transcript_languages', Mock(return_value=['es'])) + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_available_transcript_languages', + Mock(return_value=['es'])) @patch('edxval.api.get_video_info_for_course_and_profiles', Mock(return_value={})) - @patch('xmodule.video_block.transcripts_utils.get_video_transcript_content') + @patch('openedx.core.djangoapps.video_config.transcripts_utils.get_video_transcript_content') @patch('edxval.api.get_video_info') def test_student_view_data_with_hls_flag(self, mock_get_video_info, mock_get_video_transcript_content): mock_get_video_info.return_value = { diff --git a/xmodule/video_block/__init__.py b/xmodule/video_block/__init__.py index e5ade37c1b..0bb52cb9cb 100644 --- a/xmodule/video_block/__init__.py +++ b/xmodule/video_block/__init__.py @@ -3,6 +3,6 @@ Container for video block and its utils. """ from .bumper_utils import * -from .transcripts_utils import * # lint-amnesty, pylint: disable=redefined-builtin +from openedx.core.djangoapps.video_config.transcripts_utils import * # lint-amnesty, pylint: disable=redefined-builtin from .video_block import * from .video_utils import * diff --git a/xmodule/video_block/video_block.py b/xmodule/video_block/video_block.py index f2c7182832..91448e2a47 100644 --- a/xmodule/video_block/video_block.py +++ b/xmodule/video_block/video_block.py @@ -52,7 +52,7 @@ from xmodule.x_module import ( ) from xmodule.xml_block import XmlMixin, deserialize_field, is_pointer_tag, name_to_pathname from .bumper_utils import bumperize -from .transcripts_utils import ( +from openedx.core.djangoapps.video_config.transcripts_utils import ( Transcript, VideoTranscriptsMixin, clean_video_id, diff --git a/xmodule/video_block/video_handlers.py b/xmodule/video_block/video_handlers.py index 97f40ab277..ea35736414 100644 --- a/xmodule/video_block/video_handlers.py +++ b/xmodule/video_block/video_handlers.py @@ -22,7 +22,7 @@ from xmodule.exceptions import NotFoundError from xmodule.fields import RelativeTime from openedx.core.djangoapps.content_libraries import api as lib_api -from .transcripts_utils import ( +from openedx.core.djangoapps.video_config.transcripts_utils import ( Transcript, TranscriptException, TranscriptsGenerationException,