Merge pull request #23910 from open-craft/samuel/fix-get-video-subs
SE-2589 fix AttributeError: 'LibraryLocatorV2' object has no attribute 'make_asset_key'
This commit is contained in:
@@ -784,49 +784,6 @@ class VideoTranscriptsMixin(object):
|
||||
# to clean redundant language codes.
|
||||
return list(set(translations))
|
||||
|
||||
def get_transcript(self, transcripts, transcript_format='srt', lang=None):
|
||||
"""
|
||||
Returns transcript, filename and MIME type.
|
||||
|
||||
transcripts (dict): A dict with all transcripts and a sub.
|
||||
|
||||
Raises:
|
||||
- NotFoundError if cannot find transcript file in storage.
|
||||
- ValueError if transcript file is empty or incorrect JSON.
|
||||
- KeyError if transcript file has incorrect format.
|
||||
|
||||
If language is 'en', self.sub should be correct subtitles name.
|
||||
If language is 'en', but if self.sub is not defined, this means that we
|
||||
should search for video name in order to get proper transcript (old style courses).
|
||||
If language is not 'en', give back transcript in proper language and format.
|
||||
"""
|
||||
if not lang:
|
||||
lang = self.get_default_transcript_language(transcripts)
|
||||
|
||||
sub, other_lang = transcripts["sub"], transcripts["transcripts"]
|
||||
if lang == 'en':
|
||||
if sub: # HTML5 case and (Youtube case for new style videos)
|
||||
transcript_name = sub
|
||||
elif self.youtube_id_1_0: # old courses
|
||||
transcript_name = self.youtube_id_1_0
|
||||
else:
|
||||
log.debug("No subtitles for 'en' language")
|
||||
raise ValueError
|
||||
|
||||
data = Transcript.asset(self.location, transcript_name, lang).data.decode('utf-8')
|
||||
filename = u'{}.{}'.format(transcript_name, transcript_format)
|
||||
content = Transcript.convert(data, 'sjson', transcript_format)
|
||||
else:
|
||||
data = Transcript.asset(self.location, None, None, other_lang[lang]).data.decode('utf-8')
|
||||
filename = u'{}.{}'.format(os.path.splitext(other_lang[lang])[0], transcript_format)
|
||||
content = Transcript.convert(data, 'srt', transcript_format)
|
||||
|
||||
if not content:
|
||||
log.debug('no subtitles produced in get_transcript')
|
||||
raise ValueError
|
||||
|
||||
return content, filename, Transcript.mime_types[transcript_format]
|
||||
|
||||
def get_default_transcript_language(self, transcripts):
|
||||
"""
|
||||
Returns the default transcript language for this video module.
|
||||
@@ -910,7 +867,10 @@ def get_transcript_from_val(edx_video_id, lang=None, output_format=Transcript.SR
|
||||
|
||||
def get_transcript_for_video(video_location, subs_id, file_name, language):
|
||||
"""
|
||||
Get video transcript from content store.
|
||||
Get video transcript from content store. This is a lower level function and is used by
|
||||
`get_transcript_from_contentstore`. Prefer that function instead where possible. If you
|
||||
need to support getting transcripts from VAL or Blockstore as well, use the `get_transcript`
|
||||
function instead.
|
||||
|
||||
NOTE: Transcripts can be searched from content store by two ways:
|
||||
1. by an id(a.k.a subs_id) which will be used to construct transcript filename
|
||||
|
||||
@@ -56,7 +56,7 @@ from .transcripts_utils import (
|
||||
VideoTranscriptsMixin,
|
||||
clean_video_id,
|
||||
get_html5_ids,
|
||||
get_transcript_for_video,
|
||||
get_transcript,
|
||||
subs_filename
|
||||
)
|
||||
from .video_handlers import VideoStudentViewHandlers, VideoStudioViewHandlers
|
||||
@@ -593,12 +593,7 @@ class VideoBlock(
|
||||
possible_sub_ids = [self.sub, self.youtube_id_1_0] + get_html5_ids(self.html5_sources)
|
||||
for sub_id in possible_sub_ids:
|
||||
try:
|
||||
get_transcript_for_video(
|
||||
self.location,
|
||||
subs_id=sub_id,
|
||||
file_name=sub_id,
|
||||
language=u'en'
|
||||
)
|
||||
_, sub_id, _ = get_transcript(self, lang=u'en', output_format=Transcript.TXT)
|
||||
transcripts_info['transcripts'] = dict(transcripts_info['transcripts'], en=sub_id)
|
||||
break
|
||||
except NotFoundError:
|
||||
@@ -1029,10 +1024,7 @@ class VideoBlock(
|
||||
def _update_transcript_for_index(language=None):
|
||||
""" Find video transcript - if not found, don't update index """
|
||||
try:
|
||||
transcripts = self.get_transcripts_info()
|
||||
transcript = self.get_transcript(
|
||||
transcripts, transcript_format='txt', lang=language
|
||||
)[0].replace("\n", " ")
|
||||
transcript = get_transcript(self, lang=language, output_format=Transcript.TXT)[0].replace("\n", " ")
|
||||
transcript_index_name = "transcript_{}".format(language if language else self.transcript_language)
|
||||
video_body.update({transcript_index_name: transcript})
|
||||
except NotFoundError:
|
||||
|
||||
Reference in New Issue
Block a user