Stop overwriting the CompileFilter's options attribute in the __init__ method. Added optional test for the CSSTidy filter. Fixes issue #33.

This commit is contained in:
Jannis Leidel
2011-04-18 11:24:57 +02:00
parent 1f68326b87
commit 9267bb6f2e
3 changed files with 49 additions and 3 deletions

View File

@@ -31,14 +31,15 @@ class CompilerFilter(FilterBase):
external commands. external commands.
""" """
command = None command = None
options = {}
def __init__(self, content, filter_type=None, verbose=0, command=None): def __init__(self, content, filter_type=None, verbose=0, command=None, **kwargs):
super(CompilerFilter, self).__init__(content, filter_type, verbose) super(CompilerFilter, self).__init__(content, filter_type, verbose)
if command: if command:
self.command = command self.command = command
self.options.update(kwargs)
if self.command is None: if self.command is None:
raise FilterError("Required command attribute not set") raise FilterError("Required command attribute not set")
self.options = {}
self.stdout = subprocess.PIPE self.stdout = subprocess.PIPE
self.stdin = subprocess.PIPE self.stdin = subprocess.PIPE
self.stderr = subprocess.PIPE self.stderr = subprocess.PIPE

View File

@@ -19,7 +19,7 @@ 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.management.commands.compress import Command as CompressCommand from compressor.management.commands.compress import Command as CompressCommand
from compressor.utils import find_command
class CompressorTestCase(TestCase): class CompressorTestCase(TestCase):
@@ -419,3 +419,19 @@ class OfflineGenerationTestCase(TestCase):
u'<script type="text/javascript" src="/media/CACHE/js/bf53fa5b13e2.js" charset="utf-8"></script>', u'<script type="text/javascript" src="/media/CACHE/js/bf53fa5b13e2.js" charset="utf-8"></script>',
], result) ], result)
settings.COMPRESS_OFFLINE_CONTEXT = self._old_offline_context settings.COMPRESS_OFFLINE_CONTEXT = self._old_offline_context
if find_command(settings.COMPRESS_CSSTIDY_BINARY):
class CssTidyTestCase(TestCase):
def test_tidy(self):
content = """
/* Some comment */
font,th,td,p{
color: black;
}
"""
from compressor.filters.csstidy import CSSTidyFilter
self.assertEqual(
"font,th,td,p{color:#000;}", CSSTidyFilter(content).output())

View File

@@ -57,3 +57,32 @@ def walk(root, topdown=True, onerror=None, followlinks=False):
if os.path.islink(p): if os.path.islink(p):
for link_dirpath, link_dirnames, link_filenames in walk(p): for link_dirpath, link_dirnames, link_filenames in walk(p):
yield (link_dirpath, link_dirnames, link_filenames) yield (link_dirpath, link_dirnames, link_filenames)
def find_command(cmd, paths=None, pathext=None):
"""
Searches the PATH for the given command and returns its path
"""
if paths is None:
paths = os.environ.get('PATH', []).split(os.pathsep)
if isinstance(paths, basestring):
paths = [paths]
# check if there are funny path extensions for executables, e.g. Windows
if pathext is None:
pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD')
pathext = [ext for ext in pathext.lower().split(os.pathsep)]
# don't use extensions if the command ends with one of them
if os.path.splitext(cmd)[1].lower() in pathext:
pathext = ['']
# check if we find the command on PATH
for path in paths:
# try without extension first
cmd_path = os.path.join(path, cmd)
for ext in pathext:
# then including the extension
cmd_path_ext = cmd_path + ext
if os.path.isfile(cmd_path_ext):
return cmd_path_ext
if os.path.isfile(cmd_path):
return cmd_path
return None