Merge pull request #657 from karyon/remove_silent_exception_catching

remove silent exception catching
This commit is contained in:
Mathieu Pillard
2015-09-14 21:42:18 +02:00
9 changed files with 85 additions and 91 deletions

View File

@@ -103,19 +103,11 @@ class CompressorMixin(object):
if cache_content is not None: if cache_content is not None:
return cache_content return cache_content
# call compressor output method and handle exceptions
try:
rendered_output = self.render_output(compressor, mode, forced=forced) rendered_output = self.render_output(compressor, mode, forced=forced)
assert isinstance(rendered_output, six.string_types)
if cache_key: if cache_key:
cache_set(cache_key, rendered_output) cache_set(cache_key, rendered_output)
assert isinstance(rendered_output, six.string_types)
return rendered_output return rendered_output
except Exception:
if settings.DEBUG or forced:
raise
# Or don't do anything in production
return self.get_original_content(context)
def render_output(self, compressor, mode, forced=False): def render_output(self, compressor, mode, forced=False):
return compressor.output(mode, forced=forced) return compressor.output(mode, forced=forced)

View File

@@ -128,8 +128,8 @@ class CompressorTestCase(SimpleTestCase):
self.assertTrue(is_date.match(str(float(date))), self.assertTrue(is_date.match(str(float(date))),
"mtimes is returning something that doesn't look like a date: %s" % date) "mtimes is returning something that doesn't look like a date: %s" % date)
@override_settings(COMPRESS_ENABLED=False)
def test_css_return_if_off(self): def test_css_return_if_off(self):
settings.COMPRESS_ENABLED = False
self.assertEqualCollapsed(self.css, self.css_node.output()) self.assertEqualCollapsed(self.css, self.css_node.output())
def test_cachekey(self): def test_cachekey(self):

View File

