feat: new alternate syntax and switch to black + isort (yeah, maybe not the best time, but that is done).
This commit is contained in:
@ -6,20 +6,14 @@ from bonobo.util.testing import all_runners
|
||||
def test_entrypoint():
|
||||
commands = {}
|
||||
|
||||
for command in pkg_resources.iter_entry_points('bonobo.commands'):
|
||||
for command in pkg_resources.iter_entry_points("bonobo.commands"):
|
||||
commands[command.name] = command
|
||||
|
||||
assert not {
|
||||
'convert',
|
||||
'init',
|
||||
'inspect',
|
||||
'run',
|
||||
'version',
|
||||
}.difference(set(commands))
|
||||
assert not {"convert", "init", "inspect", "run", "version"}.difference(set(commands))
|
||||
|
||||
|
||||
@all_runners
|
||||
def test_no_command(runner):
|
||||
_, err, exc = runner(catch_errors=True)
|
||||
assert type(exc) == SystemExit
|
||||
assert 'error: the following arguments are required: command' in err
|
||||
assert "error: the following arguments are required: command" in err
|
||||
|
||||
@ -8,10 +8,10 @@ from bonobo.util.testing import all_runners
|
||||
|
||||
@all_runners
|
||||
def test_convert(runner, tmpdir):
|
||||
csv_content = 'id;name\n1;Romain'
|
||||
tmpdir.join('in.csv').write(csv_content)
|
||||
csv_content = "id;name\n1;Romain"
|
||||
tmpdir.join("in.csv").write(csv_content)
|
||||
|
||||
with change_working_directory(tmpdir):
|
||||
runner('convert', 'in.csv', 'out.csv')
|
||||
runner("convert", "in.csv", "out.csv")
|
||||
|
||||
assert tmpdir.join('out.csv').read().strip() == csv_content
|
||||
assert tmpdir.join("out.csv").read().strip() == csv_content
|
||||
|
||||
@ -9,7 +9,7 @@ from bonobo.util.testing import all_runners
|
||||
|
||||
@all_runners
|
||||
def test_download_works_for_examples(runner):
|
||||
expected_bytes = b'hello world'
|
||||
expected_bytes = b"hello world"
|
||||
|
||||
class MockResponse(object):
|
||||
def __init__(self):
|
||||
@ -27,12 +27,13 @@ def test_download_works_for_examples(runner):
|
||||
fout = io.BytesIO()
|
||||
fout.close = lambda: None
|
||||
|
||||
with patch('bonobo.commands.download._open_url') as mock_open_url, \
|
||||
patch('bonobo.commands.download.open') as mock_open:
|
||||
with patch("bonobo.commands.download._open_url") as mock_open_url, patch(
|
||||
"bonobo.commands.download.open"
|
||||
) as mock_open:
|
||||
mock_open_url.return_value = MockResponse()
|
||||
mock_open.return_value = fout
|
||||
runner('download', 'examples/datasets/coffeeshops.txt')
|
||||
expected_url = EXAMPLES_BASE_URL + 'datasets/coffeeshops.txt'
|
||||
runner("download", "examples/datasets/coffeeshops.txt")
|
||||
expected_url = EXAMPLES_BASE_URL + "datasets/coffeeshops.txt"
|
||||
mock_open_url.assert_called_once_with(expected_url)
|
||||
|
||||
assert fout.getvalue() == expected_bytes
|
||||
@ -41,4 +42,4 @@ def test_download_works_for_examples(runner):
|
||||
@all_runners
|
||||
def test_download_fails_non_example(runner):
|
||||
with pytest.raises(ValueError):
|
||||
runner('download', 'something/entirely/different.txt')
|
||||
runner("download", "something/entirely/different.txt")
|
||||
|
||||
@ -8,22 +8,22 @@ from bonobo.util.testing import all_runners
|
||||
|
||||
@all_runners
|
||||
def test_init_file(runner, tmpdir):
|
||||
target = tmpdir.join('foo.py')
|
||||
target = tmpdir.join("foo.py")
|
||||
target_filename = str(target)
|
||||
runner('init', target_filename)
|
||||
runner("init", target_filename)
|
||||
assert os.path.exists(target_filename)
|
||||
|
||||
out, err = runner('run', target_filename)
|
||||
assert out.replace('\n', ' ').strip() == 'Hello World'
|
||||
out, err = runner("run", target_filename)
|
||||
assert out.replace("\n", " ").strip() == "Hello World"
|
||||
assert not err
|
||||
|
||||
|
||||
@all_runners
|
||||
@pytest.mark.parametrize('template', InitCommand.TEMPLATES)
|
||||
@pytest.mark.parametrize("template", InitCommand.TEMPLATES)
|
||||
def test_init_file_templates(runner, template, tmpdir):
|
||||
target = tmpdir.join('foo.py')
|
||||
target = tmpdir.join("foo.py")
|
||||
target_filename = str(target)
|
||||
runner('init', target_filename)
|
||||
runner("init", target_filename)
|
||||
assert os.path.exists(target_filename)
|
||||
out, err = runner('run', target_filename)
|
||||
out, err = runner("run", target_filename)
|
||||
assert not err
|
||||
|
||||
@ -7,42 +7,42 @@ from bonobo.util.testing import all_runners
|
||||
|
||||
@all_runners
|
||||
def test_run(runner):
|
||||
out, err = runner('run', '--quiet', get_examples_path('types/strings.py'))
|
||||
out = out.split('\n')
|
||||
assert out[0].startswith('Foo ')
|
||||
assert out[1].startswith('Bar ')
|
||||
assert out[2].startswith('Baz ')
|
||||
out, err = runner("run", "--quiet", get_examples_path("types/strings.py"))
|
||||
out = out.split("\n")
|
||||
assert out[0].startswith("Foo ")
|
||||
assert out[1].startswith("Bar ")
|
||||
assert out[2].startswith("Baz ")
|
||||
|
||||
|
||||
@all_runners
|
||||
def test_run_module(runner):
|
||||
out, err = runner('run', '--quiet', '-m', 'bonobo.examples.types.strings')
|
||||
out = out.split('\n')
|
||||
assert out[0].startswith('Foo ')
|
||||
assert out[1].startswith('Bar ')
|
||||
assert out[2].startswith('Baz ')
|
||||
out, err = runner("run", "--quiet", "-m", "bonobo.examples.types.strings")
|
||||
out = out.split("\n")
|
||||
assert out[0].startswith("Foo ")
|
||||
assert out[1].startswith("Bar ")
|
||||
assert out[2].startswith("Baz ")
|
||||
|
||||
|
||||
@all_runners
|
||||
def test_run_path(runner):
|
||||
out, err = runner('run', '--quiet', get_examples_path('types'))
|
||||
out = out.split('\n')
|
||||
assert out[0].startswith('Foo ')
|
||||
assert out[1].startswith('Bar ')
|
||||
assert out[2].startswith('Baz ')
|
||||
out, err = runner("run", "--quiet", get_examples_path("types"))
|
||||
out = out.split("\n")
|
||||
assert out[0].startswith("Foo ")
|
||||
assert out[1].startswith("Bar ")
|
||||
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'))
|
||||
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'))
|
||||
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"))
|
||||
|
||||
@ -5,103 +5,104 @@ from bonobo.util.testing import EnvironmentTestCase
|
||||
|
||||
@pytest.fixture
|
||||
def env1(tmpdir):
|
||||
env_file = tmpdir.join('.env_one')
|
||||
env_file.write('\n'.join((
|
||||
'SECRET=unknown',
|
||||
'PASSWORD=sweet',
|
||||
'PATH=first',
|
||||
)))
|
||||
env_file = tmpdir.join(".env_one")
|
||||
env_file.write("\n".join(("SECRET=unknown", "PASSWORD=sweet", "PATH=first")))
|
||||
return str(env_file)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def env2(tmpdir):
|
||||
env_file = tmpdir.join('.env_two')
|
||||
env_file.write('\n'.join((
|
||||
'PASSWORD=bitter',
|
||||
"PATH='second'",
|
||||
)))
|
||||
env_file = tmpdir.join(".env_two")
|
||||
env_file.write("\n".join(("PASSWORD=bitter", "PATH='second'")))
|
||||
return str(env_file)
|
||||
|
||||
|
||||
class TestDefaultEnvFile(EnvironmentTestCase):
|
||||
def test_run_with_default_env_file(self, runner, target, env1):
|
||||
env = self.run_environ(runner, *target, '--default-env-file', env1)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'sweet'
|
||||
assert env.get('PATH') == '/usr/bin'
|
||||
env = self.run_environ(runner, *target, "--default-env-file", env1)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "sweet"
|
||||
assert env.get("PATH") == "/usr/bin"
|
||||
|
||||
def test_run_with_multiple_default_env_files(self, runner, target, env1, env2):
|
||||
env = self.run_environ(runner, *target, '--default-env-file', env1, '--default-env-file', env2)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'sweet'
|
||||
assert env.get('PATH') == '/usr/bin'
|
||||
env = self.run_environ(runner, *target, "--default-env-file", env1, "--default-env-file", env2)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "sweet"
|
||||
assert env.get("PATH") == "/usr/bin"
|
||||
|
||||
env = self.run_environ(runner, *target, '--default-env-file', env2, '--default-env-file', env1)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'bitter'
|
||||
assert env.get('PATH') == '/usr/bin'
|
||||
env = self.run_environ(runner, *target, "--default-env-file", env2, "--default-env-file", env1)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "bitter"
|
||||
assert env.get("PATH") == "/usr/bin"
|
||||
|
||||
|
||||
class TestEnvFile(EnvironmentTestCase):
|
||||
def test_run_with_file(self, runner, target, env1):
|
||||
env = self.run_environ(runner, *target, '--env-file', env1)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'sweet'
|
||||
assert env.get('PATH') == 'first'
|
||||
env = self.run_environ(runner, *target, "--env-file", env1)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "sweet"
|
||||
assert env.get("PATH") == "first"
|
||||
|
||||
def test_run_with_multiple_files(self, runner, target, env1, env2):
|
||||
env = self.run_environ(runner, *target, '--env-file', env1, '--env-file', env2)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'bitter'
|
||||
assert env.get('PATH') == 'second'
|
||||
env = self.run_environ(runner, *target, "--env-file", env1, "--env-file", env2)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "bitter"
|
||||
assert env.get("PATH") == "second"
|
||||
|
||||
env = self.run_environ(runner, *target, '--env-file', env2, '--env-file', env1)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'sweet'
|
||||
assert env.get('PATH') == 'first'
|
||||
env = self.run_environ(runner, *target, "--env-file", env2, "--env-file", env1)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "sweet"
|
||||
assert env.get("PATH") == "first"
|
||||
|
||||
|
||||
class TestEnvFileCombinations(EnvironmentTestCase):
|
||||
def test_run_with_both_env_files(self, runner, target, env1, env2):
|
||||
env = self.run_environ(runner, *target, '--default-env-file', env1, '--env-file', env2)
|
||||
assert env.get('SECRET') == 'unknown'
|
||||
assert env.get('PASSWORD') == 'bitter'
|
||||
assert env.get('PATH') == 'second'
|
||||
env = self.run_environ(runner, *target, "--default-env-file", env1, "--env-file", env2)
|
||||
assert env.get("SECRET") == "unknown"
|
||||
assert env.get("PASSWORD") == "bitter"
|
||||
assert env.get("PATH") == "second"
|
||||
|
||||
def test_run_with_both_env_files_then_overrides(self, runner, target, env1, env2):
|
||||
env = self.run_environ(
|
||||
runner, *target, '--default-env-file', env1, '--env-file', env2, '--env', 'PASSWORD=mine', '--env',
|
||||
'SECRET=s3cr3t'
|
||||
runner,
|
||||
*target,
|
||||
"--default-env-file",
|
||||
env1,
|
||||
"--env-file",
|
||||
env2,
|
||||
"--env",
|
||||
"PASSWORD=mine",
|
||||
"--env",
|
||||
"SECRET=s3cr3t"
|
||||
)
|
||||
assert env.get('SECRET') == 's3cr3t'
|
||||
assert env.get('PASSWORD') == 'mine'
|
||||
assert env.get('PATH') == 'second'
|
||||
assert env.get("SECRET") == "s3cr3t"
|
||||
assert env.get("PASSWORD") == "mine"
|
||||
assert env.get("PATH") == "second"
|
||||
|
||||
|
||||
class TestEnvVars(EnvironmentTestCase):
|
||||
def test_run_no_env(self, runner, target):
|
||||
env = self.run_environ(runner, *target, environ={'USER': 'romain'})
|
||||
assert env.get('USER') == 'romain'
|
||||
env = self.run_environ(runner, *target, environ={"USER": "romain"})
|
||||
assert env.get("USER") == "romain"
|
||||
|
||||
def test_run_env(self, runner, target):
|
||||
env = self.run_environ(runner, *target, '--env', 'USER=serious', environ={'USER': 'romain'})
|
||||
assert env.get('USER') == 'serious'
|
||||
env = self.run_environ(runner, *target, "--env", "USER=serious", environ={"USER": "romain"})
|
||||
assert env.get("USER") == "serious"
|
||||
|
||||
def test_run_env_mixed(self, runner, target):
|
||||
env = self.run_environ(runner, *target, '--env', 'ONE=1', '--env', 'TWO="2"', environ={'USER': 'romain'})
|
||||
assert env.get('USER') == 'romain'
|
||||
assert env.get('ONE') == '1'
|
||||
assert env.get('TWO') == '2'
|
||||
env = self.run_environ(runner, *target, "--env", "ONE=1", "--env", 'TWO="2"', environ={"USER": "romain"})
|
||||
assert env.get("USER") == "romain"
|
||||
assert env.get("ONE") == "1"
|
||||
assert env.get("TWO") == "2"
|
||||
|
||||
def test_run_default_env(self, runner, target):
|
||||
env = self.run_environ(runner, *target, '--default-env', 'USER=clown')
|
||||
assert env.get('USER') == 'clown'
|
||||
env = self.run_environ(runner, *target, "--default-env", "USER=clown")
|
||||
assert env.get("USER") == "clown"
|
||||
|
||||
env = self.run_environ(runner, *target, '--default-env', 'USER=clown', environ={'USER': 'romain'})
|
||||
assert env.get('USER') == 'romain'
|
||||
env = self.run_environ(runner, *target, "--default-env", "USER=clown", environ={"USER": "romain"})
|
||||
assert env.get("USER") == "romain"
|
||||
|
||||
env = self.run_environ(
|
||||
runner, *target, '--env', 'USER=serious', '--default-env', 'USER=clown', environ={'USER': 'romain'}
|
||||
runner, *target, "--env", "USER=serious", "--default-env", "USER=clown", environ={"USER": "romain"}
|
||||
)
|
||||
assert env.get('USER') == 'serious'
|
||||
assert env.get("USER") == "serious"
|
||||
|
||||
@ -4,17 +4,17 @@ from bonobo.util.testing import all_runners
|
||||
|
||||
@all_runners
|
||||
def test_version(runner):
|
||||
out, err = runner('version')
|
||||
out, err = runner("version")
|
||||
out = out.strip()
|
||||
assert out.startswith('bonobo ')
|
||||
assert out.startswith("bonobo ")
|
||||
assert __version__ in out
|
||||
|
||||
out, err = runner('version', '-q')
|
||||
out, err = runner("version", "-q")
|
||||
out = out.strip()
|
||||
assert out.startswith('bonobo ')
|
||||
assert out.startswith("bonobo ")
|
||||
assert __version__ in out
|
||||
|
||||
out, err = runner('version', '-qq')
|
||||
out, err = runner("version", "-qq")
|
||||
out = out.strip()
|
||||
assert not out.startswith('bonobo ')
|
||||
assert __version__ in out
|
||||
assert not out.startswith("bonobo ")
|
||||
assert __version__ in out
|
||||
|
||||
Reference in New Issue
Block a user