feat: update youtube transcript fetch to allow all languages (#34436)
* feat: allow all languages * feat: add youtube transcript import functions as drf
This commit is contained in:
@@ -4,5 +4,5 @@ Serializers for v0 contentstore API.
|
||||
from .advanced_settings import AdvancedSettingsFieldSerializer, CourseAdvancedSettingsSerializer
|
||||
from .assets import AssetSerializer
|
||||
from .tabs import CourseTabSerializer, CourseTabUpdateSerializer, TabIDLocatorSerializer
|
||||
from .transcripts import TranscriptSerializer
|
||||
from .transcripts import TranscriptSerializer, YoutubeTranscriptCheckSerializer, YoutubeTranscriptUploadSerializer
|
||||
from .xblock import XblockSerializer
|
||||
|
||||
@@ -13,3 +13,28 @@ class TranscriptSerializer(StrictSerializer):
|
||||
edx_video_id = serializers.CharField()
|
||||
language_code = serializers.CharField(required=False, allow_null=True)
|
||||
new_language_code = serializers.CharField(required=False, allow_null=True)
|
||||
|
||||
|
||||
class YoutubeTranscriptCheckSerializer(StrictSerializer):
|
||||
"""
|
||||
Strict Serializer for YouTube transcripts check
|
||||
"""
|
||||
html5_local = serializers.ListField(
|
||||
child=serializers.CharField()
|
||||
)
|
||||
html5_equal = serializers.BooleanField()
|
||||
is_youtube_mode = serializers.BooleanField()
|
||||
youtube_local = serializers.BooleanField()
|
||||
youtube_server = serializers.BooleanField()
|
||||
youtube_diff = serializers.BooleanField()
|
||||
current_item_subs = serializers.ListField(required=False, allow_null=True)
|
||||
status = serializers.CharField()
|
||||
command = serializers.CharField()
|
||||
|
||||
|
||||
class YoutubeTranscriptUploadSerializer(StrictSerializer):
|
||||
"""
|
||||
Strict Serializer for YouTube transcripts upload
|
||||
"""
|
||||
edx_video_id = serializers.CharField()
|
||||
status = serializers.CharField()
|
||||
|
||||
@@ -5,9 +5,16 @@ from django.urls import re_path, path
|
||||
|
||||
from openedx.core.constants import COURSE_ID_PATTERN
|
||||
|
||||
from .views import AdvancedCourseSettingsView, CourseTabSettingsView, CourseTabListView, CourseTabReorderView
|
||||
from .views import (
|
||||
AdvancedCourseSettingsView,
|
||||
CourseTabSettingsView,
|
||||
CourseTabListView,
|
||||
CourseTabReorderView,
|
||||
TranscriptView,
|
||||
YoutubeTranscriptCheckView,
|
||||
YoutubeTranscriptUploadView,
|
||||
)
|
||||
from .views import assets
|
||||
from .views import transcripts
|
||||
from .views import authoring_videos
|
||||
from .views import xblock
|
||||
|
||||
@@ -68,7 +75,7 @@ urlpatterns = [
|
||||
),
|
||||
re_path(
|
||||
fr'^video_transcripts/{settings.COURSE_ID_PATTERN}$',
|
||||
transcripts.TranscriptView.as_view(), name='cms_api_video_transcripts'
|
||||
TranscriptView.as_view(), name='cms_api_video_transcripts'
|
||||
),
|
||||
re_path(
|
||||
fr'^xblock/{settings.COURSE_ID_PATTERN}$',
|
||||
@@ -78,4 +85,12 @@ urlpatterns = [
|
||||
fr'^xblock/{settings.COURSE_ID_PATTERN}/{settings.USAGE_KEY_PATTERN}$',
|
||||
xblock.XblockView.as_view(), name='cms_api_xblock'
|
||||
),
|
||||
re_path(
|
||||
fr'^youtube_transcripts/{settings.COURSE_ID_PATTERN}/check?$',
|
||||
YoutubeTranscriptCheckView.as_view(), name='cms_api_youtube_transcripts_check'
|
||||
),
|
||||
re_path(
|
||||
fr'^youtube_transcripts/{settings.COURSE_ID_PATTERN}/upload?$',
|
||||
YoutubeTranscriptUploadView.as_view(), name='cms_api_youtube_transcripts_upload'
|
||||
),
|
||||
]
|
||||
|
||||
@@ -3,3 +3,4 @@ Views for v0 contentstore API.
|
||||
"""
|
||||
from .advanced_settings import AdvancedCourseSettingsView
|
||||
from .tabs import CourseTabSettingsView, CourseTabListView, CourseTabReorderView
|
||||
from .transcripts import TranscriptView, YoutubeTranscriptCheckView, YoutubeTranscriptUploadView
|
||||
|
||||
@@ -14,14 +14,14 @@ from openedx.core.lib.api.view_utils import DeveloperErrorViewMixin, view_auth_c
|
||||
from common.djangoapps.util.json_request import expect_json_in_class_view
|
||||
|
||||
from cms.djangoapps.contentstore.api import course_author_access_required
|
||||
|
||||
from cms.djangoapps.contentstore.views.transcripts_ajax import check_transcripts, replace_transcripts
|
||||
from cms.djangoapps.contentstore.transcript_storage_handlers import (
|
||||
upload_transcript,
|
||||
delete_video_transcript_or_404,
|
||||
handle_transcript_download,
|
||||
)
|
||||
import cms.djangoapps.contentstore.toggles as contentstore_toggles
|
||||
from ..serializers import TranscriptSerializer
|
||||
from ..serializers import TranscriptSerializer, YoutubeTranscriptCheckSerializer, YoutubeTranscriptUploadSerializer
|
||||
from rest_framework.parsers import (MultiPartParser, FormParser)
|
||||
from openedx.core.lib.api.parsers import TypedFileUploadParser
|
||||
|
||||
@@ -68,3 +68,50 @@ class TranscriptView(DeveloperErrorViewMixin, CreateAPIView, RetrieveAPIView, De
|
||||
"""
|
||||
|
||||
return delete_video_transcript_or_404(request)
|
||||
|
||||
|
||||
@view_auth_classes()
|
||||
class YoutubeTranscriptCheckView(DeveloperErrorViewMixin, RetrieveAPIView):
|
||||
"""
|
||||
public rest API endpoints for the CMS API YouTube transcripts.
|
||||
youtube_id: required argument, needed to authorize course authors and identify the video.
|
||||
edx_video_id: required argument, needed to identify the transcript.
|
||||
xblock_id: required argument, needed to identify the transcript.
|
||||
"""
|
||||
serializer_class = YoutubeTranscriptCheckSerializer
|
||||
parser_classes = (MultiPartParser, FormParser, TypedFileUploadParser)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not toggles.use_studio_content_api():
|
||||
raise Http404
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
@course_author_access_required
|
||||
def retrieve(self, request, course_key_string): # pylint: disable=arguments-differ
|
||||
"""
|
||||
Get the status of youtube transcripts for a given youtube video
|
||||
"""
|
||||
return check_transcripts(request)
|
||||
|
||||
|
||||
@view_auth_classes()
|
||||
class YoutubeTranscriptUploadView(DeveloperErrorViewMixin, RetrieveAPIView):
|
||||
"""
|
||||
public rest API endpoints for the CMS API YouTube transcripts.
|
||||
youtube_id: required argument, needed to authorize course authors and identify the video.
|
||||
xblock_id: required argument, needed to identify the transcript.
|
||||
"""
|
||||
serializer_class = YoutubeTranscriptUploadSerializer
|
||||
parser_classes = (MultiPartParser, FormParser, TypedFileUploadParser)
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
if not toggles.use_studio_content_api():
|
||||
raise Http404
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
@course_author_access_required
|
||||
def retrieve(self, request, course_key_string): # pylint: disable=arguments-differ
|
||||
"""
|
||||
Get the youtube transcripts for a give youtube video and add them to video block
|
||||
"""
|
||||
return replace_transcripts(request)
|
||||
|
||||
Reference in New Issue
Block a user