Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,10 @@ target/

# Scons
.sconsign.dblite

# doit
.doit.db
.doit.db.db

# vim
*.swp
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ before_install:
install:
- pip install -U pip setuptools
- PIP_FIND_LINKS=~/travis-wheels/wheelhouse pip install -r dev-requirements.txt -e .
- pip install scons doit
script:
- py.test -v -x
58 changes: 58 additions & 0 deletions nbflow/doit.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from __future__ import print_function

import json
import subprocess as sp
import sys

from .extractor import DependencyExtractor
from ._version import __version__


def build_notebook_cmd(notebook):
cmd = [
"jupyter", "nbconvert",
"--log-level=ERROR",
"--ExecutePreprocessor.timeout=120",
"--execute",
"--inplace",
"--to", "notebook",
#"--output", notebook,
notebook
]
return ' '.join(cmd)


def touch_cmds(target):
for t in target:
yield 'touch {0}'.format(str(t))


def get_cmds(notebook, target):
yield build_notebook_cmd(notebook)
for cmd in touch_cmds(target):
yield cmd


def setup(directories):
parsed = sp.check_output([sys.executable, "-m", "nbflow"] + directories,
universal_newlines=True)
DEPENDENCIES = json.loads(parsed)
for script in DEPENDENCIES:
deps = DEPENDENCIES[script]
sources = deps['sources']
if len(deps['targets']) == 0:
#targets = ['.phony_{}'.format(script)]
targets = []
else:
targets = deps['targets']

name = 'build-notebook:{0}'.format(script)
file_dep = [script] + sources
actions = list(get_cmds(script, targets))

yield {'name': name,
'actions': actions,
'targets': targets,
'file_dep': file_dep,
'clean': True}

6 changes: 6 additions & 0 deletions nbflow/example/dodo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import os
from nbflow import doit

def task_nbflow():
for task in doit.setup(['analyses']):
yield task
11 changes: 6 additions & 5 deletions nbflow/extractor.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from __future__ import print_function

import os
import glob
import json
Expand Down Expand Up @@ -57,11 +59,10 @@ def get_dependencies(self, dirnames):
sources = [self.resolve_path(filename, x) for x in params['__depends__']]

targets = params['__dest__']
if not hasattr(targets, '__iter__'):
if targets is None:
targets = []
else:
targets = [targets]
if targets is None:
targets = []
elif isinstance(targets, str):
targets = [targets]
targets = [self.resolve_path(filename, x) for x in targets]

dependencies[os.path.join(dirname, '{}.ipynb'.format(modname))] = {
Expand Down
2 changes: 1 addition & 1 deletion nbflow/tests/test_nbflow.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def test_nbflow_no_args(temp_cwd):

def test_example(temp_cwd):
# copy example files
root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "example"))
root = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "scons-example"))
shutil.copytree(os.path.join(root, "analyses"), "analyses")
shutil.copy(os.path.join(root, "SConstruct"), "SConstruct")
clear_notebooks("analyses")
Expand Down
3 changes: 1 addition & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
traitlets
nbconvert==4.1
scons
ipykernel
ipykernel