Commit 0350d15e by Calen Pennington

Make static_replace fall back to data_directory prefix, if it doesn't find the file anywhere else

parent 90107fa8
...@@ -69,6 +69,7 @@ def replace_static_urls(text, data_directory, course_namespace=None): ...@@ -69,6 +69,7 @@ def replace_static_urls(text, data_directory, course_namespace=None):
def replace_static_url(match): def replace_static_url(match):
original = match.group(0) original = match.group(0)
prefix = match.group('prefix')
quote = match.group('quote') quote = match.group('quote')
rest = match.group('rest') rest = match.group('rest')
...@@ -78,16 +79,16 @@ def replace_static_urls(text, data_directory, course_namespace=None): ...@@ -78,16 +79,16 @@ def replace_static_urls(text, data_directory, course_namespace=None):
# If we're in debug mode, and the file as requested exists, then don't change the links # If we're in debug mode, and the file as requested exists, then don't change the links
elif (settings.DEBUG and finders.find(rest, True)): elif (settings.DEBUG and finders.find(rest, True)):
return original return original
# Otherwise, look the file up in staticfiles_storage # Otherwise, look the file up in staticfiles_storage without the data directory
else: else:
path = data_directory + '/' + rest
try: try:
url = staticfiles_storage.url(path) url = staticfiles_storage.url(rest)
# And if that fails, return the path unmodified # And if that fails, assume that it's course content, and add manually data directory
except Exception as err: except Exception as err:
log.warning("staticfiles_storage couldn't find path {0}: {1}".format( log.warning("staticfiles_storage couldn't find path {0}: {1}".format(
path, str(err))) rest, str(err)))
return original url = "".join([prefix, data_directory, '/', rest])
return "".join([quote, url, quote]) return "".join([quote, url, quote])
return re.sub( return re.sub(
......
...@@ -3,19 +3,20 @@ from static_replace import replace_static_urls, replace_course_urls ...@@ -3,19 +3,20 @@ from static_replace import replace_static_urls, replace_course_urls
from mock import patch, Mock from mock import patch, Mock
from xmodule.modulestore import Location from xmodule.modulestore import Location
from xmodule.modulestore.mongo import MongoModuleStore from xmodule.modulestore.mongo import MongoModuleStore
from xmodule.modulestore.xml import XMLModuleStore
DATA_DIRECTORY = 'data_dir' DATA_DIRECTORY = 'data_dir'
COURSE_ID = 'org/course/run' COURSE_ID = 'org/course/run'
NAMESPACE = Location('org', 'course', 'run', None, None) NAMESPACE = Location('org', 'course', 'run', None, None)
STATIC_SOURCE = '"/static/file.png"'
def test_multi_replace(): def test_multi_replace():
static_source = '"/static/file.png"'
course_source = '"/course/file.png"' course_source = '"/course/file.png"'
assert_equals( assert_equals(
replace_static_urls(static_source, DATA_DIRECTORY), replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY),
replace_static_urls(replace_static_urls(static_source, DATA_DIRECTORY), DATA_DIRECTORY) replace_static_urls(replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY), DATA_DIRECTORY)
) )
assert_equals( assert_equals(
replace_course_urls(course_source, COURSE_ID), replace_course_urls(course_source, COURSE_ID),
...@@ -29,8 +30,7 @@ def test_debug_no_modify(mock_settings, mock_finders): ...@@ -29,8 +30,7 @@ def test_debug_no_modify(mock_settings, mock_finders):
mock_settings.DEBUG = True mock_settings.DEBUG = True
mock_finders.find.return_value = True mock_finders.find.return_value = True
static_source = '"/static/file.png"' assert_equals(STATIC_SOURCE, replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
assert_equals(static_source, replace_static_urls(static_source, DATA_DIRECTORY))
mock_finders.find.assert_called_once_with('file.png', True) mock_finders.find.assert_called_once_with('file.png', True)
...@@ -42,15 +42,23 @@ def test_mongo_filestore(mock_modulestore, mock_static_content): ...@@ -42,15 +42,23 @@ def test_mongo_filestore(mock_modulestore, mock_static_content):
mock_modulestore.return_value = Mock(MongoModuleStore) mock_modulestore.return_value = Mock(MongoModuleStore)
mock_static_content.convert_legacy_static_url.return_value = "c4x://mock_url" mock_static_content.convert_legacy_static_url.return_value = "c4x://mock_url"
static_source = '"/static/file.png"'
# No namespace => no change to path # No namespace => no change to path
assert_equals(static_source, replace_static_urls(static_source, DATA_DIRECTORY)) assert_equals('"/static/data_dir/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
# Namespace => content url # Namespace => content url
assert_equals( assert_equals(
'"' + mock_static_content.convert_legacy_static_url.return_value + '"', '"' + mock_static_content.convert_legacy_static_url.return_value + '"',
replace_static_urls(static_source, DATA_DIRECTORY, NAMESPACE) replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY, NAMESPACE)
) )
mock_static_content.convert_legacy_static_url.assert_called_once_with('file.png', NAMESPACE) mock_static_content.convert_legacy_static_url.assert_called_once_with('file.png', NAMESPACE)
@patch('static_replace.settings')
@patch('static_replace.modulestore')
@patch('static_replace.staticfiles_storage')
def test_data_dir_fallback(mock_storage, mock_modulestore, mock_settings):
mock_modulestore.return_value = Mock(XMLModuleStore)
mock_settings.DEBUG = False
mock_storage.url.side_effect = Exception
assert_equals('"/static/data_dir/file.png"', replace_static_urls(STATIC_SOURCE, DATA_DIRECTORY))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment