1.2 is not unsupported, remove all references to MEDIA_* (users should have moved to STATIC_* by now) as well as 1.2 stuff in the documentation.
This commit is contained in:
6
.gitignore
vendored
6
.gitignore
vendored
@@ -1,7 +1,7 @@
|
||||
build
|
||||
compressor/tests/media/CACHE
|
||||
compressor/tests/media/custom
|
||||
compressor/tests/media/js/066cd253eada.js
|
||||
compressor/tests/static/CACHE
|
||||
compressor/tests/static/custom
|
||||
compressor/tests/static/js/066cd253eada.js
|
||||
dist
|
||||
MANIFEST
|
||||
*.pyc
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import os
|
||||
from django import VERSION as DJANGO_VERSION
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
|
||||
@@ -69,20 +68,17 @@ class CompressorConf(AppConf):
|
||||
prefix = 'compress'
|
||||
|
||||
def configure_root(self, value):
|
||||
# Uses Django's STATIC_ROOT by default
|
||||
if value is None:
|
||||
value = getattr(settings, 'STATIC_ROOT', None)
|
||||
if not value:
|
||||
value = settings.MEDIA_ROOT
|
||||
value = settings.STATIC_ROOT
|
||||
if value is None:
|
||||
raise ImproperlyConfigured("COMPRESS_ROOT setting must be set")
|
||||
return os.path.normcase(os.path.abspath(value))
|
||||
|
||||
def configure_url(self, value):
|
||||
# Uses Django 1.3's STATIC_URL by default or falls back to MEDIA_URL
|
||||
# Uses Django's STATIC_URL by default
|
||||
if value is None:
|
||||
value = getattr(settings, 'STATIC_URL', None)
|
||||
if not value:
|
||||
value = settings.MEDIA_URL
|
||||
value = settings.STATIC_URL
|
||||
if not value.endswith('/'):
|
||||
raise ImproperlyConfigured("URL settings (e.g. COMPRESS_URL) "
|
||||
"must have a trailing slash")
|
||||
@@ -90,31 +86,17 @@ class CompressorConf(AppConf):
|
||||
|
||||
def configure_cache_backend(self, value):
|
||||
if value is None:
|
||||
# If we are on Django 1.3 AND using the new CACHES setting...
|
||||
if DJANGO_VERSION[:2] >= (1, 3) and hasattr(settings, 'CACHES'):
|
||||
value = 'default'
|
||||
else:
|
||||
# falling back to the old CACHE_BACKEND setting
|
||||
value = getattr(settings, 'CACHE_BACKEND', None)
|
||||
if not value:
|
||||
raise ImproperlyConfigured("Please specify a cache "
|
||||
"backend in your settings.")
|
||||
value = 'default'
|
||||
return value
|
||||
|
||||
def configure_offline_context(self, value):
|
||||
if not value:
|
||||
value = {'MEDIA_URL': settings.MEDIA_URL}
|
||||
# Adds the 1.3 STATIC_URL setting to the context if available
|
||||
if getattr(settings, 'STATIC_URL', None):
|
||||
value['STATIC_URL'] = settings.STATIC_URL
|
||||
value = {'STATIC_URL': settings.STATIC_URL}
|
||||
return value
|
||||
|
||||
def configure_template_filter_context(self, value):
|
||||
if not value:
|
||||
value = {'MEDIA_URL': settings.MEDIA_URL}
|
||||
# Adds the 1.3 STATIC_URL setting to the context if available
|
||||
if getattr(settings, 'STATIC_URL', None):
|
||||
value['STATIC_URL'] = settings.STATIC_URL
|
||||
value = {'STATIC_URL': settings.STATIC_URL}
|
||||
return value
|
||||
|
||||
def configure_precompilers(self, value):
|
||||
|
||||
@@ -115,7 +115,7 @@ class Command(NoArgsCommand):
|
||||
"COMPRESS_ENABLED setting is not True.", dest='force'),
|
||||
make_option('--follow-links', default=False, action='store_true',
|
||||
help="Follow symlinks when traversing the COMPRESS_ROOT "
|
||||
"(which defaults to MEDIA_ROOT). Be aware that using this "
|
||||
"(which defaults to STATIC_ROOT). Be aware that using this "
|
||||
"can lead to infinite recursion if a link points to a parent "
|
||||
"directory of itself.", dest='follow_links'),
|
||||
)
|
||||
|
||||
@@ -22,7 +22,7 @@ class Command(NoArgsCommand):
|
||||
"'.*' and '*~'."),
|
||||
make_option('--follow-links', dest='follow_links', action='store_true',
|
||||
help="Follow symlinks when traversing the COMPRESS_ROOT "
|
||||
"(which defaults to MEDIA_ROOT). Be aware that using this "
|
||||
"(which defaults to STATIC_ROOT). Be aware that using this "
|
||||
"can lead to infinite recursion if a link points to a parent "
|
||||
"directory of itself."),
|
||||
make_option('-c', '--clean', dest='clean', action='store_true',
|
||||
|
||||
@@ -161,27 +161,27 @@ def compress(parser, token):
|
||||
Examples::
|
||||
|
||||
{% compress css %}
|
||||
<link rel="stylesheet" href="/media/css/one.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="/static/css/one.css" type="text/css" charset="utf-8">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" charset="utf-8">
|
||||
{% endcompress %}
|
||||
|
||||
Which would be rendered something like::
|
||||
|
||||
<link rel="stylesheet" href="/media/CACHE/css/f7c661b7a124.css" type="text/css" media="all" charset="utf-8">
|
||||
<link rel="stylesheet" href="/static/CACHE/css/f7c661b7a124.css" type="text/css" media="all" charset="utf-8">
|
||||
|
||||
or::
|
||||
|
||||
{% compress js %}
|
||||
<script src="/media/js/one.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="/static/js/one.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
||||
{% endcompress %}
|
||||
|
||||
Which would be rendered something like::
|
||||
|
||||
<script type="text/javascript" src="/media/CACHE/js/3f33b9146e12.js" charset="utf-8"></script>
|
||||
<script type="text/javascript" src="/static/CACHE/js/3f33b9146e12.js" charset="utf-8"></script>
|
||||
|
||||
Linked files must be on your COMPRESS_URL (which defaults to MEDIA_URL).
|
||||
Linked files must be on your COMPRESS_URL (which defaults to STATIC_URL).
|
||||
If DEBUG is true off-site files will throw exceptions. If DEBUG is false
|
||||
they will be silently stripped.
|
||||
"""
|
||||
|
||||
@@ -19,11 +19,10 @@ INSTALLED_APPS = [
|
||||
'compressor',
|
||||
]
|
||||
|
||||
MEDIA_URL = '/media/'
|
||||
STATIC_URL = MEDIA_URL
|
||||
STATIC_URL = '/static/'
|
||||
|
||||
|
||||
MEDIA_ROOT = os.path.join(TEST_DIR, 'media')
|
||||
STATIC_ROOT = os.path.join(TEST_DIR, 'static')
|
||||
|
||||
TEMPLATE_DIRS = (
|
||||
# Specifically choose a name that will not be considered
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
p { background: url('/media/images/image.gif') }
|
||||
1
compressor/tests/static/css/url/test.css
Normal file
1
compressor/tests/static/css/url/test.css
Normal file
@@ -0,0 +1 @@
|
||||
p { background: url('/static/images/image.gif') }
|
||||
|
Before Width: | Height: | Size: 733 B After Width: | Height: | Size: 733 B |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
@@ -39,21 +39,21 @@ class CompressorTestCase(TestCase):
|
||||
settings.COMPRESS_PRECOMPILERS = {}
|
||||
settings.COMPRESS_DEBUG_TOGGLE = 'nocompress'
|
||||
self.css = """\
|
||||
<link rel="stylesheet" href="/media/css/one.css" type="text/css" />
|
||||
<link rel="stylesheet" href="/static/css/one.css" type="text/css" />
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" />"""
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" />"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
self.js = """\
|
||||
<script src="/media/js/one.js" type="text/javascript"></script>
|
||||
<script src="/static/js/one.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">obj.value = "value";</script>"""
|
||||
self.js_node = JsCompressor(self.js)
|
||||
|
||||
def test_css_split(self):
|
||||
out = [
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'one.css'), u'css/one.css', u'<link rel="stylesheet" href="/media/css/one.css" type="text/css" />'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'one.css'), u'css/one.css', u'<link rel="stylesheet" href="/static/css/one.css" type="text/css" />'),
|
||||
(SOURCE_HUNK, u'p { border:5px solid green;}', None, u'<style type="text/css">p { border:5px solid green;}</style>'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'two.css'), u'css/two.css', u'<link rel="stylesheet" href="/media/css/two.css" type="text/css" />'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'two.css'), u'css/two.css', u'<link rel="stylesheet" href="/static/css/two.css" type="text/css" />'),
|
||||
]
|
||||
split = self.css_node.split_contents()
|
||||
split = [(x[0], x[1], x[2], self.css_node.parser.elem_str(x[3])) for x in split]
|
||||
@@ -84,12 +84,12 @@ class CompressorTestCase(TestCase):
|
||||
"cachekey is returning something that doesn't look like r'\w{12}'")
|
||||
|
||||
def test_css_return_if_on(self):
|
||||
output = css_tag('/media/CACHE/css/e41ba2cc6982.css')
|
||||
output = css_tag('/static/CACHE/css/e41ba2cc6982.css')
|
||||
self.assertEqual(output, self.css_node.output().strip())
|
||||
|
||||
def test_js_split(self):
|
||||
out = [
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'js', u'one.js'), u'js/one.js', '<script src="/media/js/one.js" type="text/javascript"></script>'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'js', u'one.js'), u'js/one.js', '<script src="/static/js/one.js" type="text/javascript"></script>'),
|
||||
(SOURCE_HUNK, u'obj.value = "value";', None, '<script type="text/javascript">obj.value = "value";</script>'),
|
||||
]
|
||||
split = self.js_node.split_contents()
|
||||
@@ -101,17 +101,17 @@ class CompressorTestCase(TestCase):
|
||||
self.assertEqual(out, list(self.js_node.hunks()))
|
||||
|
||||
def test_js_output(self):
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(out, self.js_node.output())
|
||||
|
||||
def test_js_override_url(self):
|
||||
self.js_node.context.update({'url': u'This is not a url, just a text'})
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(out, self.js_node.output())
|
||||
|
||||
def test_css_override_url(self):
|
||||
self.css_node.context.update({'url': u'This is not a url, just a text'})
|
||||
output = css_tag('/media/CACHE/css/e41ba2cc6982.css')
|
||||
output = css_tag('/static/CACHE/css/e41ba2cc6982.css')
|
||||
self.assertEqual(output, self.css_node.output().strip())
|
||||
|
||||
def test_js_return_if_off(self):
|
||||
@@ -126,20 +126,20 @@ class CompressorTestCase(TestCase):
|
||||
settings.COMPRESS_PRECOMPILERS = precompilers
|
||||
|
||||
def test_js_return_if_on(self):
|
||||
output = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||
output = u'<script type="text/javascript" src="/static/CACHE/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(output, self.js_node.output())
|
||||
|
||||
def test_custom_output_dir(self):
|
||||
try:
|
||||
old_output_dir = settings.COMPRESS_OUTPUT_DIR
|
||||
settings.COMPRESS_OUTPUT_DIR = 'custom'
|
||||
output = u'<script type="text/javascript" src="/media/custom/js/066cd253eada.js"></script>'
|
||||
output = u'<script type="text/javascript" src="/static/custom/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(output, JsCompressor(self.js).output())
|
||||
settings.COMPRESS_OUTPUT_DIR = ''
|
||||
output = u'<script type="text/javascript" src="/media/js/066cd253eada.js"></script>'
|
||||
output = u'<script type="text/javascript" src="/static/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(output, JsCompressor(self.js).output())
|
||||
settings.COMPRESS_OUTPUT_DIR = '/custom/nested/'
|
||||
output = u'<script type="text/javascript" src="/media/custom/nested/js/066cd253eada.js"></script>'
|
||||
output = u'<script type="text/javascript" src="/static/custom/nested/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(output, JsCompressor(self.js).output())
|
||||
finally:
|
||||
settings.COMPRESS_OUTPUT_DIR = old_output_dir
|
||||
@@ -175,9 +175,9 @@ class CompressorTestCase(TestCase):
|
||||
class CssMediaTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.css = """\
|
||||
<link rel="stylesheet" href="/media/css/one.css" type="text/css" media="screen">
|
||||
<link rel="stylesheet" href="/static/css/one.css" type="text/css" media="screen">
|
||||
<style type="text/css" media="print">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" media="all">
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" media="all">
|
||||
<style type="text/css">h1 { border:5px solid green;}</style>"""
|
||||
|
||||
def test_css_output(self):
|
||||
@@ -201,12 +201,12 @@ class CssMediaTestCase(TestCase):
|
||||
('text/foobar', 'python %s {infile} {outfile}' % os.path.join(test_dir, 'precompiler.py')),
|
||||
)
|
||||
css = """\
|
||||
<link rel="stylesheet" href="/media/css/one.css" type="text/css" media="screen">
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" media="screen">
|
||||
<link rel="stylesheet" href="/static/css/one.css" type="text/css" media="screen">
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" media="screen">
|
||||
<style type="text/foobar" media="screen">h1 { border:5px solid green;}</style>"""
|
||||
css_node = CssCompressor(css)
|
||||
output = BeautifulSoup(css_node.output()).findAll(['link', 'style'])
|
||||
self.assertEqual([u'/media/css/one.css', u'/media/css/two.css', None],
|
||||
self.assertEqual([u'/static/css/one.css', u'/static/css/two.css', None],
|
||||
[l.get('href', None) for l in output])
|
||||
self.assertEqual([u'screen', u'screen', u'screen'],
|
||||
[l.get('media', None) for l in output])
|
||||
|
||||
@@ -37,7 +37,7 @@ CssTidyTestCase = skipIf(
|
||||
class PrecompilerTestCase(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.filename = os.path.join(test_dir, 'media/css/one.css')
|
||||
self.filename = os.path.join(test_dir, 'static/css/one.css')
|
||||
with open(self.filename) as f:
|
||||
self.content = f.read()
|
||||
self.test_precompiler = os.path.join(test_dir, 'precompiler.py')
|
||||
@@ -93,11 +93,11 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
self.old_url = settings.COMPRESS_URL
|
||||
self.old_hashing_method = settings.COMPRESS_CSS_HASHING_METHOD
|
||||
settings.COMPRESS_ENABLED = True
|
||||
settings.COMPRESS_URL = '/media/'
|
||||
settings.COMPRESS_URL = '/static/'
|
||||
settings.COMPRESS_CSS_HASHING_METHOD = self.hashing_method
|
||||
self.css = """
|
||||
<link rel="stylesheet" href="/media/css/url/url1.css" type="text/css">
|
||||
<link rel="stylesheet" href="/media/css/url/2/url2.css" type="text/css">
|
||||
<link rel="stylesheet" href="/static/css/url/url1.css" type="text/css">
|
||||
<link rel="stylesheet" href="/static/css/url/2/url2.css" type="text/css">
|
||||
"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
@@ -117,7 +117,7 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
"p { filter: Alpha(src='%(url)simg/python.png?%(hash)s') }") % params
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
|
||||
settings.COMPRESS_URL = params['url'] = 'http://media.example.com/'
|
||||
settings.COMPRESS_URL = params['url'] = 'http://static.example.com/'
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
|
||||
output = ("p { background: url('%(url)simg/python.png?%(hash)s') }"
|
||||
@@ -135,7 +135,7 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
"p { filter: Alpha(src='%(url)simg/python.png?%(hash)s') }") % params
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
|
||||
settings.COMPRESS_URL = params['url'] = 'https://media.example.com/'
|
||||
settings.COMPRESS_URL = params['url'] = 'https://static.example.com/'
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
|
||||
output = ("p { background: url('%(url)simg/python.png?%(hash)s') }"
|
||||
@@ -143,7 +143,7 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
|
||||
|
||||
def test_css_absolute_filter_relative_path(self):
|
||||
filename = os.path.join(settings.TEST_DIR, 'whatever', '..', 'media', 'whatever/../css/url/test.css')
|
||||
filename = os.path.join(settings.TEST_DIR, 'whatever', '..', 'static', 'whatever/../css/url/test.css')
|
||||
imagefilename = os.path.join(settings.COMPRESS_ROOT, 'img/python.png')
|
||||
params = {
|
||||
'url': settings.COMPRESS_URL,
|
||||
@@ -153,7 +153,7 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
"p { filter: Alpha(src='%(url)simg/python.png?%(hash)s') }") % params
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
|
||||
settings.COMPRESS_URL = params['url'] = 'https://media.example.com/'
|
||||
settings.COMPRESS_URL = params['url'] = 'https://static.example.com/'
|
||||
filter = CssAbsoluteFilter(self.content)
|
||||
output = ("p { background: url('%(url)simg/python.png?%(hash)s') }"
|
||||
"p { filter: Alpha(src='%(url)simg/python.png?%(hash)s') }") % params
|
||||
@@ -165,22 +165,22 @@ class CssAbsolutizingTestCase(TestCase):
|
||||
'hash2': self.hashing_func(os.path.join(settings.COMPRESS_ROOT, 'img/add.png')),
|
||||
}
|
||||
self.assertEqual([u"""\
|
||||
p { background: url('/media/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/media/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/media/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/media/img/python.png?%(hash1)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/media/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/static/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/static/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/static/img/python.png?%(hash1)s'); }
|
||||
p { background: url('/static/img/python.png?%(hash1)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/static/img/python.png?%(hash1)s'); }
|
||||
""" % hash_dict,
|
||||
u"""\
|
||||
p { background: url('/media/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/media/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/media/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/media/img/add.png?%(hash2)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/media/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/static/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/static/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/static/img/add.png?%(hash2)s'); }
|
||||
p { background: url('/static/img/add.png?%(hash2)s'); }
|
||||
p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/static/img/add.png?%(hash2)s'); }
|
||||
""" % hash_dict], list(self.css_node.hunks()))
|
||||
|
||||
def test_guess_filename(self):
|
||||
for base_url in ('/media/', 'http://media.example.com/'):
|
||||
for base_url in ('/static/', 'http://static.example.com/'):
|
||||
settings.COMPRESS_URL = base_url
|
||||
url = '%s/img/python.png' % settings.COMPRESS_URL.rstrip('/')
|
||||
path = os.path.join(settings.COMPRESS_ROOT, 'img/python.png')
|
||||
@@ -196,8 +196,8 @@ class CssAbsolutizingTestCaseWithHash(CssAbsolutizingTestCase):
|
||||
def setUp(self):
|
||||
super(CssAbsolutizingTestCaseWithHash, self).setUp()
|
||||
self.css = """
|
||||
<link rel="stylesheet" href="/media/css/url/url1.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="/media/css/url/2/url2.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="/static/css/url/url1.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="/static/css/url/2/url2.css" type="text/css" charset="utf-8">
|
||||
"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
@@ -209,10 +209,10 @@ class CssDataUriTestCase(TestCase):
|
||||
'compressor.filters.css_default.CssAbsoluteFilter',
|
||||
'compressor.filters.datauri.CssDataUriFilter',
|
||||
]
|
||||
settings.COMPRESS_URL = '/media/'
|
||||
settings.COMPRESS_URL = '/static/'
|
||||
settings.COMPRESS_CSS_HASHING_METHOD = 'mtime'
|
||||
self.css = """
|
||||
<link rel="stylesheet" href="/media/css/datauri.css" type="text/css">
|
||||
<link rel="stylesheet" href="/static/css/datauri.css" type="text/css">
|
||||
"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
@@ -220,7 +220,7 @@ class CssDataUriTestCase(TestCase):
|
||||
datauri_hash = get_hashed_mtime(os.path.join(settings.COMPRESS_ROOT, 'img/python.png'))
|
||||
out = [u'''.add { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg=="); }
|
||||
.add-with-hash { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJvSURBVDjLpZPrS5NhGIf9W7YvBYOkhlkoqCklWChv2WyKik7blnNris72bi6dus0DLZ0TDxW1odtopDs4D8MDZuLU0kXq61CijSIIasOvv94VTUfLiB74fXngup7nvrnvJABJ/5PfLnTTdcwOj4RsdYmo5glBWP6iOtzwvIKSWstI0Wgx80SBblpKtE9KQs/We7EaWoT/8wbWP61gMmCH0lMDvokT4j25TiQU/ITFkek9Ow6+7WH2gwsmahCPdwyw75uw9HEO2gUZSkfyI9zBPCJOoJ2SMmg46N61YO/rNoa39Xi41oFuXysMfh36/Fp0b7bAfWAH6RGi0HglWNCbzYgJaFjRv6zGuy+b9It96N3SQvNKiV9HvSaDfFEIxXItnPs23BzJQd6DDEVM0OKsoVwBG/1VMzpXVWhbkUM2K4oJBDYuGmbKIJ0qxsAbHfRLzbjcnUbFBIpx/qH3vQv9b3U03IQ/HfFkERTzfFj8w8jSpR7GBE123uFEYAzaDRIqX/2JAtJbDat/COkd7CNBva2cMvq0MGxp0PRSCPF8BXjWG3FgNHc9XPT71Ojy3sMFdfJRCeKxEsVtKwFHwALZfCUk3tIfNR8XiJwc1LmL4dg141JPKtj3WUdNFJqLGFVPC4OkR4BxajTWsChY64wmCnMxsWPCHcutKBxMVp5mxA1S+aMComToaqTRUQknLTH62kHOVEE+VQnjahscNCy0cMBWsSI0TCQcZc5ALkEYckL5A5noWSBhfm2AecMAjbcRWV0pUTh0HE64TNf0mczcnnQyu/MilaFJCae1nw2fbz1DnVOxyGTlKeZft/Ff8x1BRssfACjTwQAAAABJRU5ErkJggg=="); }
|
||||
.python { background-image: url("/media/img/python.png?%s"); }
|
||||
.python { background-image: url("/static/img/python.png?%s"); }
|
||||
.datauri { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0 vr4MkhoXe0rZigAAAABJRU5ErkJggg=="); }
|
||||
''' % datauri_hash]
|
||||
self.assertEqual(out, list(self.css_node.hunks()))
|
||||
|
||||
@@ -55,61 +55,61 @@ class TestJinja2CompressorExtension(TestCase):
|
||||
def test_empty_tag(self):
|
||||
template = self.env.from_string(u"""{% compress js %}{% block js %}
|
||||
{% endblock %}{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
self.assertEqual(u'', template.render(context))
|
||||
|
||||
def test_css_tag(self):
|
||||
template = self.env.from_string(u"""{% compress css -%}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/two.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/two.css" type="text/css" charset="utf-8">
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/media/CACHE/css/e41ba2cc6982.css")
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/static/CACHE/css/e41ba2cc6982.css")
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
def test_nonascii_css_tag(self):
|
||||
template = self.env.from_string(u"""{% compress css -%}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/nonasc.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/nonasc.css" type="text/css" charset="utf-8">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/media/CACHE/css/799f6defe43c.css")
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/static/CACHE/css/799f6defe43c.css")
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
def test_js_tag(self):
|
||||
template = self.env.from_string(u"""{% compress js -%}
|
||||
<script src="{{ MEDIA_URL }}js/one.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ STATIC_URL }}js/one.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
def test_nonascii_js_tag(self):
|
||||
template = self.env.from_string(u"""{% compress js -%}
|
||||
<script src="{{ MEDIA_URL }}js/nonasc.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ STATIC_URL }}js/nonasc.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">var test_value = "\u2014";</script>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/e214fe629b28.js"></script>'
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/e214fe629b28.js"></script>'
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
def test_nonascii_latin1_js_tag(self):
|
||||
template = self.env.from_string(u"""{% compress js -%}
|
||||
<script src="{{ MEDIA_URL }}js/nonasc-latin1.js" type="text/javascript" charset="latin-1"></script>
|
||||
<script src="{{ STATIC_URL }}js/nonasc-latin1.js" type="text/javascript" charset="latin-1"></script>
|
||||
<script type="text/javascript">var test_value = "\u2014";</script>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/be9e078b5ca7.js"></script>'
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/be9e078b5ca7.js"></script>'
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
def test_css_inline(self):
|
||||
template = self.env.from_string(u"""{% compress css, inline -%}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = '\n'.join([
|
||||
'<style type="text/css">body { background:#990; }',
|
||||
'p { border:5px solid green;}</style>',
|
||||
@@ -118,10 +118,10 @@ class TestJinja2CompressorExtension(TestCase):
|
||||
|
||||
def test_js_inline(self):
|
||||
template = self.env.from_string(u"""{% compress js, inline -%}
|
||||
<script src="{{ MEDIA_URL }}js/one.js" type="text/css" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="{{ STATIC_URL }}js/one.js" type="text/css" type="text/javascript" charset="utf-8"></script>
|
||||
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
||||
{% endcompress %}""")
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = '<script type="text/javascript">obj={};obj.value="value";</script>'
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
@@ -132,7 +132,7 @@ class TestJinja2CompressorExtension(TestCase):
|
||||
u'<style type="text/css">'
|
||||
u'/* русский текст */'
|
||||
u'</style>{% endcompress %}')
|
||||
out = u'<link rel="stylesheet" href="/media/CACHE/css/b2cec0f8cb24.css" type="text/css" />'
|
||||
out = u'<link rel="stylesheet" href="/static/CACHE/css/b2cec0f8cb24.css" type="text/css" />'
|
||||
settings.COMPRESS_ENABLED = org_COMPRESS_ENABLED
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
self.assertEqual(out, template.render(context))
|
||||
|
||||
@@ -55,7 +55,7 @@ class OfflineTestCaseMixin(object):
|
||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
||||
self.assertEqual(1, count)
|
||||
self.assertEqual([
|
||||
u'<script type="text/javascript" src="/media/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
|
||||
u'<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
|
||||
], result)
|
||||
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
||||
@@ -97,8 +97,8 @@ class OfflineGenerationBlockSuperTestCaseWithExtraContent(OfflineTestCaseMixin,
|
||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
||||
self.assertEqual(2, count)
|
||||
self.assertEqual([
|
||||
u'<script type="text/javascript" src="/media/CACHE/js/ced14aec5856.js"></script>',
|
||||
u'<script type="text/javascript" src="/media/CACHE/js/7c02d201f69d.js"></script>'
|
||||
u'<script type="text/javascript" src="/static/CACHE/js/ced14aec5856.js"></script>',
|
||||
u'<script type="text/javascript" src="/static/CACHE/js/7c02d201f69d.js"></script>'
|
||||
], result)
|
||||
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
||||
@@ -156,8 +156,8 @@ class OfflineGenerationTestCaseErrors(OfflineTestCaseMixin, TestCase):
|
||||
def test_offline(self):
|
||||
count, result = CompressCommand().compress(log=self.log, verbosity=self.verbosity)
|
||||
self.assertEqual(2, count)
|
||||
self.assertIn(u'<script type="text/javascript" src="/media/CACHE/js/3872c9ae3f42.js"></script>', result)
|
||||
self.assertIn(u'<script type="text/javascript" src="/media/CACHE/js/cd8870829421.js"></script>', result)
|
||||
self.assertIn(u'<script type="text/javascript" src="/static/CACHE/js/3872c9ae3f42.js"></script>', result)
|
||||
self.assertIn(u'<script type="text/javascript" src="/static/CACHE/js/cd8870829421.js"></script>', result)
|
||||
|
||||
|
||||
class OfflineGenerationTestCaseWithError(OfflineTestCaseMixin, TestCase):
|
||||
@@ -209,7 +209,7 @@ class OfflineGenerationTestCase(OfflineTestCaseMixin, TestCase):
|
||||
default_storage.delete(manifest_path)
|
||||
self.assertEqual(1, count)
|
||||
self.assertEqual([
|
||||
u'<script type="text/javascript" src="/media/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
|
||||
u'<script type="text/javascript" src="/static/CACHE/js/%s.js"></script>' % (self.expected_hash, ),
|
||||
], result)
|
||||
rendered_template = self.template.render(Context(settings.COMPRESS_OFFLINE_CONTEXT))
|
||||
self.assertEqual(rendered_template, "".join(result) + "\n")
|
||||
|
||||
@@ -47,16 +47,16 @@ class Html5LibParserTests(ParserTestCase, CompressorTestCase):
|
||||
super(Html5LibParserTests, self).setUp()
|
||||
# special version of the css since the parser sucks
|
||||
self.css = """\
|
||||
<link href="/media/css/one.css" rel="stylesheet" type="text/css">
|
||||
<link href="/static/css/one.css" rel="stylesheet" type="text/css">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link href="/media/css/two.css" rel="stylesheet" type="text/css">"""
|
||||
<link href="/static/css/two.css" rel="stylesheet" type="text/css">"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
def test_css_split(self):
|
||||
out = [
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'one.css'), u'css/one.css', u'<link href="/media/css/one.css" rel="stylesheet" type="text/css">'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'one.css'), u'css/one.css', u'<link href="/static/css/one.css" rel="stylesheet" type="text/css">'),
|
||||
(SOURCE_HUNK, u'p { border:5px solid green;}', None, u'<style type="text/css">p { border:5px solid green;}</style>'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'two.css'), u'css/two.css', u'<link href="/media/css/two.css" rel="stylesheet" type="text/css">'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'css', u'two.css'), u'css/two.css', u'<link href="/static/css/two.css" rel="stylesheet" type="text/css">'),
|
||||
]
|
||||
split = self.css_node.split_contents()
|
||||
split = [(x[0], x[1], x[2], self.css_node.parser.elem_str(x[3])) for x in split]
|
||||
@@ -64,7 +64,7 @@ class Html5LibParserTests(ParserTestCase, CompressorTestCase):
|
||||
|
||||
def test_js_split(self):
|
||||
out = [
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'js', u'one.js'), u'js/one.js', u'<script src="/media/js/one.js" type="text/javascript"></script>'),
|
||||
(SOURCE_FILE, os.path.join(settings.COMPRESS_ROOT, u'js', u'one.js'), u'js/one.js', u'<script src="/static/js/one.js" type="text/javascript"></script>'),
|
||||
(SOURCE_HUNK, u'obj.value = "value";', None, u'<script type="text/javascript">obj.value = "value";</script>'),
|
||||
]
|
||||
split = self.js_node.split_contents()
|
||||
|
||||
@@ -14,13 +14,13 @@ class PostCompressSignalTestCase(TestCase):
|
||||
settings.COMPRESS_PRECOMPILERS = {}
|
||||
settings.COMPRESS_DEBUG_TOGGLE = 'nocompress'
|
||||
self.css = """\
|
||||
<link rel="stylesheet" href="/media/css/one.css" type="text/css" />
|
||||
<link rel="stylesheet" href="/static/css/one.css" type="text/css" />
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" />"""
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" />"""
|
||||
self.css_node = CssCompressor(self.css)
|
||||
|
||||
self.js = """\
|
||||
<script src="/media/js/one.js" type="text/javascript"></script>
|
||||
<script src="/static/js/one.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">obj.value = "value";</script>"""
|
||||
self.js_node = JsCompressor(self.js)
|
||||
|
||||
@@ -55,9 +55,9 @@ class PostCompressSignalTestCase(TestCase):
|
||||
|
||||
def test_css_signal_multiple_media_attributes(self):
|
||||
css = """\
|
||||
<link rel="stylesheet" href="/media/css/one.css" media="handheld" type="text/css" />
|
||||
<link rel="stylesheet" href="/static/css/one.css" media="handheld" type="text/css" />
|
||||
<style type="text/css" media="print">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="/media/css/two.css" type="text/css" />"""
|
||||
<link rel="stylesheet" href="/static/css/two.css" type="text/css" />"""
|
||||
css_node = CssCompressor(css)
|
||||
|
||||
def listener(sender, **kwargs):
|
||||
|
||||
@@ -24,13 +24,13 @@ class StorageTestCase(TestCase):
|
||||
|
||||
def test_css_tag_with_storage(self):
|
||||
template = u"""{% load compress %}{% compress css %}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/one.css" type="text/css">
|
||||
<style type="text/css">p { border:5px solid white;}</style>
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/two.css" type="text/css">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/two.css" type="text/css">
|
||||
{% endcompress %}
|
||||
"""
|
||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/media/CACHE/css/1d4424458f88.css")
|
||||
context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
out = css_tag("/static/CACHE/css/1d4424458f88.css")
|
||||
self.assertEqual(out, render(template, context))
|
||||
|
||||
def test_race_condition_handling(self):
|
||||
|
||||
@@ -28,7 +28,7 @@ class TemplatetagTestCase(TestCase):
|
||||
def setUp(self):
|
||||
self.old_enabled = settings.COMPRESS_ENABLED
|
||||
settings.COMPRESS_ENABLED = True
|
||||
self.context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
self.context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
|
||||
def tearDown(self):
|
||||
settings.COMPRESS_ENABLED = self.old_enabled
|
||||
@@ -40,58 +40,58 @@ class TemplatetagTestCase(TestCase):
|
||||
|
||||
def test_css_tag(self):
|
||||
template = u"""{% load compress %}{% compress css %}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/one.css" type="text/css">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/two.css" type="text/css">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/two.css" type="text/css">
|
||||
{% endcompress %}"""
|
||||
out = css_tag("/media/CACHE/css/e41ba2cc6982.css")
|
||||
out = css_tag("/static/CACHE/css/e41ba2cc6982.css")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
maxDiff = None
|
||||
|
||||
def test_uppercase_rel(self):
|
||||
template = u"""{% load compress %}{% compress css %}
|
||||
<link rel="StyleSheet" href="{{ MEDIA_URL }}css/one.css" type="text/css">
|
||||
<link rel="StyleSheet" href="{{ STATIC_URL }}css/one.css" type="text/css">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
<link rel="StyleSheet" href="{{ MEDIA_URL }}css/two.css" type="text/css">
|
||||
<link rel="StyleSheet" href="{{ STATIC_URL }}css/two.css" type="text/css">
|
||||
{% endcompress %}"""
|
||||
out = css_tag("/media/CACHE/css/e41ba2cc6982.css")
|
||||
out = css_tag("/static/CACHE/css/e41ba2cc6982.css")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_nonascii_css_tag(self):
|
||||
template = u"""{% load compress %}{% compress css %}
|
||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/nonasc.css" type="text/css">
|
||||
<link rel="stylesheet" href="{{ STATIC_URL }}css/nonasc.css" type="text/css">
|
||||
<style type="text/css">p { border:5px solid green;}</style>
|
||||
{% endcompress %}
|
||||
"""
|
||||
out = css_tag("/media/CACHE/css/799f6defe43c.css")
|
||||
out = css_tag("/static/CACHE/css/799f6defe43c.css")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_js_tag(self):
|
||||
template = u"""{% load compress %}{% compress js %}
|
||||
<script src="{{ MEDIA_URL }}js/one.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/one.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">obj.value = "value";</script>
|
||||
{% endcompress %}
|
||||
"""
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/066cd253eada.js"></script>'
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_nonascii_js_tag(self):
|
||||
template = u"""{% load compress %}{% compress js %}
|
||||
<script src="{{ MEDIA_URL }}js/nonasc.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/nonasc.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">var test_value = "\u2014";</script>
|
||||
{% endcompress %}
|
||||
"""
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/e214fe629b28.js"></script>'
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/e214fe629b28.js"></script>'
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_nonascii_latin1_js_tag(self):
|
||||
template = u"""{% load compress %}{% compress js %}
|
||||
<script src="{{ MEDIA_URL }}js/nonasc-latin1.js" type="text/javascript" charset="latin-1"></script>
|
||||
<script src="{{ STATIC_URL }}js/nonasc-latin1.js" type="text/javascript" charset="latin-1"></script>
|
||||
<script type="text/javascript">var test_value = "\u2014";</script>
|
||||
{% endcompress %}
|
||||
"""
|
||||
out = u'<script type="text/javascript" src="/media/CACHE/js/be9e078b5ca7.js"></script>'
|
||||
out = u'<script type="text/javascript" src="/static/CACHE/js/be9e078b5ca7.js"></script>'
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_compress_tag_with_illegal_arguments(self):
|
||||
@@ -102,7 +102,7 @@ class TemplatetagTestCase(TestCase):
|
||||
|
||||
def test_debug_toggle(self):
|
||||
template = u"""{% load compress %}{% compress js %}
|
||||
<script src="{{ MEDIA_URL }}js/one.js" type="text/javascript"></script>
|
||||
<script src="{{ STATIC_URL }}js/one.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">obj.value = "value";</script>
|
||||
{% endcompress %}
|
||||
"""
|
||||
@@ -111,7 +111,7 @@ class TemplatetagTestCase(TestCase):
|
||||
GET = {settings.COMPRESS_DEBUG_TOGGLE: 'true'}
|
||||
|
||||
context = dict(self.context, request=MockDebugRequest())
|
||||
out = u"""<script src="/media/js/one.js" type="text/javascript"></script>
|
||||
out = u"""<script src="/static/js/one.js" type="text/javascript"></script>
|
||||
<script type="text/javascript">obj.value = "value";</script>"""
|
||||
self.assertEqual(out, render(template, context))
|
||||
|
||||
@@ -144,7 +144,7 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
('text/coffeescript', '%s %s' % (python, precompiler)),
|
||||
('text/less', '%s %s' % (python, precompiler)),
|
||||
)
|
||||
self.context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||
self.context = {'STATIC_URL': settings.COMPRESS_URL}
|
||||
|
||||
def tearDown(self):
|
||||
settings.COMPRESS_ENABLED = self.old_enabled
|
||||
@@ -154,7 +154,7 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
template = u"""{% load compress %}{% compress js %}
|
||||
<script type="text/coffeescript"># this is a comment.</script>
|
||||
{% endcompress %}"""
|
||||
out = script(src="/media/CACHE/js/e920d58f166d.js")
|
||||
out = script(src="/static/CACHE/js/e920d58f166d.js")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_compress_coffeescript_tag_and_javascript_tag(self):
|
||||
@@ -162,7 +162,7 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
<script type="text/coffeescript"># this is a comment.</script>
|
||||
<script type="text/javascript"># this too is a comment.</script>
|
||||
{% endcompress %}"""
|
||||
out = script(src="/media/CACHE/js/ef6b32a54575.js")
|
||||
out = script(src="/static/CACHE/js/ef6b32a54575.js")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
|
||||
def test_coffeescript_and_js_tag_with_compress_enabled_equals_false(self):
|
||||
@@ -197,11 +197,11 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
try:
|
||||
template = u"""
|
||||
{% load compress %}{% compress js %}
|
||||
<script type="text/coffeescript" src="{{ MEDIA_URL }}js/one.coffee">
|
||||
<script type="text/coffeescript" src="{{ STATIC_URL }}js/one.coffee">
|
||||
</script>
|
||||
{% endcompress %}"""
|
||||
|
||||
out = script(src="/media/CACHE/js/one.95cfb869eead.js")
|
||||
out = script(src="/static/CACHE/js/one.95cfb869eead.js")
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
finally:
|
||||
settings.COMPRESS_ENABLED = self.old_enabled
|
||||
@@ -212,16 +212,16 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
try:
|
||||
template = u"""
|
||||
{% load compress %}{% compress js %}
|
||||
<script type="text/coffeescript" src="{{ MEDIA_URL }}js/one.coffee">
|
||||
<script type="text/coffeescript" src="{{ STATIC_URL }}js/one.coffee">
|
||||
</script>
|
||||
<script src="{{ MEDIA_URL }}js/one.js"></script>
|
||||
<script type="text/coffeescript" src="{{ MEDIA_URL }}js/one.js">
|
||||
<script src="{{ STATIC_URL }}js/one.js"></script>
|
||||
<script type="text/coffeescript" src="{{ STATIC_URL }}js/one.js">
|
||||
</script>
|
||||
{% endcompress %}"""
|
||||
|
||||
out = '\n'.join([script(src="/media/CACHE/js/one.95cfb869eead.js"),
|
||||
script(scripttype="", src="/media/js/one.js"),
|
||||
script(src="/media/CACHE/js/one.81a2cd965815.js")])
|
||||
out = '\n'.join([script(src="/static/CACHE/js/one.95cfb869eead.js"),
|
||||
script(scripttype="", src="/static/js/one.js"),
|
||||
script(src="/static/CACHE/js/one.81a2cd965815.js")])
|
||||
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
finally:
|
||||
@@ -234,12 +234,12 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
try:
|
||||
template = u"""
|
||||
{% load compress %}{% compress css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/one.css"></link>
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/two.css"></link>
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/one.css"></link>
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/two.css"></link>
|
||||
{% endcompress %}"""
|
||||
|
||||
out = ''.join(['<link rel="stylesheet" type="text/css" href="/media/css/one.css" />',
|
||||
'<link rel="stylesheet" type="text/css" href="/media/css/two.css" />'])
|
||||
out = ''.join(['<link rel="stylesheet" type="text/css" href="/static/css/one.css" />',
|
||||
'<link rel="stylesheet" type="text/css" href="/static/css/two.css" />'])
|
||||
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
finally:
|
||||
@@ -252,14 +252,14 @@ class PrecompilerTemplatetagTestCase(TestCase):
|
||||
try:
|
||||
template = u"""
|
||||
{% load compress %}{% compress css %}
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/one.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}css/two.css"/>
|
||||
<link rel="stylesheet" type="text/less" href="{{ MEDIA_URL }}css/url/test.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/one.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/two.css"/>
|
||||
<link rel="stylesheet" type="text/less" href="{{ STATIC_URL }}css/url/test.css"/>
|
||||
{% endcompress %}"""
|
||||
|
||||
out = ''.join(['<link rel="stylesheet" type="text/css" href="/media/css/one.css" />',
|
||||
'<link rel="stylesheet" type="text/css" href="/media/css/two.css" />',
|
||||
'<link rel="stylesheet" href="/media/CACHE/css/test.c4f8a285c249.css" type="text/css" />'])
|
||||
out = ''.join(['<link rel="stylesheet" type="text/css" href="/static/css/one.css" />',
|
||||
'<link rel="stylesheet" type="text/css" href="/static/css/two.css" />',
|
||||
'<link rel="stylesheet" href="/static/CACHE/css/test.5dddc6c2fb5a.css" type="text/css" />'])
|
||||
self.assertEqual(out, render(template, self.context))
|
||||
finally:
|
||||
settings.COMPRESS_ENABLED = self.old_enabled
|
||||
|
||||
@@ -18,7 +18,7 @@ Installation
|
||||
* See the list of :ref:`settings` to modify Django Compressor's
|
||||
default behaviour and make adjustments for your website.
|
||||
|
||||
* In case you use Django 1.3's staticfiles_ contrib app (or its standalone
|
||||
* In case you use Django's staticfiles_ contrib app (or its standalone
|
||||
counterpart django-staticfiles_) you have to add Django Compressor's file
|
||||
finder to the ``STATICFILES_FINDERS`` setting, for example with
|
||||
``django.contrib.staticfiles``:
|
||||
|
||||
@@ -39,7 +39,7 @@ The storage backend to save the compressed files needs to be changed, too::
|
||||
Using staticfiles
|
||||
^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you are using Django 1.3's staticfiles_ contrib app or the standalone
|
||||
If you are using Django's staticfiles_ contrib app or the standalone
|
||||
app django-staticfiles_, you'll need to use a temporary filesystem cache
|
||||
for Django Compressor to know which files to compress. Since staticfiles
|
||||
provides a management command to collect static files from various
|
||||
|
||||
@@ -43,30 +43,20 @@ Base settings
|
||||
|
||||
.. attribute:: COMPRESS_URL
|
||||
|
||||
:Default: ``STATIC_URL`` (``MEDIA_URL`` for older Django versions)
|
||||
:Default: ``STATIC_URL``
|
||||
|
||||
Controls the URL that linked files will be read from and compressed files
|
||||
will be written to.
|
||||
|
||||
.. note::
|
||||
|
||||
This setting defaults to ``MEDIA_URL`` in case ``STATIC_URL``
|
||||
is not given or empty, e.g. on older Django versions (< 1.3).
|
||||
|
||||
.. attribute:: COMPRESS_ROOT
|
||||
|
||||
:Default: ``STATIC_ROOT`` (``MEDIA_ROOT`` for older Django versions)
|
||||
:Default: ``STATIC_ROOT``
|
||||
|
||||
Controls the absolute file path that linked static will be read from and
|
||||
compressed static will be written to when using the default
|
||||
:attr:`~django.conf.settings.COMPRESS_STORAGE`
|
||||
``compressor.storage.CompressorFileStorage``.
|
||||
|
||||
.. note::
|
||||
|
||||
This setting defaults to ``MEDIA_ROOT`` in case ``STATIC_ROOT``
|
||||
is not given, e.g. on older Django versions (< 1.3).
|
||||
|
||||
.. attribute:: COMPRESS_OUTPUT_DIR
|
||||
|
||||
:Default: ``'CACHE'``
|
||||
@@ -422,7 +412,7 @@ Offline settings
|
||||
|
||||
.. attribute:: COMPRESS_OFFLINE_CONTEXT
|
||||
|
||||
:Default: ``{'MEDIA_URL': settings.MEDIA_URL}``
|
||||
:Default: ``{'STATIC_URL': settings.STATIC_URL}``
|
||||
|
||||
The context to be used by the ``compress`` management command when rendering
|
||||
the contents of ``{% compress %}`` template tags and saving the result in the
|
||||
|
||||
@@ -145,8 +145,7 @@ command::
|
||||
}
|
||||
|
||||
If not specified, the ``COMPRESS_OFFLINE_CONTEXT`` will by default contain
|
||||
the commonly used setting to refer to saved files ``MEDIA_URL`` and
|
||||
``STATIC_URL`` (if specified in the settings).
|
||||
the commonly used setting to refer to saved files ``STATIC_URL``.
|
||||
|
||||
The result of running the ``compress`` management command will be cached
|
||||
in a file called ``manifest.json`` using the :attr:`configured storage
|
||||
|
||||
Reference in New Issue
Block a user