Commit 3ccb33c8 by Victor Shnayder

Simplify, make it actually work.

- regexp was too complicated, didn't work
parent 2dcdeff4
......@@ -16,18 +16,14 @@ def _url_replace_regex(prefix):
"""
Match static urls in quotes that don't end in '?raw'.
I'm sorry. http://xkcd.com/1171/
(?<!blah) means "don't match if the previous thing is blah". Clear, eh?
(grep for negative lookbehind assertion in
http://docs.python.org/2/library/re.html)
To anyone contemplating making this more complicated:
http://xkcd.com/1171/
"""
return r"""
(?x) # flags=re.VERBOSE
(?P<quote>\\?['"]) # the opening quotes
(?P<prefix>{prefix}) # the prefix
(?P<rest>.*? # everything else in the url...
(?<!\?raw)) # ...but not if it has '?raw' at the end.
(?P<rest>.*?) # everything else in the url
(?P=quote) # the first matching closing quote
""".format(prefix=prefix)
......@@ -84,6 +80,10 @@ def replace_static_urls(text, data_directory, course_namespace=None):
quote = match.group('quote')
rest = match.group('rest')
# Don't mess with things that end in '?raw'
if rest.endswith('?raw'):
return original
# course_namespace is not None, then use studio style urls
if course_namespace is not None and not isinstance(modulestore(), XMLModuleStore):
url = StaticContent.convert_legacy_static_url(rest, course_namespace)
......
......@@ -81,15 +81,22 @@ def test_data_dir_fallback(mock_storage, mock_modulestore, mock_settings):
def test_raw_static_check():
"""
Make sure replace_static_urls leaves alone things that end in '.raw'
"""
path = '"/static/foo.png?raw"'
assert_equals(path, replace_static_urls(path, DATA_DIRECTORY))
text = 'text <tag a="/static/js/capa/protex/protex.nocache.js?raw"/><div class="'
assert_equals(path, replace_static_urls(path, text))
def test_regex():
yes = ('"/static/foo.png"',
'"/static/foo.png"',
"'/static/foo.png'")
no = ('"/static/foo.png?raw"',
no = ('"/not-static/foo.png"',
'"/static/foo', # no matching quote
)
......
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