Code cleanups for the new Jinja2 contrib extension.

This commit is contained in:
Jannis Leidel
2011-09-21 12:16:24 +02:00
parent a203d6bb2f
commit db122ce116
4 changed files with 40 additions and 42 deletions

View File

@@ -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

View File

@@ -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
------------ ------------

View File

@@ -1,15 +1,14 @@
from __future__ import with_statement
from django.test import TestCase from django.test import TestCase
import jinja2
from compressor.conf import settings from compressor.conf import settings
from unittest2 import skipIf
from .base import css_tag from .base import css_tag
try:
import jinja2
except ImportError:
jinja2 = None
class TestJinja2CompressorExtension(TestCase): class TestJinja2CompressorExtension(TestCase):
""" """
Test case for jinja2 extension. Test case for jinja2 extension.
@@ -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
@@ -58,7 +55,7 @@ class TestJinja2CompressorExtension(TestCase):
def test_empty_tag(self): def test_empty_tag(self):
template = self.env.from_string(u"""{% compress js %}{% block js %} template = self.env.from_string(u"""{% compress js %}{% block js %}
{% endblock %}{% endcompress %}""") {% endblock %}{% endcompress %}""")
context = {'MEDIA_URL': settings.COMPRESS_URL } context = {'MEDIA_URL': settings.COMPRESS_URL}
self.assertEqual(u'', template.render(context)) self.assertEqual(u'', template.render(context))
def test_css_tag(self): def test_css_tag(self):
@@ -66,8 +63,8 @@ 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,8 +72,8 @@ 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,8 +81,8 @@ 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,8 +90,8 @@ 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,8 +99,8 @@ 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,8 +108,8 @@ 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; }',
'p { border:5px solid green;}</style>', 'p { border:5px solid green;}</style>',
@@ -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)

View File

@@ -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