Merge branch 'develop' into dev_convert

This commit is contained in:
Romain Dorgueil
2017-09-30 11:26:59 +02:00
13 changed files with 132 additions and 76 deletions

View File

@ -1,7 +1,7 @@
# This file has been auto-generated. # This file has been auto-generated.
# All changes will be lost, see Projectfile. # All changes will be lost, see Projectfile.
# #
# Updated at 2017-09-18 17:18:20.676696 # Updated at 2017-09-30 11:26:44.075878
PACKAGE ?= bonobo PACKAGE ?= bonobo
PYTHON ?= $(shell which python) PYTHON ?= $(shell which python)

View File

@ -31,7 +31,7 @@ python.setup(
'bonobo.commands': [ 'bonobo.commands': [
'convert = bonobo.commands.convert:register', 'convert = bonobo.commands.convert:register',
'init = bonobo.commands.init:register', 'init = bonobo.commands.init:register',
'graph = bonobo.commands.graph:register', 'inspect = bonobo.commands.inspect:register',
'run = bonobo.commands.run:register', 'run = bonobo.commands.run:register',
'version = bonobo.commands.version:register', 'version = bonobo.commands.version:register',
], ],

View File

@ -1,32 +0,0 @@
import json
import itertools
from bonobo.util.objects import get_name
from bonobo.commands.run import read, register_generic_run_arguments
from bonobo.constants import BEGIN
def execute(filename, module, install=False, quiet=False, verbose=False):
graph, plugins, services = read(filename, module, install, quiet, verbose)
print('digraph {')
print(' rankdir = LR;')
print(' "BEGIN" [shape="point"];')
for i in graph.outputs_of(BEGIN):
print(' "BEGIN" -> ' + json.dumps(get_name(graph[i])) + ';')
for ix in graph.topologically_sorted_indexes:
for iy in graph.outputs_of(ix):
print(' {} -> {};'.format(
json.dumps(get_name(graph[ix])),
json.dumps(get_name(graph[iy]))
))
print('}')
def register(parser):
register_generic_run_arguments(parser)
return execute

View File

@ -0,0 +1,34 @@
import json
from bonobo.commands.run import read, register_generic_run_arguments
from bonobo.constants import BEGIN
from bonobo.util.objects import get_name
OUTPUT_GRAPHVIZ = 'graphviz'
def execute(*, output, **kwargs):
graph, plugins, services = read(**kwargs)
if output == OUTPUT_GRAPHVIZ:
print('digraph {')
print(' rankdir = LR;')
print(' "BEGIN" [shape="point"];')
for i in graph.outputs_of(BEGIN):
print(' "BEGIN" -> ' + json.dumps(get_name(graph[i])) + ';')
for ix in graph.topologically_sorted_indexes:
for iy in graph.outputs_of(ix):
print(' {} -> {};'.format(json.dumps(get_name(graph[ix])), json.dumps(get_name(graph[iy]))))
print('}')
else:
raise NotImplementedError('Output type not implemented.')
def register(parser):
register_generic_run_arguments(parser)
parser.add_argument('--graph', '-g', dest='output', action='store_const', const=OUTPUT_GRAPHVIZ)
parser.set_defaults(output=OUTPUT_GRAPHVIZ)
return execute

View File

@ -3,7 +3,7 @@ import os
import bonobo import bonobo
from bonobo.constants import DEFAULT_SERVICES_ATTR, DEFAULT_SERVICES_FILENAME from bonobo.constants import DEFAULT_SERVICES_ATTR, DEFAULT_SERVICES_FILENAME
DEFAULT_GRAPH_FILENAMES = ('__main__.py', 'main.py',) DEFAULT_GRAPH_FILENAMES = ('__main__.py', 'main.py', )
DEFAULT_GRAPH_ATTR = 'get_graph' DEFAULT_GRAPH_ATTR = 'get_graph'
@ -40,7 +40,8 @@ def _install_requirements(requirements):
importlib.reload(site) importlib.reload(site)
def read(filename, module, install=False, quiet=False, verbose=False): def read(filename, module, install=False, quiet=False, verbose=False, env=None):
import re
import runpy import runpy
from bonobo import Graph, settings from bonobo import Graph, settings
@ -50,6 +51,12 @@ def read(filename, module, install=False, quiet=False, verbose=False):
if verbose: if verbose:
settings.DEBUG.set(True) settings.DEBUG.set(True)
if env:
quote_killer = re.compile('["\']')
for e in env:
var_name, var_value = e.split('=')
os.environ[var_name] = quote_killer.sub('', var_value)
if filename: if filename:
if os.path.isdir(filename): if os.path.isdir(filename):
if install: if install:
@ -89,14 +96,10 @@ def read(filename, module, install=False, quiet=False, verbose=False):
return graph, plugins, services return graph, plugins, services
def execute(filename, module, install=False, quiet=False, verbose=False): def execute(filename, module, install=False, quiet=False, verbose=False, env=None):
graph, plugins, services = read(filename, module, install, quiet, verbose) graph, plugins, services = read(filename, module, install, quiet, verbose, env)
return bonobo.run( return bonobo.run(graph, plugins=plugins, services=services)
graph,
plugins=plugins,
services=services
)
def register_generic_run_arguments(parser, required=True): def register_generic_run_arguments(parser, required=True):
@ -112,4 +115,5 @@ def register(parser):
verbosity_group.add_argument('--quiet', '-q', action='store_true') verbosity_group.add_argument('--quiet', '-q', action='store_true')
verbosity_group.add_argument('--verbose', '-v', action='store_true') verbosity_group.add_argument('--verbose', '-v', action='store_true')
parser.add_argument('--install', '-I', action='store_true') parser.add_argument('--install', '-I', action='store_true')
parser.add_argument('--env', '-e', action='append')
return execute return execute

View File

@ -1,4 +1,3 @@
def render_as_dot(graph): def render_as_dot(graph):
""" """

View File

@ -1,7 +1,7 @@
-e .[dev] -e .[dev]
alabaster==0.7.10 alabaster==0.7.10
arrow==0.10.0 arrow==0.10.0
babel==2.4.0 babel==2.5.1
binaryornot==0.4.4 binaryornot==0.4.4
certifi==2017.7.27.1 certifi==2017.7.27.1
chardet==3.0.4 chardet==3.0.4
@ -10,7 +10,7 @@ cookiecutter==1.5.1
coverage==4.4.1 coverage==4.4.1
docutils==0.14 docutils==0.14
future==0.16.0 future==0.16.0
idna==2.5 idna==2.6
imagesize==0.7.1 imagesize==0.7.1
jinja2-time==0.2.0 jinja2-time==0.2.0
jinja2==2.9.6 jinja2==2.9.6
@ -21,13 +21,13 @@ pygments==2.2.0
pytest-cov==2.5.1 pytest-cov==2.5.1
pytest-sugar==0.8.0 pytest-sugar==0.8.0
pytest-timeout==1.2.0 pytest-timeout==1.2.0
pytest==3.2.1 pytest==3.2.2
python-dateutil==2.6.1 python-dateutil==2.6.1
pytz==2017.2 pytz==2017.2
requests==2.18.3 requests==2.18.4
six==1.10.0 six==1.11.0
snowballstemmer==1.2.1 snowballstemmer==1.2.1
sphinx==1.6.3 sphinx==1.6.4
sphinxcontrib-websupport==1.0.1 sphinxcontrib-websupport==1.0.1
termcolor==1.1.0 termcolor==1.1.0
urllib3==1.22 urllib3==1.22

View File

@ -6,15 +6,15 @@ chardet==3.0.4
colorama==0.3.9 colorama==0.3.9
docker-pycreds==0.2.1 docker-pycreds==0.2.1
docker==2.3.0 docker==2.3.0
fs==2.0.7 fs==2.0.11
idna==2.5 idna==2.6
packaging==16.8 packaging==16.8
pbr==3.1.1 pbr==3.1.1
psutil==5.2.2 psutil==5.3.1
pyparsing==2.2.0 pyparsing==2.2.0
pytz==2017.2 pytz==2017.2
requests==2.18.3 requests==2.18.4
six==1.10.0 six==1.11.0
stevedore==1.25.0 stevedore==1.27.0
urllib3==1.22 urllib3==1.22
websocket-client==0.44.0 websocket-client==0.44.0

View File

@ -1,26 +1,27 @@
-e .[jupyter] -e .[jupyter]
appnope==0.1.0 appnope==0.1.0
bleach==2.0.0 bleach==2.1
decorator==4.1.2 decorator==4.1.2
entrypoints==0.2.3 entrypoints==0.2.3
html5lib==0.999999999 html5lib==0.999999999
ipykernel==4.6.1 ipykernel==4.6.1
ipython-genutils==0.2.0 ipython-genutils==0.2.0
ipython==6.1.0 ipython==6.2.1
ipywidgets==6.0.0 ipywidgets==6.0.1
jedi==0.10.2 jedi==0.11.0
jinja2==2.9.6 jinja2==2.9.6
jsonschema==2.6.0 jsonschema==2.6.0
jupyter-client==5.1.0 jupyter-client==5.1.0
jupyter-console==5.1.0 jupyter-console==5.2.0
jupyter-core==4.3.0 jupyter-core==4.3.0
jupyter==1.0.0 jupyter==1.0.0
markupsafe==1.0 markupsafe==1.0
mistune==0.7.4 mistune==0.7.4
nbconvert==5.2.1 nbconvert==5.3.1
nbformat==4.3.0 nbformat==4.4.0
notebook==5.0.0 notebook==5.1.0
pandocfilters==1.4.2 pandocfilters==1.4.2
parso==0.1.0
pexpect==4.2.1 pexpect==4.2.1
pickleshare==0.7.4 pickleshare==0.7.4
prompt-toolkit==1.0.15 prompt-toolkit==1.0.15
@ -28,13 +29,13 @@ ptyprocess==0.5.2
pygments==2.2.0 pygments==2.2.0
python-dateutil==2.6.1 python-dateutil==2.6.1
pyzmq==16.0.2 pyzmq==16.0.2
qtconsole==4.3.0 qtconsole==4.3.1
simplegeneric==0.8.1 simplegeneric==0.8.1
six==1.10.0 six==1.11.0
terminado==0.6 terminado==0.6
testpath==0.3.1 testpath==0.3.1
tornado==4.5.1 tornado==4.5.2
traitlets==4.3.2 traitlets==4.3.2
wcwidth==0.1.7 wcwidth==0.1.7
webencodings==0.5.1 webencodings==0.5.1
widgetsnbextension==2.0.0 widgetsnbextension==2.0.1

View File

@ -3,14 +3,14 @@ appdirs==1.4.3
certifi==2017.7.27.1 certifi==2017.7.27.1
chardet==3.0.4 chardet==3.0.4
colorama==0.3.9 colorama==0.3.9
fs==2.0.7 fs==2.0.11
idna==2.5 idna==2.6
packaging==16.8 packaging==16.8
pbr==3.1.1 pbr==3.1.1
psutil==5.2.2 psutil==5.3.1
pyparsing==2.2.0 pyparsing==2.2.0
pytz==2017.2 pytz==2017.2
requests==2.18.3 requests==2.18.4
six==1.10.0 six==1.11.0
stevedore==1.25.0 stevedore==1.27.0
urllib3==1.22 urllib3==1.22

View File

@ -68,7 +68,7 @@ setup(
entry_points={ entry_points={
'bonobo.commands': [ 'bonobo.commands': [
'convert = bonobo.commands.convert:register', 'init = bonobo.commands.init:register', 'convert = bonobo.commands.convert:register', 'init = bonobo.commands.init:register',
'graph = bonobo.commands.graph:register', 'run = bonobo.commands.run:register', 'inspect = bonobo.commands.inspect:register', 'run = bonobo.commands.run:register',
'version = bonobo.commands.version:register' 'version = bonobo.commands.version:register'
], ],
'console_scripts': ['bonobo = bonobo.commands:entrypoint'] 'console_scripts': ['bonobo = bonobo.commands:entrypoint']

View File

@ -3,6 +3,7 @@ import runpy
import sys import sys
from unittest.mock import patch from unittest.mock import patch
import pathlib
import pkg_resources import pkg_resources
import pytest import pytest
@ -96,3 +97,30 @@ def test_version(runner, capsys):
out = out.strip() out = out.strip()
assert out.startswith('bonobo ') assert out.startswith('bonobo ')
assert __version__ in out assert __version__ in out
@all_runners
def test_run_with_env(runner, capsys):
runner(
'run', '--quiet',
str(pathlib.Path(os.path.dirname(__file__), 'util', 'get_passed_env.py')), '--env', 'ENV_TEST_NUMBER=123',
'--env', 'ENV_TEST_USER=cwandrews', '--env', "ENV_TEST_STRING='my_test_string'"
)
out, err = capsys.readouterr()
out = out.split('\n')
assert out[0] == 'cwandrews'
assert out[1] == '123'
assert out[2] == 'my_test_string'
@all_runners
def test_run_module_with_env(runner, capsys):
runner(
'run', '--quiet', '-m', 'tests.util.get_passed_env', '--env', 'ENV_TEST_NUMBER=123', '--env',
'ENV_TEST_USER=cwandrews', '--env', "ENV_TEST_STRING='my_test_string'"
)
out, err = capsys.readouterr()
out = out.split('\n')
assert out[0] == 'cwandrews'
assert out[1] == '123'
assert out[2] == 'my_test_string'

View File

@ -0,0 +1,22 @@
import os
from bonobo import Graph
def extract():
env_test_user = os.getenv('ENV_TEST_USER')
env_test_number = os.getenv('ENV_TEST_NUMBER')
env_test_string = os.getenv('ENV_TEST_STRING')
return env_test_user, env_test_number, env_test_string
def load(s: str):
print(s)
graph = Graph(extract, load)
if __name__ == '__main__':
from bonobo import run
run(graph)