Code cleanups for the new Jinja2 contrib extension.
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
from jinja2 import nodes
|
from jinja2 import nodes
|
||||||
from jinja2.ext import Extension
|
from jinja2.ext import Extension
|
||||||
from jinja2.exceptions import TemplateSyntaxError
|
from jinja2.exceptions import TemplateSyntaxError
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
from compressor.conf import settings
|
from compressor.conf import settings
|
||||||
from compressor.utils import get_class
|
from compressor.utils import get_class
|
||||||
from compressor.templatetags.compress import OUTPUT_FILE
|
from compressor.templatetags.compress import OUTPUT_FILE
|
||||||
@@ -28,8 +30,9 @@ class CompressorExtension(Extension):
|
|||||||
kindarg = nodes.Const(kindarg.name)
|
kindarg = nodes.Const(kindarg.name)
|
||||||
args = [kindarg]
|
args = [kindarg]
|
||||||
if args[0].value not in self.compressors:
|
if args[0].value not in self.compressors:
|
||||||
raise TemplateSyntaxError('compress kind may be one of: %s'
|
raise TemplateSyntaxError('compress kind may be one of: %s' %
|
||||||
% (', '.join(self.compressors.keys())), lineno)
|
(', '.join(self.compressors.keys())),
|
||||||
|
lineno)
|
||||||
if parser.stream.skip_if('comma'):
|
if parser.stream.skip_if('comma'):
|
||||||
modearg = parser.parse_expression()
|
modearg = parser.parse_expression()
|
||||||
# Allow mode to be defined as jinja2 name node
|
# Allow mode to be defined as jinja2 name node
|
||||||
@@ -76,10 +79,7 @@ class CompressorExtension(Extension):
|
|||||||
and return a tuple of cache key and output
|
and return a tuple of cache key and output
|
||||||
"""
|
"""
|
||||||
if settings.COMPRESS_ENABLED and not forced:
|
if settings.COMPRESS_ENABLED and not forced:
|
||||||
cache_key = get_templatetag_cachekey(
|
cache_key = get_templatetag_cachekey(compressor, mode, kind)
|
||||||
compressor, mode, kind)
|
|
||||||
cache_content = cache_get(cache_key)
|
cache_content = cache_get(cache_key)
|
||||||
return cache_key, cache_content
|
return cache_key, cache_content
|
||||||
return None, None
|
return None, None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ Jinja2 Support
|
|||||||
|
|
||||||
Django Compressor comes with support for Jinja2_ via an extension.
|
Django Compressor comes with support for Jinja2_ via an extension.
|
||||||
|
|
||||||
|
|
||||||
Plain Jinja2
|
Plain Jinja2
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
|
from __future__ import with_statement
|
||||||
|
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from compressor.conf import settings
|
|
||||||
from unittest2 import skipIf
|
|
||||||
from .base import css_tag
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
import jinja2
|
import jinja2
|
||||||
except ImportError:
|
|
||||||
jinja2 = None
|
from compressor.conf import settings
|
||||||
|
|
||||||
|
from .base import css_tag
|
||||||
|
|
||||||
|
|
||||||
class TestJinja2CompressorExtension(TestCase):
|
class TestJinja2CompressorExtension(TestCase):
|
||||||
@@ -29,18 +28,16 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
self.env = jinja2.Environment(extensions=[CompressorExtension])
|
self.env = jinja2.Environment(extensions=[CompressorExtension])
|
||||||
|
|
||||||
def test_error_raised_if_no_arguments_given(self):
|
def test_error_raised_if_no_arguments_given(self):
|
||||||
with self.assertRaises(jinja2.exceptions.TemplateSyntaxError):
|
self.assertRaises(jinja2.exceptions.TemplateSyntaxError,
|
||||||
self.env.from_string('{% compress %}Foobar{% endcompress %}')
|
self.env.from_string, '{% compress %}Foobar{% endcompress %}')
|
||||||
|
|
||||||
def test_error_raised_if_wrong_kind_given(self):
|
def test_error_raised_if_wrong_kind_given(self):
|
||||||
with self.assertRaises(jinja2.exceptions.TemplateSyntaxError):
|
self.assertRaises(jinja2.exceptions.TemplateSyntaxError,
|
||||||
self.env.from_string('{% compress foo %}Foobar{% endcompress %}'
|
self.env.from_string, '{% compress foo %}Foobar{% endcompress %}')
|
||||||
).render()
|
|
||||||
|
|
||||||
def test_error_raised_if_wrong_mode_given(self):
|
def test_error_raised_if_wrong_mode_given(self):
|
||||||
with self.assertRaises(jinja2.exceptions.TemplateSyntaxError):
|
self.assertRaises(jinja2.exceptions.TemplateSyntaxError,
|
||||||
self.env.from_string('{% compress css foo %}Foobar{% endcompress %}'
|
self.env.from_string, '{% compress css foo %}Foobar{% endcompress %}')
|
||||||
).render()
|
|
||||||
|
|
||||||
def test_compress_is_disabled(self):
|
def test_compress_is_disabled(self):
|
||||||
org_COMPRESS_ENABLED = settings.COMPRESS_ENABLED
|
org_COMPRESS_ENABLED = settings.COMPRESS_ENABLED
|
||||||
@@ -66,7 +63,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css" charset="utf-8">
|
<link rel="stylesheet" href="{{ MEDIA_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||||
<style type="text/css">p { border:5px solid green;}</style>
|
<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="{{ MEDIA_URL }}css/two.css" type="text/css" charset="utf-8">
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = css_tag("/media/CACHE/css/e41ba2cc6982.css")
|
out = css_tag("/media/CACHE/css/e41ba2cc6982.css")
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
@@ -75,7 +72,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress css -%}
|
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="{{ MEDIA_URL }}css/nonasc.css" type="text/css" charset="utf-8">
|
||||||
<style type="text/css">p { border:5px solid green;}</style>
|
<style type="text/css">p { border:5px solid green;}</style>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = css_tag("/media/CACHE/css/799f6defe43c.css")
|
out = css_tag("/media/CACHE/css/799f6defe43c.css")
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
@@ -84,7 +81,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress js -%}
|
template = self.env.from_string(u"""{% compress js -%}
|
||||||
<script src="{{ MEDIA_URL }}js/one.js" type="text/javascript" charset="utf-8"></script>
|
<script src="{{ MEDIA_URL }}js/one.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
out = u'<script type="text/javascript" src="/media/CACHE/js/066cd253eada.js"></script>'
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
@@ -93,7 +90,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress js -%}
|
template = self.env.from_string(u"""{% compress js -%}
|
||||||
<script src="{{ MEDIA_URL }}js/nonasc.js" type="text/javascript" charset="utf-8"></script>
|
<script src="{{ MEDIA_URL }}js/nonasc.js" type="text/javascript" charset="utf-8"></script>
|
||||||
<script type="text/javascript" charset="utf-8">var test_value = "\u2014";</script>
|
<script type="text/javascript" charset="utf-8">var test_value = "\u2014";</script>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = u'<script type="text/javascript" src="/media/CACHE/js/e214fe629b28.js"></script>'
|
out = u'<script type="text/javascript" src="/media/CACHE/js/e214fe629b28.js"></script>'
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
@@ -102,7 +99,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress js -%}
|
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="{{ MEDIA_URL }}js/nonasc-latin1.js" type="text/javascript" charset="latin-1"></script>
|
||||||
<script type="text/javascript">var test_value = "\u2014";</script>
|
<script type="text/javascript">var test_value = "\u2014";</script>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = u'<script type="text/javascript" src="/media/CACHE/js/be9e078b5ca7.js"></script>'
|
out = u'<script type="text/javascript" src="/media/CACHE/js/be9e078b5ca7.js"></script>'
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
@@ -111,7 +108,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress css, inline -%}
|
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="{{ MEDIA_URL }}css/one.css" type="text/css" charset="utf-8">
|
||||||
<style type="text/css">p { border:5px solid green;}</style>
|
<style type="text/css">p { border:5px solid green;}</style>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = '\n'.join([
|
out = '\n'.join([
|
||||||
'<style type="text/css">body { background:#990; }',
|
'<style type="text/css">body { background:#990; }',
|
||||||
@@ -123,11 +120,7 @@ class TestJinja2CompressorExtension(TestCase):
|
|||||||
template = self.env.from_string(u"""{% compress js, inline -%}
|
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="{{ MEDIA_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>
|
<script type="text/javascript" charset="utf-8">obj.value = "value";</script>
|
||||||
{%- endcompress %}""")
|
{% endcompress %}""")
|
||||||
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
context = {'MEDIA_URL': settings.COMPRESS_URL}
|
||||||
out = '<script type="text/javascript">obj={};obj.value="value";</script>'
|
out = '<script type="text/javascript">obj={};obj.value="value";</script>'
|
||||||
self.assertEqual(out, template.render(context))
|
self.assertEqual(out, template.render(context))
|
||||||
|
|
||||||
TestJinja2CompressorExtension = skipIf(jinja2 is None, 'jinja2 not found')(
|
|
||||||
TestJinja2CompressorExtension)
|
|
||||||
|
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.2.5
|
django==1.2.5
|
||||||
|
|
||||||
[testenv:py26-1.2.X]
|
[testenv:py26-1.2.X]
|
||||||
@@ -40,6 +41,7 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.2.5
|
django==1.2.5
|
||||||
|
|
||||||
[testenv:py27-1.2.X]
|
[testenv:py27-1.2.X]
|
||||||
@@ -50,6 +52,7 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.2.5
|
django==1.2.5
|
||||||
|
|
||||||
|
|
||||||
@@ -61,6 +64,7 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.3
|
django==1.3
|
||||||
|
|
||||||
[testenv:py26-1.3.X]
|
[testenv:py26-1.3.X]
|
||||||
@@ -71,6 +75,7 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.3
|
django==1.3
|
||||||
|
|
||||||
[testenv:py27-1.3.X]
|
[testenv:py27-1.3.X]
|
||||||
@@ -81,4 +86,5 @@ deps =
|
|||||||
html5lib
|
html5lib
|
||||||
coverage
|
coverage
|
||||||
mock
|
mock
|
||||||
|
jinja2
|
||||||
django==1.3
|
django==1.3
|
||||||
|
|||||||
Reference in New Issue
Block a user