Apply CssAbsoluteFilter to precompiled css even when compression is disabled

fixes #226, fixes #296
This commit is contained in:
Johannes Linke
2015-09-11 16:09:12 +02:00
parent 8a2b0c6fa4
commit 0d159cb45f

View File

@@ -21,6 +21,7 @@ from compressor.conf import settings
from compressor.exceptions import (CompressorError, UncompressableFileError,
FilterDoesNotExist)
from compressor.filters import CachedCompilerFilter
from compressor.filters.css_default import CssAbsoluteFilter
from compressor.storage import compressor_file_storage
from compressor.signals import post_compress
from compressor.utils import get_class, get_mod_func, staticfiles
@@ -211,9 +212,13 @@ class Compressor(object):
precompiled, value = self.precompile(value, **options)
if enabled:
yield self.filter(value, **options)
else:
if precompiled:
yield self.filter(value, self.cached_filters, **options)
elif precompiled:
# since precompiling moves files around, it breaks url()
# statements in css files. therefore we run the absolute filter
# on precompiled css files even if compression is disabled.
if CssAbsoluteFilter in self.cached_filters:
value = self.filter(value, [CssAbsoluteFilter], **options)
yield self.handle_output(kind, value, forced=True,
basename=basename)
else:
@@ -224,7 +229,7 @@ class Compressor(object):
Passes the concatenated content to the 'output' methods
of the compressor filters.
"""
return self.filter(content, method=METHOD_OUTPUT)
return self.filter(content, self.cached_filters, method=METHOD_OUTPUT)
def filter_input(self, forced=False):
"""
@@ -275,8 +280,8 @@ class Compressor(object):
filename=filename)
return True, filter.input(**kwargs)
def filter(self, content, method, **kwargs):
for filter_cls in self.cached_filters:
def filter(self, content, filters, method, **kwargs):
for filter_cls in filters:
filter_func = getattr(
filter_cls(content, filter_type=self.type), method)
try: