Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
edx-platform
Commits
c9778a5f
Commit
c9778a5f
authored
Jun 10, 2015
by
Syed Hassan Raza
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add name param check_transcripts
parent
f73b68d6
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
92 additions
and
32 deletions
+92
-32
cms/djangoapps/contentstore/tests/test_transcripts_utils.py
+2
-30
cms/djangoapps/contentstore/tests/utils.py
+31
-0
cms/djangoapps/contentstore/views/tests/test_transcripts.py
+54
-1
cms/djangoapps/contentstore/views/transcripts_ajax.py
+5
-1
No files found.
cms/djangoapps/contentstore/tests/test_transcripts_utils.py
View file @
c9778a5f
...
@@ -18,6 +18,7 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
...
@@ -18,6 +18,7 @@ from xmodule.modulestore.tests.django_utils import ModuleStoreTestCase
from
xmodule.exceptions
import
NotFoundError
from
xmodule.exceptions
import
NotFoundError
from
xmodule.contentstore.django
import
contentstore
from
xmodule.contentstore.django
import
contentstore
from
xmodule.video_module
import
transcripts_utils
from
xmodule.video_module
import
transcripts_utils
from
contentstore.tests.utils
import
mock_requests_get
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
=
copy
.
deepcopy
(
settings
.
CONTENTSTORE
)
TEST_DATA_CONTENTSTORE
[
'DOC_STORE_CONFIG'
][
'db'
]
=
'test_xcontent_
%
s'
%
uuid4
()
.
hex
TEST_DATA_CONTENTSTORE
[
'DOC_STORE_CONFIG'
][
'db'
]
=
'test_xcontent_
%
s'
%
uuid4
()
.
hex
...
@@ -321,36 +322,7 @@ class TestDownloadYoutubeSubs(ModuleStoreTestCase):
...
@@ -321,36 +322,7 @@ class TestDownloadYoutubeSubs(ModuleStoreTestCase):
transcript_name
=
transcripts_utils
.
youtube_video_transcript_name
(
youtube_text_api
)
transcript_name
=
transcripts_utils
.
youtube_video_transcript_name
(
youtube_text_api
)
self
.
assertIsNone
(
transcript_name
)
self
.
assertIsNone
(
transcript_name
)
def
mocked_requests_get
(
*
args
,
**
kwargs
):
@patch
(
'xmodule.video_module.transcripts_utils.requests.get'
,
side_effect
=
mock_requests_get
)
"""
This method will be used by the mock to replace requests.get
"""
# pylint: disable=no-method-argument
response_transcript_list
=
"""
<transcript_list>
<track id="1" name="Custom" lang_code="en" />
<track id="0" name="Custom1" lang_code="en-GB"/>
</transcript_list>
"""
response_transcript
=
textwrap
.
dedent
(
"""
<transcript>
<text start="0" dur="0.27"></text>
<text start="0.27" dur="2.45">Test text 1.</text>
<text start="2.72">Test text 2.</text>
<text start="5.43" dur="1.73">Test text 3.</text>
</transcript>
"""
)
if
kwargs
==
{
'params'
:
{
'lang'
:
'en'
,
'v'
:
'good_id_2'
}}:
return
Mock
(
status_code
=
200
,
text
=
''
)
elif
kwargs
==
{
'params'
:
{
'type'
:
'list'
,
'v'
:
'good_id_2'
}}:
return
Mock
(
status_code
=
200
,
text
=
response_transcript_list
,
content
=
response_transcript_list
)
elif
kwargs
==
{
'params'
:
{
'lang'
:
'en'
,
'v'
:
'good_id_2'
,
'name'
:
'Custom'
}}:
return
Mock
(
status_code
=
200
,
text
=
response_transcript
,
content
=
response_transcript
)
return
Mock
(
status_code
=
404
,
text
=
''
)
@patch
(
'xmodule.video_module.transcripts_utils.requests.get'
,
side_effect
=
mocked_requests_get
)
def
test_downloading_subs_using_transcript_name
(
self
,
mock_get
):
def
test_downloading_subs_using_transcript_name
(
self
,
mock_get
):
"""
"""
Download transcript using transcript name in url
Download transcript using transcript name in url
...
...
cms/djangoapps/contentstore/tests/utils.py
View file @
c9778a5f
...
@@ -3,6 +3,8 @@
...
@@ -3,6 +3,8 @@
Utilities for contentstore tests
Utilities for contentstore tests
'''
'''
import
json
import
json
import
textwrap
from
mock
import
Mock
from
django.conf
import
settings
from
django.conf
import
settings
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
...
@@ -375,6 +377,35 @@ class CourseTestCase(ModuleStoreTestCase):
...
@@ -375,6 +377,35 @@ class CourseTestCase(ModuleStoreTestCase):
self
.
assertEqual
(
value
,
course2_asset_attrs
[
key
])
self
.
assertEqual
(
value
,
course2_asset_attrs
[
key
])
def
mock_requests_get
(
*
args
,
**
kwargs
):
"""
Returns mock responses for the youtube API.
"""
# pylint: disable=unused-argument
response_transcript_list
=
"""
<transcript_list>
<track id="1" name="Custom" lang_code="en" />
<track id="0" name="Custom1" lang_code="en-GB"/>
</transcript_list>
"""
response_transcript
=
textwrap
.
dedent
(
"""
<transcript>
<text start="100" dur="100">subs #1</text>
<text start="200" dur="40">subs #2</text>
<text start="240" dur="140">subs #3</text>
</transcript>
"""
)
if
kwargs
==
{
'params'
:
{
'lang'
:
'en'
,
'v'
:
'good_id_2'
}}:
return
Mock
(
status_code
=
200
,
text
=
''
)
elif
kwargs
==
{
'params'
:
{
'type'
:
'list'
,
'v'
:
'good_id_2'
}}:
return
Mock
(
status_code
=
200
,
text
=
response_transcript_list
,
content
=
response_transcript_list
)
elif
kwargs
==
{
'params'
:
{
'lang'
:
'en'
,
'v'
:
'good_id_2'
,
'name'
:
'Custom'
}}:
return
Mock
(
status_code
=
200
,
text
=
response_transcript
,
content
=
response_transcript
)
return
Mock
(
status_code
=
404
,
text
=
''
)
def
get_url
(
handler_name
,
key_value
,
key_name
=
'usage_key_string'
,
kwargs
=
None
):
def
get_url
(
handler_name
,
key_value
,
key_name
=
'usage_key_string'
,
kwargs
=
None
):
"""
"""
Helper function for getting HTML for a page in Studio and checking that it does not error.
Helper function for getting HTML for a page in Studio and checking that it does not error.
...
...
cms/djangoapps/contentstore/views/tests/test_transcripts.py
View file @
c9778a5f
...
@@ -6,12 +6,13 @@ import os
...
@@ -6,12 +6,13 @@ import os
import
tempfile
import
tempfile
import
textwrap
import
textwrap
from
uuid
import
uuid4
from
uuid
import
uuid4
from
mock
import
patch
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
django.conf
import
settings
from
django.conf
import
settings
from
contentstore.tests.utils
import
CourseTestCase
from
contentstore.tests.utils
import
CourseTestCase
,
mock_requests_get
from
cache_toolbox.core
import
del_cached_content
from
cache_toolbox.core
import
del_cached_content
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
xmodule.contentstore.django
import
contentstore
from
xmodule.contentstore.django
import
contentstore
...
@@ -628,6 +629,58 @@ class TestCheckTranscripts(BaseTranscripts):
...
@@ -628,6 +629,58 @@ class TestCheckTranscripts(BaseTranscripts):
}
}
)
)
@patch
(
'xmodule.video_module.transcripts_utils.requests.get'
,
side_effect
=
mock_requests_get
)
def
test_check_youtube_with_transcript_name
(
self
,
mock_get
):
"""
Test that the transcripts are fetched correctly when the the transcript name is set
"""
self
.
item
.
data
=
'<video youtube="good_id_2" />'
modulestore
()
.
update_item
(
self
.
item
,
self
.
user
.
id
)
subs
=
{
'start'
:
[
100
,
200
,
240
],
'end'
:
[
200
,
240
,
380
],
'text'
:
[
'subs #1'
,
'subs #2'
,
'subs #3'
]
}
self
.
save_subs_to_store
(
subs
,
'good_id_2'
)
link
=
reverse
(
'check_transcripts'
)
data
=
{
'locator'
:
unicode
(
self
.
video_usage_key
),
'videos'
:
[{
'type'
:
'youtube'
,
'video'
:
'good_id_2'
,
'mode'
:
'youtube'
,
}]
}
resp
=
self
.
client
.
get
(
link
,
{
'data'
:
json
.
dumps
(
data
)})
mock_get
.
assert_any_call
(
'http://video.google.com/timedtext'
,
params
=
{
'lang'
:
'en'
,
'v'
:
'good_id_2'
,
'name'
:
'Custom'
}
)
self
.
assertEqual
(
resp
.
status_code
,
200
)
self
.
assertDictEqual
(
json
.
loads
(
resp
.
content
),
{
u'status'
:
u'Success'
,
u'subs'
:
u'good_id_2'
,
u'youtube_local'
:
True
,
u'is_youtube_mode'
:
True
,
u'youtube_server'
:
True
,
u'command'
:
u'replace'
,
u'current_item_subs'
:
None
,
u'youtube_diff'
:
True
,
u'html5_local'
:
[],
u'html5_equal'
:
False
,
}
)
def
test_fail_data_without_id
(
self
):
def
test_fail_data_without_id
(
self
):
link
=
reverse
(
'check_transcripts'
)
link
=
reverse
(
'check_transcripts'
)
data
=
{
data
=
{
...
...
cms/djangoapps/contentstore/views/transcripts_ajax.py
View file @
c9778a5f
...
@@ -35,7 +35,8 @@ from xmodule.video_module.transcripts_utils import (
...
@@ -35,7 +35,8 @@ from xmodule.video_module.transcripts_utils import (
copy_or_rename_transcript
,
copy_or_rename_transcript
,
manage_video_subtitles_save
,
manage_video_subtitles_save
,
GetTranscriptsFromYouTubeException
,
GetTranscriptsFromYouTubeException
,
TranscriptsRequestValidationException
TranscriptsRequestValidationException
,
youtube_video_transcript_name
,
)
)
from
student.auth
import
has_course_author_access
from
student.auth
import
has_course_author_access
...
@@ -251,6 +252,9 @@ def check_transcripts(request):
...
@@ -251,6 +252,9 @@ def check_transcripts(request):
# youtube server
# youtube server
youtube_text_api
=
copy
.
deepcopy
(
settings
.
YOUTUBE
[
'TEXT_API'
])
youtube_text_api
=
copy
.
deepcopy
(
settings
.
YOUTUBE
[
'TEXT_API'
])
youtube_text_api
[
'params'
][
'v'
]
=
youtube_id
youtube_text_api
[
'params'
][
'v'
]
=
youtube_id
youtube_transcript_name
=
youtube_video_transcript_name
(
youtube_text_api
)
if
youtube_transcript_name
:
youtube_text_api
[
'params'
][
'name'
]
=
youtube_transcript_name
youtube_response
=
requests
.
get
(
'http://'
+
youtube_text_api
[
'url'
],
params
=
youtube_text_api
[
'params'
])
youtube_response
=
requests
.
get
(
'http://'
+
youtube_text_api
[
'url'
],
params
=
youtube_text_api
[
'params'
])
if
youtube_response
.
status_code
==
200
and
youtube_response
.
text
:
if
youtube_response
.
status_code
==
200
and
youtube_response
.
text
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment