Fix crashes in yt_video_metadata

- yt_video_metadata returned a generic non-json-api-friendly 500 error
  when called on a non-youtube video
- load_metadata_from_youtube was crashing when called from the xblock
  yt_video_metadata endpoint. It passes a webob request, which has a
  different api for retrieving the http referer.
This commit is contained in:
Samuel Walladge
2020-06-15 17:29:57 +09:30
parent 4a3f2e33cd
commit 4da0c64cc3
2 changed files with 14 additions and 1 deletions

View File

@@ -391,6 +391,10 @@ class VideoStudentViewHandlers(object):
runtime uses a similar REST API that's not an XBlock handler.
"""
from lms.djangoapps.courseware.views.views import load_metadata_from_youtube
if not self.youtube_id_1_0:
# TODO: more informational response to explain that yt_video_metadata not supported for non-youtube videos.
return Response('{}', status=400)
metadata, status_code = load_metadata_from_youtube(video_id=self.youtube_id_1_0, request=request)
response = Response(json.dumps(metadata), status=status_code)
response.content_type = 'application/json'

View File

@@ -308,7 +308,16 @@ def load_metadata_from_youtube(video_id, request):
yt_timeout = settings.YOUTUBE.get('TEST_TIMEOUT', 1500) / 1000 # converting milli seconds to seconds
headers = {}
http_referer = request.META.get('HTTP_REFERER')
http_referer = None
try:
# This raises an attribute error if called from the xblock yt_video_metadata handler, which passes
# a webob request instead of a django request.
http_referer = request.META.get('HTTP_REFERER')
except AttributeError:
# So here, let's assume it's a webob request and access the referer the webob way.
http_referer = request.referer
if http_referer:
headers['Referer'] = http_referer