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)
|
mod_name, cls_name = get_mod_func(filter_or_command)
|
||||||
try:
|
try:
|
||||||
mod = import_module(mod_name)
|
mod = import_module(mod_name)
|
||||||
except ImportError:
|
except (ImportError, TypeError):
|
||||||
filter = CompilerFilter(
|
filter = CompilerFilter(
|
||||||
content, filter_type=self.type, filename=filename,
|
content, filter_type=self.type, filename=filename,
|
||||||
charset=charset, command=filter_or_command)
|
charset=charset, command=filter_or_command)
|
||||||
|
@@ -49,7 +49,7 @@ def get_cachekey(*args, **kwargs):
|
|||||||
mod_name, func_name = get_mod_func(
|
mod_name, func_name = get_mod_func(
|
||||||
settings.COMPRESS_CACHE_KEY_FUNCTION)
|
settings.COMPRESS_CACHE_KEY_FUNCTION)
|
||||||
_cachekey_func = getattr(import_module(mod_name), func_name)
|
_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" %
|
raise ImportError("Couldn't import cache key function %s: %s" %
|
||||||
(settings.COMPRESS_CACHE_KEY_FUNCTION, e))
|
(settings.COMPRESS_CACHE_KEY_FUNCTION, e))
|
||||||
return _cachekey_func(*args, **kwargs)
|
return _cachekey_func(*args, **kwargs)
|
||||||
|
@@ -83,7 +83,7 @@ class CallbackOutputFilter(FilterBase):
|
|||||||
try:
|
try:
|
||||||
mod_name, func_name = get_mod_func(self.callback)
|
mod_name, func_name = get_mod_func(self.callback)
|
||||||
func = getattr(import_module(mod_name), func_name)
|
func = getattr(import_module(mod_name), func_name)
|
||||||
except ImportError:
|
except (ImportError, TypeError):
|
||||||
if self.dependencies:
|
if self.dependencies:
|
||||||
if len(self.dependencies) == 1:
|
if len(self.dependencies) == 1:
|
||||||
warning = "dependency (%s) is" % self.dependencies[0]
|
warning = "dependency (%s) is" % self.dependencies[0]
|
||||||
|
@@ -137,7 +137,7 @@ class Command(NoArgsCommand):
|
|||||||
if get_template_sources is None:
|
if get_template_sources is None:
|
||||||
get_template_sources = loader.get_template_sources
|
get_template_sources = loader.get_template_sources
|
||||||
paths.update(list(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
|
# Yeah, this didn't work out so well, let's move on
|
||||||
pass
|
pass
|
||||||
if not paths:
|
if not paths:
|
||||||
|
@@ -33,5 +33,5 @@ class AutoSelectParser(LazyObject):
|
|||||||
import_module(dependency)
|
import_module(dependency)
|
||||||
self._wrapped = parser(content)
|
self._wrapped = parser(content)
|
||||||
break
|
break
|
||||||
except ImportError:
|
except (ImportError, TypeError):
|
||||||
continue
|
continue
|
||||||
|
@@ -12,11 +12,13 @@ from django.core.cache.backends import locmem
|
|||||||
from django.test import SimpleTestCase
|
from django.test import SimpleTestCase
|
||||||
from django.test.utils import override_settings
|
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.conf import settings
|
||||||
from compressor.css import CssCompressor
|
from compressor.css import CssCompressor
|
||||||
|
from compressor.exceptions import FilterDoesNotExist, FilterError
|
||||||
from compressor.js import JsCompressor
|
from compressor.js import JsCompressor
|
||||||
from compressor.exceptions import FilterDoesNotExist
|
|
||||||
|
|
||||||
|
|
||||||
def make_soup(markup):
|
def make_soup(markup):
|
||||||
@@ -216,6 +218,14 @@ class CompressorTestCase(SimpleTestCase):
|
|||||||
css_node = CssCompressor(css)
|
css_node = CssCompressor(css)
|
||||||
self.assertRaises(FilterDoesNotExist, css_node.output, 'inline')
|
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):
|
class CssMediaTestCase(SimpleTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@@ -304,3 +314,20 @@ class JsAsyncDeferTestCase(SimpleTestCase):
|
|||||||
scripts = make_soup(js_node.output()).findAll('script')
|
scripts = make_soup(js_node.output()).findAll('script')
|
||||||
attrs = [s.get('async') or s.get('defer') for s in scripts]
|
attrs = [s.get('async') or s.get('defer') for s in scripts]
|
||||||
self.assertEqual(output, attrs)
|
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