Skip to content

Commit a738d26

Browse files
committed
fix: respond with new edx_video_id if created by transcript upload
1 parent 1c7ade9 commit a738d26

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

openedx/core/djangoapps/video_config/services.py

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -116,34 +116,36 @@ def upload_transcript(
116116
self,
117117
*,
118118
video_block: VideoBlock,
119-
edx_video_id: str | None,
120-
transcript_file: File,
121119
language_code: str,
122-
new_language_code: str,
120+
new_language_code: str | None,
121+
transcript_file: File,
122+
edx_video_id: str | None,
123123
) -> None:
124124
"""
125125
Store a transcript, however the runtime prefers to.
126126
127+
Mutates:
128+
* video_block.transcripts
129+
* video_block.edx_video_id, iff a new video is created in edx-val.
130+
127131
Can raise:
128132
* UnicodeDecodeError
129133
* TranscriptsGenerationException
130134
"""
131-
edx_video_id = clean_video_id(edx_video_id)
132135
is_library = isinstance(video_block.usage_key.context_key, LibraryLocatorV2)
136+
content: bytes = transcript_file.read()
133137
if is_library:
138+
# Save transcript as static asset in Learning Core if is a library component
134139
filename = f'transcript-{new_language_code}.srt'
140+
add_library_block_static_asset_file(video_block.usage_key, f"static/{filename}", content)
135141
else:
142+
edx_video_id = clean_video_id(edx_video_id)
136143
if not edx_video_id:
137144
# Back-populate the video ID for an external video.
138145
# pylint: disable=attribute-defined-outside-init
139-
video_block.edx_video_id = edx_video_id = create_external_video(display_name='external video')
146+
edx_video_id = create_external_video(display_name='external video')
147+
video_block.edx_video_id = edx_video_id
140148
filename = f'{edx_video_id}-{new_language_code}.srt'
141-
142-
content = transcript_file.read()
143-
if is_library:
144-
# Save transcript as static asset in Learning Core if is a library component
145-
add_library_block_static_asset_file(video_block.usage_key, f"static/{filename}", content)
146-
else:
147149
# Convert SRT transcript into an SJSON format and upload it to S3 if a course component
148150
sjson_subs = Transcript.convert(
149151
content=content.decode('utf-8'),
@@ -155,7 +157,7 @@ def upload_transcript(
155157
language_code=language_code,
156158
metadata={
157159
'file_format': Transcript.SJSON,
158-
'language_code': new_language_code
160+
'language_code': new_language_code,
159161
},
160162
file_data=ContentFile(sjson_subs),
161163
)

xmodule/video_block/video_handlers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -519,18 +519,24 @@ def _studio_transcript_upload(self, request):
519519
error = self.validate_transcript_upload_data(data=request.POST)
520520
if error:
521521
return Response(json={'error': error}, status=400)
522-
edx_video_id = request.POST['edx_video_id']
522+
edx_video_id = (request.POST['edx_video_id'] or "").strip()
523523
language_code = request.POST['language_code']
524+
new_language_code = request.POST['new_language_code']
524525
try:
525526
video_config_service.upload_transcript(
526-
video_block=self,
527+
video_block=self, # NOTE: .edx_video_id and .transcripts may get mutated
527528
edx_video_id=edx_video_id,
528529
language_code=language_code,
530+
new_language_code=new_language_code,
529531
transcript_file=request.POST['file'].file,
530-
new_language_code=request.POST['new_language_code'],
531532
)
532533
return Response(
533-
json.dumps({"edx_video_id": edx_video_id, "language_code": language_code}),
534+
json.dumps(
535+
{
536+
"edx_video_id": edx_video_id or self.edx_video_id,
537+
"language_code": new_language_code,
538+
}
539+
),
534540
status=201,
535541
)
536542
except (TranscriptsGenerationException, UnicodeDecodeError):
@@ -556,7 +562,7 @@ def _studio_transcript_delete(self, request):
556562
return Response(status=400)
557563
video_config_service.delete_transcript(
558564
video_block=self,
559-
edx_video_id=request_data['edx_video_id'] or self.edx_video_id,
565+
edx_video_id=request_data['edx_video_id'],
560566
language_code=request_data['lang'],
561567
)
562568
return Response(status=200)

0 commit comments

Comments
 (0)