import os from webassets.filter import ExternalTool, option __all__ = ('Stylus',) class Stylus(ExternalTool): """Converts `Stylus `_ markup to CSS. Requires the Stylus executable to be available externally. You can install it using the `Node Package Manager `_:: $ npm install -g stylus Supported configuration options: STYLUS_BIN The path to the Stylus binary. If not set, assumes ``stylus`` is in the system path. STYLUS_PLUGINS A Python list of Stylus plugins to use. Each plugin will be included via Stylus's command-line ``--use`` argument. STYLUS_EXTRA_ARGS A Python list of any additional command-line arguments. STYLUS_EXTRA_PATHS A Python list of any additional import paths. """ name = 'stylus' options = { 'stylus': 'STYLUS_BIN', 'plugins': option('STYLUS_PLUGINS', type=list), 'extra_args': option('STYLUS_EXTRA_ARGS', type=list), 'extra_paths': option('STYLUS_EXTRA_PATHS', type=list), } max_debug_level = None def input(self, _in, out, **kwargs): args = [self.stylus or 'stylus'] source_dir = os.path.dirname(kwargs['source_path']) paths = [source_dir] + (self.extra_paths or []) for path in paths: args.extend(('--include', path)) for plugin in self.plugins or []: args.extend(('--use', plugin)) if self.extra_args: args.extend(self.extra_args) self.subprocess(args, out, _in)