diff --git a/edxval/api.py b/edxval/api.py index f631693c..c06afa10 100644 --- a/edxval/api.py +++ b/edxval/api.py @@ -733,6 +733,51 @@ def get_videos_for_course(course_id, sort_field=None, sort_dir=SortDirection.asc ) +def get_transcript_details_for_course(course_id): + """ + Returns an iterator of video transcript details given a course id. + + Args: + course_id (String) + + Returns: + (dict): Returns all the edx_video_id's and related transcript details for a course + { + 'edx_video_id': { + 'lang_code': { + 'provider': 'What the provider is', + 'content': 'Content of the transcript', + 'file_format': 'file format', + 'url': 'location of the file', + 'name': 'name of the file', + 'size': size of the file + } + } + """ + course_transcripts_data = {} + + course_videos = CourseVideo.objects.filter(course_id=course_id).select_related('video') + for course_video in course_videos: + + edx_video_id = course_video.video.edx_video_id + transcript_data = {} + + video_transcripts = VideoTranscript.objects.filter(video=course_video.video) + for video_transcript in video_transcripts: + transcript_data[video_transcript.language_code] = { + 'provider': video_transcript.provider, + 'content': video_transcript.transcript.file.read(), + 'file_format': video_transcript.file_format, + 'url': video_transcript.transcript.url, + 'name': video_transcript.transcript.name, + 'size': video_transcript.transcript.size, + } + + course_transcripts_data[edx_video_id] = transcript_data + + return course_transcripts_data + + def remove_video_for_course(course_id, edx_video_id): """ Soft deletes video for particular course. diff --git a/edxval/urls.py b/edxval/urls.py index cd48c945..e020ebd0 100644 --- a/edxval/urls.py +++ b/edxval/urls.py @@ -19,6 +19,9 @@ path('videos/missing-hls/', views.HLSMissingVideoView.as_view(), name='hls-missing-video' ), + path('videos/course-transcripts//', views.CourseTranscriptsDetailView.as_view(), + name='course-transcripts' + ), path('videos/video-transcripts/create/', views.VideoTranscriptView.as_view(), name='create-video-transcript' ), diff --git a/edxval/views.py b/edxval/views.py index 1dd6eda3..0ef4a606 100644 --- a/edxval/views.py +++ b/edxval/views.py @@ -14,7 +14,7 @@ from rest_framework.response import Response from rest_framework.views import APIView -from edxval.api import create_or_update_video_transcript +from edxval.api import create_or_update_video_transcript, get_transcript_details_for_course from edxval.models import ( LIST_MAX_ITEMS, CourseVideo, @@ -175,6 +175,24 @@ def post(self, request): return response +class CourseTranscriptsDetailView(APIView): + """ + A view to get the details for all the course transcripts related to a course_id. + """ + authentication_classes = (JwtAuthentication, SessionAuthentication) + + def get(self, _request, course_id): + """ + Returns all transcript data for a course when given a course_id. + """ + course_data = get_transcript_details_for_course(course_id) + + if not course_data: + return Response(status=status.HTTP_400_BAD_REQUEST, data={'message': 'course_id param required'}) + + return Response(status=status.HTTP_200_OK, data=course_data) + + class VideoStatusView(APIView): """ A Video View to update the status of a video.