From a06c9b17be1646892de19f76f7154c6190131376 Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Wed, 19 Apr 2023 19:20:05 +0530 Subject: [PATCH 1/2] fix: update transcripts field in video on upload --- cms/djangoapps/contentstore/views/transcripts_ajax.py | 2 ++ lms/djangoapps/courseware/tests/test_video_handlers.py | 4 +++- xmodule/video_block/video_handlers.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/cms/djangoapps/contentstore/views/transcripts_ajax.py b/cms/djangoapps/contentstore/views/transcripts_ajax.py index d8a091848f..fd272e2350 100644 --- a/cms/djangoapps/contentstore/views/transcripts_ajax.py +++ b/cms/djangoapps/contentstore/views/transcripts_ajax.py @@ -231,6 +231,8 @@ def upload_transcripts(request): file_data=ContentFile(sjson_subs), ) + video.transcripts['en'] = f"{edx_video_id}-en.srt" + video.save_with_metadata(request.user) if transcript_created is None: response = JsonResponse({'status': 'Invalid Video ID'}, status=400) diff --git a/lms/djangoapps/courseware/tests/test_video_handlers.py b/lms/djangoapps/courseware/tests/test_video_handlers.py index 9ae07c42ef..dd53d4262f 100644 --- a/lms/djangoapps/courseware/tests/test_video_handlers.py +++ b/lms/djangoapps/courseware/tests/test_video_handlers.py @@ -981,7 +981,7 @@ class TestStudioTranscriptTranslationPostDispatch(TestVideo): # lint-amnesty, p assert response.status == '201 Created' response = json.loads(response.text) assert response['language_code'], 'uk' - self.assertDictEqual(self.block.transcripts, {}) + self.assertDictEqual(self.block.transcripts, {'uk': f'{response["edx_video_id"]}-uk.srt'}) assert edxval_api.get_video_transcript_data(video_id=response['edx_video_id'], language_code='uk') def test_studio_transcript_post_bad_content(self): @@ -999,6 +999,8 @@ class TestStudioTranscriptTranslationPostDispatch(TestVideo): # lint-amnesty, p response = self.block.studio_transcript(request=request, dispatch="translation") assert response.status_code == 400 assert response.json['error'] == 'There is a problem with this transcript file. Try to upload a different file.' + # transcripts fields should not be updated + self.assertDictEqual(self.block.transcripts, {}) @ddt.ddt diff --git a/xmodule/video_block/video_handlers.py b/xmodule/video_block/video_handlers.py index 7d9bfc36cb..c75171151b 100644 --- a/xmodule/video_block/video_handlers.py +++ b/xmodule/video_block/video_handlers.py @@ -473,7 +473,6 @@ class VideoStudioViewHandlers: `POST`: Upload srt file. Check possibility of generation of proper sjson files. For now, it works only for self.transcripts, not for `en`. - Do not update self.transcripts, as fields are updated on save in Studio. `GET: Return filename from storage. SRT format is sent back on success. Filename should be in GET dict. @@ -529,6 +528,7 @@ class VideoStudioViewHandlers: 'edx_video_id': edx_video_id, 'language_code': new_language_code } + self.transcripts[new_language_code] = f'{edx_video_id}-{new_language_code}.srt' response = Response(json.dumps(payload), status=201) except (TranscriptsGenerationException, UnicodeDecodeError): response = Response( From 1836305771b40b080ddc6f908eb615b5a29fb110 Mon Sep 17 00:00:00 2001 From: Navin Karkera Date: Mon, 24 Apr 2023 20:03:33 +0530 Subject: [PATCH 2/2] test: check transcripts when uploaded via api --- cms/djangoapps/contentstore/views/tests/test_transcripts.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cms/djangoapps/contentstore/views/tests/test_transcripts.py b/cms/djangoapps/contentstore/views/tests/test_transcripts.py index 5d18c76cad..619cf6b775 100644 --- a/cms/djangoapps/contentstore/views/tests/test_transcripts.py +++ b/cms/djangoapps/contentstore/views/tests/test_transcripts.py @@ -256,6 +256,7 @@ class TestUploadTranscripts(BaseTranscripts): expected_edx_video_id = edx_video_id if edx_video_id else json_response['edx_video_id'] video = modulestore().get_item(self.video_usage_key) self.assertEqual(video.edx_video_id, expected_edx_video_id) + self.assertDictEqual(video.transcripts, {'en': f'{expected_edx_video_id}-en.srt'}) # Verify transcript content actual_transcript = get_video_transcript_content(video.edx_video_id, language_code='en') @@ -319,6 +320,8 @@ class TestUploadTranscripts(BaseTranscripts): expected_status_code=400, expected_message='There is a problem with this transcript file. Try to upload a different file.' ) + video = modulestore().get_item(self.video_usage_key) + self.assertDictEqual(video.transcripts, {}) def test_transcript_upload_unknown_category(self): """