##// END OF EJS Templates
Machinery to replace the current cell instead of adding a new one
Machinery to replace the current cell instead of adding a new one

File last commit:

r19124:964db4cb
r19250:bdae5330
Show More
tasks.py
83 lines | 3.1 KiB | text/x-python | PythonLexer
MinRK
use invoke instead of fabric...
r18351 """invoke task file to build CSS"""
Matthias BUSSONNIER
migrate from make to fabric
r9299
MinRK
use invoke instead of fabric...
r18351 from invoke import task, run
Matthias BUSSONNIER
migrate from make to fabric
r9299 import os
MinRK
pin lessc to 1.4...
r15059 from distutils.version import LooseVersion as V
from subprocess import check_output
Matthias BUSSONNIER
migrate from make to fabric
r9299
MinRK
add IPython-only CSS...
r11337 pjoin = os.path.join
Matthias BUSSONNIER
migrate from make to fabric
r9299 static_dir = 'static'
MinRK
`fab css` checks whether it needs to do anything...
r17344 components_dir = pjoin(static_dir, 'components')
here = os.path.dirname(__file__)
Matthias BUSSONNIER
migrate from make to fabric
r9299
MinRK
require less >= 1.7.5...
r18372 min_less_version = '1.7.5'
Bussonnier Matthias
use less variable for rounded corner...
r19124 max_less_version = None # exclusive if string
MinRK
add IPython-only CSS...
r11337
MinRK
`fab css` checks whether it needs to do anything...
r17344 def _need_css_update():
"""Does less need to run?"""
static_path = pjoin(here, static_dir)
css_targets = [
pjoin(static_path, 'style', '%s.min.css' % name)
for name in ('style', 'ipython')
]
css_maps = [t + '.map' for t in css_targets]
targets = css_targets + css_maps
if not all(os.path.exists(t) for t in targets):
# some generated files don't exist
return True
earliest_target = sorted(os.stat(t).st_mtime for t in targets)[0]
# check if any .less files are newer than the generated targets
for (dirpath, dirnames, filenames) in os.walk(static_path):
for f in filenames:
if f.endswith('.less'):
path = pjoin(static_path, dirpath, f)
timestamp = os.stat(path).st_mtime
if timestamp > earliest_target:
return True
return False
MinRK
use invoke instead of fabric...
r18351 @task
MinRK
`fab css` checks whether it needs to do anything...
r17344 def css(minify=False, verbose=False, force=False):
Matthias BUSSONNIER
migrate from make to fabric
r9299 """generate the css from less files"""
MinRK
`fab css` checks whether it needs to do anything...
r17344 # minify implies force because it's not the default behavior
if not force and not minify and not _need_css_update():
print("css up-to-date")
return
MinRK
add IPython-only CSS...
r11337 for name in ('style', 'ipython'):
source = pjoin('style', "%s.less" % name)
target = pjoin('style', "%s.min.css" % name)
Jason Grout
Upgrade less and generate sourcemap files
r17290 sourcemap = pjoin('style', "%s.min.css.map" % name)
_compile_less(source, target, sourcemap, minify, verbose)
Brian E. Granger
Adding files that I mised in the last commit.
r10713
Jason Grout
Upgrade less and generate sourcemap files
r17290 def _compile_less(source, target, sourcemap, minify=True, verbose=False):
MinRK
add IPython-only CSS...
r11337 """Compile a less file by source and target relative to static_dir"""
MinRK
use invoke instead of fabric...
r18351 min_flag = '-x' if minify else ''
ver_flag = '--verbose' if verbose else ''
MinRK
pin lessc to 1.4...
r15059
Jason Grout
Upgrade less and generate sourcemap files
r17290 # pin less to version number from above
Aron Ahmadia
Better lessc detection/handling....
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
pin lessc to 1.4...
r15059 out = out.decode('utf8', 'replace')
less_version = out.split()[1]
Bussonnier Matthias
use less variable for rounded corner...
r19124 if min_less_version and V(less_version) < V(min_less_version):
Kyle Kelley
Update package name in error prompt.
r19116 raise ValueError("lessc too old: %s < %s. Use `$ npm install less@X.Y.Z` to install a specific version of less" % (less_version, min_less_version))
Bussonnier Matthias
use less variable for rounded corner...
r19124 if max_less_version and V(less_version) >= V(max_less_version):
Kyle Kelley
Update package name in error prompt.
r19116 raise ValueError("lessc too new: %s >= %s. Use `$ npm install less@X.Y.Z` to install a specific version of less" % (less_version, max_less_version))
MinRK
pin lessc to 1.4...
r15059
MinRK
`fab css` checks whether it needs to do anything...
r17344 static_path = pjoin(here, static_dir)
MinRK
use invoke instead of fabric...
r18351 cwd = os.getcwd()
try:
os.chdir(static_dir)
run('lessc {min_flag} {ver_flag} --source-map={sourcemap} --source-map-basepath={static_path} --source-map-rootpath="../" {source} {target}'.format(**locals()),
echo=True,
)
finally:
os.chdir(cwd)
Matthias BUSSONNIER
migrate from make to fabric
r9299