@@ -47,6 +47,7 @@ class CssTidyTestCase(TestCase):
"font,th,td,p{color:#000;}", CSSTidyFilter(content).input()) "font,th,td,p{color:#000;}", CSSTidyFilter(content).input())
@override_settings(COMPRESS_CACHEABLE_PRECOMPILERS=('text/css',))
class PrecompilerTestCase(TestCase): class PrecompilerTestCase(TestCase):
def setUp(self): def setUp(self):
self.test_precompiler = os.path.join(test_dir, 'precompiler.py') self.test_precompiler = os.path.join(test_dir, 'precompiler.py')
@@ -54,7 +55,6 @@ class PrecompilerTestCase(TestCase):
self.cached_precompiler_args = dict( self.cached_precompiler_args = dict(
content=self.content, charset=settings.FILE_CHARSET, content=self.content, charset=settings.FILE_CHARSET,
filename=self.filename, mimetype='text/css') filename=self.filename, mimetype='text/css')
settings.COMPRESS_CACHEABLE_PRECOMPILERS = ('text/css',)
def setup_infile(self, filename='static/css/one.css'): def setup_infile(self, filename='static/css/one.css'):
self.filename = os.path.join(test_dir, filename) self.filename = os.path.join(test_dir, filename)
@@ -197,6 +197,10 @@ class JsMinTestCase(TestCase):
self.assertEqual(output, JSMinFilter(content).output()) self.assertEqual(output, JSMinFilter(content).output())
@override_settings(
COMPRESS_ENABLED=True,
COMPRESS_URL='/static/',
)
class CssAbsolutizingTestCase(TestCase): class CssAbsolutizingTestCase(TestCase):
hashing_method = 'mtime' hashing_method = 'mtime'
hashing_func = staticmethod(get_hashed_mtime) hashing_func = staticmethod(get_hashed_mtime)
@@ -204,11 +208,7 @@ class CssAbsolutizingTestCase(TestCase):
"p { filter: Alpha(src='%(url)simg/python.png%(query)s%(hash)s%(frag)s') }") "p { filter: Alpha(src='%(url)simg/python.png%(query)s%(hash)s%(frag)s') }")
def setUp(self): def setUp(self):
self.old_enabled = settings.COMPRESS_ENABLED
self.old_url = settings.COMPRESS_URL
self.old_hashing_method = settings.COMPRESS_CSS_HASHING_METHOD self.old_hashing_method = settings.COMPRESS_CSS_HASHING_METHOD
settings.COMPRESS_ENABLED = True
settings.COMPRESS_URL = '/static/'
settings.COMPRESS_CSS_HASHING_METHOD = self.hashing_method settings.COMPRESS_CSS_HASHING_METHOD = self.hashing_method
self.css = """ self.css = """
<link rel="stylesheet" href="/static/css/url/url1.css" type="text/css"> <link rel="stylesheet" href="/static/css/url/url1.css" type="text/css">
@@ -217,12 +217,10 @@ class CssAbsolutizingTestCase(TestCase):
self.css_node = CssCompressor(self.css) self.css_node = CssCompressor(self.css)
def tearDown(self): def tearDown(self):
settings.COMPRESS_ENABLED = self.old_enabled
settings.COMPRESS_URL = self.old_url
settings.COMPRESS_CSS_HASHING_METHOD = self.old_hashing_method settings.COMPRESS_CSS_HASHING_METHOD = self.old_hashing_method
@override_settings(COMPRESS_CSS_HASHING_METHOD=None)
def test_css_no_hash(self): def test_css_no_hash(self):
settings.COMPRESS_CSS_HASHING_METHOD = None
filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css') filename = os.path.join(settings.COMPRESS_ROOT, 'css/url/test.css')
content = self.template % blankdict(url='../../') content = self.template % blankdict(url='../../')
params = blankdict({ params = blankdict({
@@ -232,7 +230,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'http://static.example.com/' with self.settings(COMPRESS_URL='http://static.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -249,7 +248,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'http://static.example.com/' with self.settings(COMPRESS_URL='http://static.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -267,7 +267,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'http://media.example.com/' with self.settings(COMPRESS_URL='http://media.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -278,7 +279,7 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = 'http://media.example.com/' with self.settings(COMPRESS_URL='http://media.example.com/'):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(content, filter.input(filename=filename, basename='css/url/test.css'))
@@ -295,7 +296,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'http://media.example.com/' with self.settings(COMPRESS_URL='http://media.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -312,7 +314,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'https://static.example.com/' with self.settings(COMPRESS_URL='https://static.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -329,7 +332,8 @@ class CssAbsolutizingTestCase(TestCase):
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
settings.COMPRESS_URL = params['url'] = 'https://static.example.com/' with self.settings(COMPRESS_URL='https://static.example.com/'):
params['url'] = settings.COMPRESS_URL
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='css/url/test.css'))
@@ -343,7 +347,8 @@ class CssAbsolutizingTestCase(TestCase):
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
self.assertEqual(output, filter.input(filename=filename, basename='bar/baz/test.css')) self.assertEqual(output, filter.input(filename=filename, basename='bar/baz/test.css'))
settings.COMPRESS_URL = 'https://static.example.com/'
with self.settings(COMPRESS_URL='https://static.example.com/'):
params['url'] = settings.COMPRESS_URL + 'bar/qux/' params['url'] = settings.COMPRESS_URL + 'bar/qux/'
output = self.template % params output = self.template % params
filter = CssAbsoluteFilter(content) filter = CssAbsoluteFilter(content)
@@ -371,7 +376,7 @@ p { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/static/img/
def test_guess_filename(self): def test_guess_filename(self):
for base_url in ('/static/', 'http://static.example.com/'): for base_url in ('/static/', 'http://static.example.com/'):
settings.COMPRESS_URL = base_url with self.settings(COMPRESS_URL=base_url):
url = '%s/img/python.png' % settings.COMPRESS_URL.rstrip('/') url = '%s/img/python.png' % settings.COMPRESS_URL.rstrip('/')
path = os.path.join(settings.COMPRESS_ROOT, 'img/python.png') path = os.path.join(settings.COMPRESS_ROOT, 'img/python.png')
content = "p { background: url('%s') }" % url content = "p { background: url('%s') }" % url
@@ -384,15 +389,17 @@ class CssAbsolutizingTestCaseWithHash(CssAbsolutizingTestCase):
hashing_func = staticmethod(get_hashed_content) hashing_func = staticmethod(get_hashed_content)
class CssDataUriTestCase(TestCase): @override_settings(
def setUp(self): COMPRESS_ENABLED=True,
settings.COMPRESS_ENABLED = True COMPRESS_CSS_FILTERS=[
settings.COMPRESS_CSS_FILTERS = [
'compressor.filters.css_default.CssAbsoluteFilter', 'compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.datauri.CssDataUriFilter', 'compressor.filters.datauri.CssDataUriFilter',
] ],
settings.COMPRESS_URL = '/static/' COMPRESS_URL='/static/',
settings.COMPRESS_CSS_HASHING_METHOD = 'mtime' COMPRESS_CSS_HASHING_METHOD='mtime'
)
class CssDataUriTestCase(TestCase):
def setUp(self):
self.css = """ self.css = """
<link rel="stylesheet" href="/static/css/datauri.css" type="text/css"> <link rel="stylesheet" href="/static/css/datauri.css" type="text/css">
""" """

View File

@@ -11,7 +11,7 @@ from compressor.conf import settings
from compressor.tests.test_base import css_tag from compressor.tests.test_base import css_tag
@unittest.skipUnless(not six.PY3 or sys.version_info[:2] >= (3, 3), @unittest.skipIf(six.PY3 and sys.version_info[:2] < (3, 3),
'Jinja can only run on Python < 3 and >= 3.3') 'Jinja can only run on Python < 3 and >= 3.3')
class TestJinja2CompressorExtension(TestCase): class TestJinja2CompressorExtension(TestCase):
""" """
@@ -143,13 +143,11 @@ class TestJinja2CompressorExtension(TestCase):
self.assertEqual(out, template.render(context)) self.assertEqual(out, template.render(context))
def test_nonascii_inline_css(self): def test_nonascii_inline_css(self):
org_COMPRESS_ENABLED = settings.COMPRESS_ENABLED with self.settings(COMPRESS_ENABLED=False):
settings.COMPRESS_ENABLED = False
template = self.env.from_string('{% compress css %}' template = self.env.from_string('{% compress css %}'
'<style type="text/css">' '<style type="text/css">'
'/* русский текст */' '/* русский текст */'
'</style>{% endcompress %}') '</style>{% endcompress %}')
out = '<link rel="stylesheet" href="/static/CACHE/css/b2cec0f8cb24.css" type="text/css" />' out = '<link rel="stylesheet" href="/static/CACHE/css/b2cec0f8cb24.css" type="text/css" />'
settings.COMPRESS_ENABLED = org_COMPRESS_ENABLED
context = {'STATIC_URL': settings.COMPRESS_URL} context = {'STATIC_URL': settings.COMPRESS_URL}
self.assertEqual(out, template.render(context)) self.assertEqual(out, template.render(context))

View File

@@ -217,7 +217,7 @@ class OfflineGenerationConditionTestCase(OfflineTestCaseMixin, TestCase):
super(OfflineGenerationConditionTestCase, self).setUp() super(OfflineGenerationConditionTestCase, self).setUp()
def tearDown(self): def tearDown(self):
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context settings.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
super(OfflineGenerationConditionTestCase, self).tearDown() super(OfflineGenerationConditionTestCase, self).tearDown()
@@ -406,7 +406,7 @@ class OfflineGenerationInlineNonAsciiTestCase(OfflineTestCaseMixin, TestCase):
super(OfflineGenerationInlineNonAsciiTestCase, self).setUp() super(OfflineGenerationInlineNonAsciiTestCase, self).setUp()
def tearDown(self): def tearDown(self):
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context settings.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
super(OfflineGenerationInlineNonAsciiTestCase, self).tearDown() super(OfflineGenerationInlineNonAsciiTestCase, self).tearDown()
def _test_offline(self, engine): def _test_offline(self, engine):
@@ -429,7 +429,7 @@ class OfflineGenerationComplexTestCase(OfflineTestCaseMixin, TestCase):
super(OfflineGenerationComplexTestCase, self).setUp() super(OfflineGenerationComplexTestCase, self).setUp()
def tearDown(self): def tearDown(self):
self.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context settings.COMPRESS_OFFLINE_CONTEXT = self.old_offline_context
super(OfflineGenerationComplexTestCase, self).tearDown() super(OfflineGenerationComplexTestCase, self).tearDown()
def _test_offline(self, engine): def _test_offline(self, engine):

View File

@@ -101,8 +101,8 @@ class Html5LibParserTests(ParserTestCase, CompressorTestCase):
split[1][3].attrib, split[1][3].attrib,
split[1][3].text)) split[1][3].text))
@override_settings(COMPRESS_ENABLED=False)
def test_css_return_if_off(self): def test_css_return_if_off(self):
settings.COMPRESS_ENABLED = False
# Yes, they are semantically equal but attributes might be # Yes, they are semantically equal but attributes might be
# scrambled in unpredictable order. A more elaborate check # scrambled in unpredictable order. A more elaborate check
# would require parsing both arguments with a different parser # would require parsing both arguments with a different parser

View File

@@ -1,18 +1,20 @@
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings
from mock import Mock from mock import Mock
from compressor.conf import settings
from compressor.css import CssCompressor from compressor.css import CssCompressor
from compressor.js import JsCompressor from compressor.js import JsCompressor
from compressor.signals import post_compress from compressor.signals import post_compress
@override_settings(
COMPRESS_ENABLED=True,
COMPRESS_PRECOMPILERS=(),
COMPRESS_DEBUG_TOGGLE='nocompress'
)
class PostCompressSignalTestCase(TestCase): class PostCompressSignalTestCase(TestCase):
def setUp(self): def setUp(self):
settings.COMPRESS_ENABLED = True
settings.COMPRESS_PRECOMPILERS = ()
settings.COMPRESS_DEBUG_TOGGLE = 'nocompress'
self.css = """\ self.css = """\
<link rel="stylesheet" href="/static/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> <style type="text/css">p { border:5px solid green;}</style>

View File

@@ -5,6 +5,7 @@ import os
from django.core.files.base import ContentFile from django.core.files.base import ContentFile
from django.core.files.storage import get_storage_class from django.core.files.storage import get_storage_class
from django.test import TestCase from django.test import TestCase
from django.test.utils import override_settings
from django.utils.functional import LazyObject from django.utils.functional import LazyObject
from compressor import storage from compressor import storage
@@ -18,16 +19,14 @@ class GzipStorage(LazyObject):
self._wrapped = get_storage_class('compressor.storage.GzipCompressorFileStorage')() self._wrapped = get_storage_class('compressor.storage.GzipCompressorFileStorage')()
@override_settings(COMPRESS_ENABLED=True)
class StorageTestCase(TestCase): class StorageTestCase(TestCase):
def setUp(self): def setUp(self):
self.old_enabled = settings.COMPRESS_ENABLED
settings.COMPRESS_ENABLED = True
self.default_storage = storage.default_storage self.default_storage = storage.default_storage
storage.default_storage = GzipStorage() storage.default_storage = GzipStorage()
def tearDown(self): def tearDown(self):
storage.default_storage = self.default_storage storage.default_storage = self.default_storage
settings.COMPRESS_ENABLED = self.old_enabled
def test_gzip_storage(self): def test_gzip_storage(self):
storage.default_storage.save('test.txt', ContentFile('yeah yeah')) storage.default_storage.save('test.txt', ContentFile('yeah yeah'))

View File

@@ -25,15 +25,11 @@ def render(template_string, context_dict=None):
return t.render(c).strip() return t.render(c).strip()
@override_settings(COMPRESS_ENABLED=True)
class TemplatetagTestCase(TestCase): class TemplatetagTestCase(TestCase):
def setUp(self): def setUp(self):
self.old_enabled = settings.COMPRESS_ENABLED
settings.COMPRESS_ENABLED = True
self.context = {'STATIC_URL': settings.COMPRESS_URL} self.context = {'STATIC_URL': settings.COMPRESS_URL}
def tearDown(self):
settings.COMPRESS_ENABLED = self.old_enabled
def test_empty_tag(self): def test_empty_tag(self):
template = """{% load compress %}{% compress js %}{% block js %} template = """{% load compress %}{% compress js %}{% block js %}
{% endblock %}{% endcompress %}""" {% endblock %}{% endcompress %}"""