From c0644dc9841e45990082002d6645e831d95fdc18 Mon Sep 17 00:00:00 2001
From: Carson Gee <x@carsongee.com>
Date: Wed, 16 Apr 2014 11:30:27 -0400
Subject: [PATCH] Only do static transcript redirect for english language, and don't offer static redirect for download Rename video test to real YouTube-ID

---
 common/lib/xmodule/xmodule/video_module/video_handlers.py | 31 +++++++++++++++++++------------
 lms/djangoapps/courseware/tests/test_video_handlers.py    | 34 +++++++---------------------------
 2 files changed, 26 insertions(+), 39 deletions(-)

diff --git a/common/lib/xmodule/xmodule/video_module/video_handlers.py b/common/lib/xmodule/xmodule/video_module/video_handlers.py
index 722cefa..a516553 100644
--- a/common/lib/xmodule/xmodule/video_module/video_handlers.py
+++ b/common/lib/xmodule/xmodule/video_module/video_handlers.py
@@ -175,15 +175,21 @@ class VideoStudentViewHandlers(object):
 
     def get_static_transcript(self, request):
         """
-        Return URL for static transcript if it isn't available in the content store
+        Courses that are imported with the --nostatic flag do not show
+        transcripts/captions properly even if those captions are stored inside
+        their static folder. This adds a last resort method of redirecting to
+        the static asset path of the course if the transcript can't be found
+        inside the contentstore and the course has the static_asset_path field
+        set.
         """
-        # Try to return static redirect to the transcript as a last
-        # resort, but return 404 if we don't
         response = Response(status=404)
-        vid_id = request.GET.get('videoId', None)
+        # Only do redirect for English
+        if not self.transcript_language == 'en':
+            return response
 
-        if vid_id:
-            transcript_name = vid_id
+        video_id = request.GET.get('videoId', None)
+        if video_id:
+            transcript_name = video_id
         else:
             transcript_name = self.sub
 
@@ -238,16 +244,18 @@ class VideoStudentViewHandlers(object):
 
             try:
                 transcript = self.translation(request.GET.get('videoId', None))
+            except NotFoundError, ex:
+                log.info(ex.message)
+                # Try to return static URL redirection as last resort
+                # if no translation is required
+                return self.get_static_transcript(request)
             except (
                 TranscriptException,
-                NotFoundError,
                 UnicodeDecodeError,
-                TranscriptException,
                 TranscriptsGenerationException
             ) as ex:
                 log.info(ex.message)
-                # Try to return static URL redirection as last resort
-                return self.get_static_transcript(request)
+                response = Response(status=404)
             else:
                 response = Response(transcript, headerlist=[('Content-Language', language)])
                 response.content_type = Transcript.mime_types['sjson']
@@ -257,8 +265,7 @@ class VideoStudentViewHandlers(object):
                 transcript_content, transcript_filename, transcript_mime_type = self.get_transcript(self.transcript_download_format)
             except (NotFoundError, ValueError, KeyError, UnicodeDecodeError):
                 log.debug("Video@download exception")
-                # Return static URL or 404
-                return self.get_static_transcript(request)
+                return Response(status=404)
             else:
                 response = Response(
                     transcript_content,
diff --git a/lms/djangoapps/courseware/tests/test_video_handlers.py b/lms/djangoapps/courseware/tests/test_video_handlers.py
index 296a81a..c0030e5 100644
--- a/lms/djangoapps/courseware/tests/test_video_handlers.py
+++ b/lms/djangoapps/courseware/tests/test_video_handlers.py
@@ -226,7 +226,7 @@ class TestTranscriptDownloadDispatch(TestVideo):
     DATA = """
         <video show_captions="true"
         display_name="A Name"
-        sub='blahblah'
+        sub='OEoXaMPEzfM'
         >
             <source src="example.mp4"/>
             <source src="example.webm"/>
@@ -279,23 +279,6 @@ class TestTranscriptDownloadDispatch(TestVideo):
         self.assertEqual(response.headers['Content-Type'], 'application/x-subrip; charset=utf-8')
         self.assertEqual(response.headers['Content-Disposition'], 'attachment; filename="塞.srt"')
 
-    def test_download_static_transcript(self):
-        """
-        Set course static_asset_path and ensure we get redirected to that path
-        if it isn't found in the contentstore
-        """
-        self.course.static_asset_path = 'dummy/static'
-        self.course.save()
-        store = editable_modulestore()
-        store.update_item(self.course, 'blahblah')
-        request = Request.blank('/download')
-        response = self.item.transcript(request=request, dispatch='download')
-        self.assertEqual(response.status, '307 Temporary Redirect')
-        self.assertIn(
-            ('Location', '/static/dummy/static/subs_blahblah.srt.sjson'),
-            response.headerlist
-        )
-
 
 class TestTranscriptTranslationGetDispatch(TestVideo):
     """
@@ -429,7 +412,7 @@ class TestTranscriptTranslationGetDispatch(TestVideo):
         self.course.static_asset_path = 'dummy/static'
         self.course.save()
         store = editable_modulestore()
-        store.update_item(self.course, 'blahblah')
+        store.update_item(self.course, 'OEoXaMPEzfM')
 
         # Test youtube style en
         request = Request.blank('/translation/en?videoId=12345')
@@ -441,23 +424,20 @@ class TestTranscriptTranslationGetDispatch(TestVideo):
         )
 
         # Test HTML5 video style
-        self.item.sub = 'blahblah'
+        self.item.sub = 'OEoXaMPEzfM'
         request = Request.blank('/translation/en')
         response = self.item.transcript(request=request, dispatch='translation/en')
         self.assertEqual(response.status, '307 Temporary Redirect')
         self.assertIn(
-            ('Location', '/static/dummy/static/subs_blahblah.srt.sjson'),
+            ('Location', '/static/dummy/static/subs_OEoXaMPEzfM.srt.sjson'),
             response.headerlist
         )
 
-        # Test different language
+        # Test different language to ensure we are just ignoring it since we can't
+        # translate with static fallback
         request = Request.blank('/translation/uk')
         response = self.item.transcript(request=request, dispatch='translation/uk')
-        self.assertEqual(response.status, '307 Temporary Redirect')
-        self.assertIn(
-            ('Location', '/static/dummy/static/uk_subs_blahblah.srt.sjson'),
-            response.headerlist
-        )
+        self.assertEqual(response.status, '404 Not Found')
 
 
 class TestStudioTranscriptTranslationGetDispatch(TestVideo):
--
libgit2 0.26.0