Merge pull request #571 from blueyed/handle-typerror-from-import_module
Handle TypeError from import_module
This commit is contained in:
@@ -253,7 +253,7 @@ class Compressor(object):
|
||||
mod_name, cls_name = get_mod_func(filter_or_command)
|
||||
try:
|
||||
mod = import_module(mod_name)
|
||||
except ImportError:
|
||||
except (ImportError, TypeError):
|
||||
filter = CompilerFilter(
|
||||
content, filter_type=self.type, filename=filename,
|
||||
charset=charset, command=filter_or_command)
|
||||
|
@@ -49,7 +49,7 @@ def get_cachekey(*args, **kwargs):
|
||||
mod_name, func_name = get_mod_func(
|
||||
settings.COMPRESS_CACHE_KEY_FUNCTION)
|
||||
_cachekey_func = getattr(import_module(mod_name), func_name)
|
||||
except (AttributeError, ImportError) as e:
|
||||
except (AttributeError, ImportError, TypeError) as e:
|
||||
raise ImportError("Couldn't import cache key function %s: %s" %
|
||||
(settings.COMPRESS_CACHE_KEY_FUNCTION, e))
|
||||
return _cachekey_func(*args, **kwargs)
|
||||
|
@@ -83,7 +83,7 @@ class CallbackOutputFilter(FilterBase):
|
||||
try:
|
||||
mod_name, func_name = get_mod_func(self.callback)
|
||||
func = getattr(import_module(mod_name), func_name)
|
||||
except ImportError:
|
||||
except (ImportError, TypeError):
|
||||
if self.dependencies:
|
||||
if len(self.dependencies) == 1:
|
||||
warning = "dependency (%s) is" % self.dependencies[0]
|
||||
|
@@ -137,7 +137,7 @@ class Command(NoArgsCommand):
|
||||
if get_template_sources is None:
|
||||
get_template_sources = loader.get_template_sources
|
||||
paths.update(list(get_template_sources('')))
|
||||
except (ImportError, AttributeError):
|
||||
except (ImportError, AttributeError, TypeError):
|
||||
# Yeah, this didn't work out so well, let's move on
|
||||
pass
|
||||
if not paths:
|
||||
|
@@ -33,5 +33,5 @@ class AutoSelectParser(LazyObject):
|
||||
import_module(dependency)
|
||||
self._wrapped = parser(content)
|
||||
break
|
||||
except ImportError:
|
||||
except (ImportError, TypeError):
|
||||
continue
|
||||
|
@@ -12,11 +12,13 @@ from django.core.cache.backends import locmem
|
||||
from django.test import SimpleTestCase
|
||||
from django.test.utils import override_settings
|
||||
|
||||
from compressor.base import SOURCE_HUNK, SOURCE_FILE
|
||||
from compressor import cache as cachemod
|
||||
from compressor.base import SOURCE_FILE, SOURCE_HUNK
|
||||
from compressor.cache import get_cachekey
|
||||
from compressor.conf import settings
|
||||
from compressor.css import CssCompressor
|
||||
from compressor.exceptions import FilterDoesNotExist, FilterError
|
||||
from compressor.js import JsCompressor
|
||||
from compressor.exceptions import FilterDoesNotExist
|
||||
|
||||
|
||||
def make_soup(markup):
|
||||
@@ -216,6 +218,14 @@ class CompressorTestCase(SimpleTestCase):
|
||||
css_node = CssCompressor(css)
|
||||
self.assertRaises(FilterDoesNotExist, css_node.output, 'inline')
|
||||
|
||||
@override_settings(COMPRESS_PRECOMPILERS=(
|
||||
('text/foobar', './foo -I ./bar/baz'),
|
||||
), COMPRESS_ENABLED=True)
|
||||
def test_command_with_dot_precompiler(self):
|
||||
css = '<style type="text/foobar">p { border:10px solid red;}</style>'
|
||||
css_node = CssCompressor(css)
|
||||
self.assertRaises(FilterError, css_node.output, 'inline')
|
||||
|
||||
|
||||
class CssMediaTestCase(SimpleTestCase):
|
||||
def setUp(self):
|
||||
@@ -304,3 +314,20 @@ class JsAsyncDeferTestCase(SimpleTestCase):
|
||||
scripts = make_soup(js_node.output()).findAll('script')
|
||||
attrs = [s.get('async') or s.get('defer') for s in scripts]
|
||||
self.assertEqual(output, attrs)
|
||||
|
||||
|
||||
class CacheTestCase(SimpleTestCase):
|
||||
|
||||
def setUp(self):
|
||||
cachemod._cachekey_func = None
|
||||
|
||||
def test_get_cachekey_basic(self):
|
||||
self.assertEqual(get_cachekey("foo"), "django_compressor.foo")
|
||||
|
||||
@override_settings(COMPRESS_CACHE_KEY_FUNCTION='.leading.dot')
|
||||
def test_get_cachekey_leading_dot(self):
|
||||
self.assertRaises(ImportError, lambda: get_cachekey("foo"))
|
||||
|
||||
@override_settings(COMPRESS_CACHE_KEY_FUNCTION='invalid.module')
|
||||
def test_get_cachekey_invalid_mod(self):
|
||||
self.assertRaises(ImportError, lambda: get_cachekey("foo"))
|
||||
|
Reference in New Issue
Block a user