"""Minify Javascript and CSS with
`YUI Compressor `_.
YUI Compressor is an external tool written in Java, which needs to be
available. One way to get it is to install the
`yuicompressor `_ package::
pip install yuicompressor
No configuration is necessary in this case.
You can also get YUI compressor a different way and define
a ``YUI_COMPRESSOR_PATH`` setting that points to the ``.jar`` file.
Otherwise, an environment variable by the same name is tried. The
filter will also look for a ``JAVA_HOME`` environment variable to
run the ``.jar`` file, or will otherwise assume that ``java`` is
on the system path.
"""
from webassets.filter import JavaTool
__all__ = ('YUIJS', 'YUICSS',)
class YUIBase(JavaTool):
def setup(self):
super(YUIBase, self).setup()
try:
self.jar = self.get_config('YUI_COMPRESSOR_PATH',
what='YUI Compressor')
except EnvironmentError:
try:
import yuicompressor
self.jar = yuicompressor.get_jar_filename()
except ImportError:
raise EnvironmentError(
"\nYUI Compressor jar can't be found."
"\nPlease either install the yuicompressor package:"
"\n\n pip install yuicompressor\n"
"\nor provide a YUI_COMPRESSOR_PATH setting or an "
"environment variable with the full path to the "
"YUI compressor jar."
)
def output(self, _in, out, **kw):
self.subprocess(
['--charset=utf-8', '--type=%s' % self.mode], out, _in)
class YUIJS(YUIBase):
name = 'yui_js'
mode = 'js'
class YUICSS(YUIBase):
name = 'yui_css'
mode = 'css'