Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
@ -26,6 +26,20 @@ def get_default_services(filename, services=None):
|
|||||||
return services or {}
|
return services or {}
|
||||||
|
|
||||||
|
|
||||||
|
def _install_requirements(requirements):
|
||||||
|
"""Install requirements given a path to requirements.txt file."""
|
||||||
|
import importlib
|
||||||
|
import pip
|
||||||
|
|
||||||
|
pip.main(['install', '-r', requirements])
|
||||||
|
# Some shenanigans to be sure everything is importable after this, especially .egg-link files which
|
||||||
|
# are referenced in *.pth files and apparently loaded by site.py at some magic bootstrap moment of the
|
||||||
|
# python interpreter.
|
||||||
|
pip.utils.pkg_resources = importlib.reload(pip.utils.pkg_resources)
|
||||||
|
import site
|
||||||
|
importlib.reload(site)
|
||||||
|
|
||||||
|
|
||||||
def execute(filename, module, install=False, quiet=False, verbose=False):
|
def execute(filename, module, install=False, quiet=False, verbose=False):
|
||||||
import runpy
|
import runpy
|
||||||
from bonobo import Graph, run, settings
|
from bonobo import Graph, run, settings
|
||||||
@ -39,16 +53,8 @@ def execute(filename, module, install=False, quiet=False, verbose=False):
|
|||||||
if filename:
|
if filename:
|
||||||
if os.path.isdir(filename):
|
if os.path.isdir(filename):
|
||||||
if install:
|
if install:
|
||||||
import importlib
|
|
||||||
import pip
|
|
||||||
requirements = os.path.join(filename, 'requirements.txt')
|
requirements = os.path.join(filename, 'requirements.txt')
|
||||||
pip.main(['install', '-r', requirements])
|
_install_requirements(requirements)
|
||||||
# Some shenanigans to be sure everything is importable after this, especially .egg-link files which
|
|
||||||
# are referenced in *.pth files and apparently loaded by site.py at some magic bootstrap moment of the
|
|
||||||
# python interpreter.
|
|
||||||
pip.utils.pkg_resources = importlib.reload(pip.utils.pkg_resources)
|
|
||||||
import site
|
|
||||||
importlib.reload(site)
|
|
||||||
|
|
||||||
pathname = filename
|
pathname = filename
|
||||||
for filename in DEFAULT_GRAPH_FILENAMES:
|
for filename in DEFAULT_GRAPH_FILENAMES:
|
||||||
@ -58,7 +64,8 @@ def execute(filename, module, install=False, quiet=False, verbose=False):
|
|||||||
if not os.path.exists(filename):
|
if not os.path.exists(filename):
|
||||||
raise IOError('Could not find entrypoint (candidates: {}).'.format(', '.join(DEFAULT_GRAPH_FILENAMES)))
|
raise IOError('Could not find entrypoint (candidates: {}).'.format(', '.join(DEFAULT_GRAPH_FILENAMES)))
|
||||||
elif install:
|
elif install:
|
||||||
raise RuntimeError('Cannot --install on a file (only available for dirs containing requirements.txt).')
|
requirements = os.path.join(os.path.dirname(filename), 'requirements.txt')
|
||||||
|
_install_requirements(requirements)
|
||||||
context = runpy.run_path(filename, run_name='__bonobo__')
|
context = runpy.run_path(filename, run_name='__bonobo__')
|
||||||
elif module:
|
elif module:
|
||||||
context = runpy.run_module(module, run_name='__bonobo__')
|
context = runpy.run_module(module, run_name='__bonobo__')
|
||||||
|
|||||||
@ -16,8 +16,9 @@ class PluginExecutionContext(LoopingExecutionContext):
|
|||||||
self.wrapped.initialize()
|
self.wrapped.initialize()
|
||||||
|
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
with recoverable(self.handle_error):
|
if self.started:
|
||||||
self.wrapped.finalize()
|
with recoverable(self.handle_error):
|
||||||
|
self.wrapped.finalize()
|
||||||
self.alive = False
|
self.alive = False
|
||||||
|
|
||||||
def step(self):
|
def step(self):
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import os
|
||||||
import runpy
|
import runpy
|
||||||
import sys
|
import sys
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
@ -72,6 +73,24 @@ def test_run_path(runner, capsys):
|
|||||||
assert out[2].startswith('Baz ')
|
assert out[2].startswith('Baz ')
|
||||||
|
|
||||||
|
|
||||||
|
@all_runners
|
||||||
|
def test_install_requirements_for_dir(runner):
|
||||||
|
dirname = get_examples_path('types')
|
||||||
|
with patch('bonobo.commands.run._install_requirements') as install_mock:
|
||||||
|
runner('run', '--install', dirname)
|
||||||
|
install_mock.assert_called_once_with(
|
||||||
|
os.path.join(dirname, 'requirements.txt'))
|
||||||
|
|
||||||
|
|
||||||
|
@all_runners
|
||||||
|
def test_install_requirements_for_file(runner):
|
||||||
|
dirname = get_examples_path('types')
|
||||||
|
with patch('bonobo.commands.run._install_requirements') as install_mock:
|
||||||
|
runner('run', '--install', os.path.join(dirname, 'strings.py'))
|
||||||
|
install_mock.assert_called_once_with(
|
||||||
|
os.path.join(dirname, 'requirements.txt'))
|
||||||
|
|
||||||
|
|
||||||
@all_runners
|
@all_runners
|
||||||
def test_version(runner, capsys):
|
def test_version(runner, capsys):
|
||||||
runner('version')
|
runner('version')
|
||||||
|
|||||||
Reference in New Issue
Block a user