def _save(self, name, original_file): file = original_file if not any((name.startswith(prefix) for prefix in self._ignored_prefixes)): for suffix in self.supported_suffixes: if self.minify_enabled(suffix) and name.endswith('.%s' % suffix) \ and not name.endswith('.min.%s' % suffix): try: full_content = NamedTemporaryFile(suffix='.%s' % suffix) full_content.write(original_file.read()) full_content.flush() minified_content = NamedTemporaryFile(suffix='.min.%s' % suffix) yuicompress = run(full_content.name, '-o', minified_content.name) assert yuicompress == 0, 'YUI Compressor failed on %s' % name new_content = minified_content.read() file = ContentFile(new_content) except Exception: logging.exception('Minify %s error for %s' % (suffix, name)) file = original_file return super()._save(name, file)
try: os.remove(p) except OSError, e: _stderr('** Could not remove file {0} {1}\n'.format(p, e)) # If compression is enabled run it. if self.config.compress: import yuicompressor _stdout('** With compressing\n') for root, dirs, files in os.walk(self.config.build_dir + os.sep + self.config.paths['assets'], topdown=True): for pat in self.config.compress: for f in fnmatch.filter(files, pat): if not f.endswith('min.js') or not f.endswith('min.css'): _stdout('>> {0}\n'.format(f)) yuicompressor.run( os.path.join(root, f), "-o", os.path.join(root, f) ) def build(self): """ Build this site and it resources. """ _stdout('** Building site\n') # We start fresh on each build. self.context = self.config.site_context if self.config.site_context else dict() self.resources = list() self.articles = list() self.media = list() if not os.path.exists(self.config.build_dir): mkdir_p(self.config.build_dir)