fabfile.py
52 lines
| 2.1 KiB
| text/x-python
|
PythonLexer
Matthias BUSSONNIER
|
r9299 | """ fabfile to prepare the notebook """ | ||
from fabric.api import local,lcd | ||||
from fabric.utils import abort | ||||
import os | ||||
MinRK
|
r15059 | from distutils.version import LooseVersion as V | ||
from subprocess import check_output | ||||
Matthias BUSSONNIER
|
r9299 | |||
MinRK
|
r11337 | pjoin = os.path.join | ||
Matthias BUSSONNIER
|
r9299 | static_dir = 'static' | ||
MinRK
|
r10523 | components_dir = os.path.join(static_dir, 'components') | ||
Matthias BUSSONNIER
|
r9299 | |||
Jason Grout
|
r17290 | min_less_version = '1.7.0' | ||
max_less_version = '1.8.0' # exclusive | ||||
MinRK
|
r11337 | |||
Brian E. Granger
|
r10730 | def css(minify=True, verbose=False): | ||
Matthias BUSSONNIER
|
r9299 | """generate the css from less files""" | ||
MinRK
|
r11337 | for name in ('style', 'ipython'): | ||
source = pjoin('style', "%s.less" % name) | ||||
target = pjoin('style', "%s.min.css" % name) | ||||
Jason Grout
|
r17290 | sourcemap = pjoin('style', "%s.min.css.map" % name) | ||
_compile_less(source, target, sourcemap, minify, verbose) | ||||
Brian E. Granger
|
r10713 | |||
Brian E. Granger
|
r10730 | def _to_bool(b): | ||
if not b in ['True', 'False', True, False]: | ||||
abort('boolean expected, got: %s' % b) | ||||
return (b in ['True', True]) | ||||
Jason Grout
|
r17290 | def _compile_less(source, target, sourcemap, minify=True, verbose=False): | ||
MinRK
|
r11337 | """Compile a less file by source and target relative to static_dir""" | ||
Brian E. Granger
|
r10730 | minify = _to_bool(minify) | ||
verbose = _to_bool(verbose) | ||||
min_flag = '-x' if minify is True else '' | ||||
ver_flag = '--verbose' if verbose is True else '' | ||||
MinRK
|
r15059 | |||
Jason Grout
|
r17290 | # pin less to version number from above | ||
Aron Ahmadia
|
r16291 | try: | ||
out = check_output(['lessc', '--version']) | ||||
except OSError as err: | ||||
raise ValueError("Unable to find lessc. Please install lessc >= %s and < %s " \ | ||||
% (min_less_version, max_less_version)) | ||||
MinRK
|
r15059 | out = out.decode('utf8', 'replace') | ||
less_version = out.split()[1] | ||||
if V(less_version) < V(min_less_version): | ||||
Matthias BUSSONNIER
|
r16996 | raise ValueError("lessc too old: %s < %s. Use `$ npm install lesscss@X.Y.Z` to install a specific version of less" % (less_version, min_less_version)) | ||
Aron Ahmadia
|
r16291 | if V(less_version) >= V(max_less_version): | ||
Matthias BUSSONNIER
|
r16996 | raise ValueError("lessc too new: %s >= %s. Use `$ npm install lesscss@X.Y.Z` to install a specific version of less" % (less_version, max_less_version)) | ||
MinRK
|
r15059 | |||
Jason Grout
|
r17290 | static_path = pjoin(os.getcwd(), static_dir) | ||
Matthias BUSSONNIER
|
r9299 | with lcd(static_dir): | ||
Jason Grout
|
r17290 | local('lessc {min_flag} {ver_flag} --source-map={sourcemap} --source-map-basepath={static_path} --source-map-rootpath="../" {source} {target}'.format(**locals())) | ||
Matthias BUSSONNIER
|
r9299 | |||