changeset 315:d1490028e211

cleancss: Add option to specify an output extension, like `.min.css`.
author Ludovic Chabant <ludovic@chabant.com>
date Fri, 27 Mar 2015 20:47:31 -0700
parents 1ddd18ad5e76
children eb958151c8dc
files piecrust/processing/compressors.py
diffstat 1 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/piecrust/processing/compressors.py	Fri Mar 27 20:46:36 2015 -0700
+++ b/piecrust/processing/compressors.py	Fri Mar 27 20:47:31 2015 -0700
@@ -3,21 +3,33 @@
 import logging
 import platform
 import subprocess
-from piecrust.processing.base import SimpleFileProcessor
+from piecrust.processing.base import Processor, SimpleFileProcessor
 
 
 logger = logging.getLogger(__name__)
 
 
-class CleanCssProcessor(SimpleFileProcessor):
+class CleanCssProcessor(Processor):
     PROCESSOR_NAME = 'cleancss'
 
     def __init__(self):
-        super(CleanCssProcessor, self).__init__({'css': 'css'})
+        super(CleanCssProcessor, self).__init__()
         self._conf = None
 
-    def _doProcess(self, in_path, out_path):
+    def matches(self, path):
+        return path.endswith('.css')
+
+    def getOutputFilenames(self, filename):
         self._ensureInitialized()
+        basename, _ = os.path.splitext(filename)
+        return ['%s%s' % (basename, self._conf['out_ext'])]
+
+    def process(self, path, out_dir):
+        self._ensureInitialized()
+
+        _, in_name = os.path.split(path)
+        out_name = self.getOutputFilenames(in_name)[0]
+        out_path = os.path.join(out_dir, out_name)
 
         args = [self._conf['bin'], '-o', out_path]
         args += self._conf['options']
@@ -46,6 +58,9 @@
         self._conf = self.app.config.get('cleancss') or {}
         self._conf.setdefault('bin', 'cleancss')
         self._conf.setdefault('options', ['--skip-rebase'])
+        self._conf.setdefault('out_ext', '.css')
+        if len(self._conf['out_ext']) > 0 and self._conf['out_ext'][0] != '.':
+            self._conf['out_ext'] = '.' + self._conf['out_ext']
         if not isinstance(self._conf['options'], list):
             raise Exception("The `cleancss/options` configuration setting "
                             "must be an array of arguments.")