Skip to content

Commit

Permalink
feat: add endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
BrandonHBodine committed Sep 6, 2023
1 parent 12ba586 commit 4d1be23
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
44 changes: 44 additions & 0 deletions edxval/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -733,6 +733,50 @@ 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',
'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.
Expand Down
3 changes: 3 additions & 0 deletions edxval/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
path('videos/missing-hls/', views.HLSMissingVideoView.as_view(),
name='hls-missing-video'
),
path('videos/video-transcripts/<str:course_id>/', views.CourseTranscriptsDetailView.as_view(),
name='video-transcripts'
),
path('videos/video-transcripts/create/', views.VideoTranscriptView.as_view(),
name='create-video-transcript'
),
Expand Down
20 changes: 19 additions & 1 deletion edxval/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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.
Expand Down

0 comments on commit 4d1be23

Please sign in to comment.