diff --git a/common/lib/xmodule/xmodule/video_module/video_handlers.py b/common/lib/xmodule/xmodule/video_module/video_handlers.py index 7acab232c14666df227f8f0faaf99dbe1ef21fd4..037ec75e00dc17e4ff756119acc325a2bc6bd476 100644 --- a/common/lib/xmodule/xmodule/video_module/video_handlers.py +++ b/common/lib/xmodule/xmodule/video_module/video_handlers.py @@ -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' diff --git a/lms/djangoapps/courseware/views/views.py b/lms/djangoapps/courseware/views/views.py index 45c7462cd3d99c29b035eaaeccdc2d4c43769919..3c6c2958d5d761f934ac97e71488123d412d6fac 100644 --- a/lms/djangoapps/courseware/views/views.py +++ b/lms/djangoapps/courseware/views/views.py @@ -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