Exemple #1
0
def test_dont_create_wrapper_when_file_has_same_name(tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    os.makedirs(str(bin_dir))
    # It should not create a wrapper for run-in, otherwise it will overwrite
    _create_executable_file(bin_dir.join("run-in"))

    create_conda_wrappers(
        [str(bin_dir.join("python")),
         str(bin_dir.join("gcc"))],
        str(wrappers_dir),
        "miniconda/envs/test",
        inline=False,
    )

    run_in_template_path = os.path.join(get_templates_dir(), "conda",
                                        "run-in" + get_wrapper_extension())
    with open(run_in_template_path) as f:
        expected_run_in_content = (f.read().replace(
            "__CONDA_PREFIX__",
            os.path.abspath("miniconda/envs/test")).replace(
                "__CONDA_DEFAULT_ENV__", "test").replace("__COMMAND__", ""))

    assert (wrappers_dir.join("run-in" + get_wrapper_extension()).read() ==
            expected_run_in_content)
def test_dont_create_wrapper_when_file_has_same_name(tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    bin_dir = tmpdir.join('bin')
    os.makedirs(str(bin_dir))
    # It should not create a wrapper for run-in, otherwise it will overwrite
    _create_executable_file(bin_dir.join('run-in'))

    create_conda_wrappers(
        [str(bin_dir.join('python')),
         str(bin_dir.join('gcc'))],
        str(wrappers_dir),
        'miniconda/envs/test',
        inline=False)

    run_in_template_path = os.path.join(get_templates_dir(), 'conda',
                                        'run-in' + get_wrapper_extension())
    with open(run_in_template_path) as f:
        expected_run_in_content = f.read() \
            .replace('__CONDA_PREFIX__',
                     os.path.abspath('miniconda/envs/test')) \
            .replace('__CONDA_DEFAULT_ENV__', 'test') \
            .replace('__COMMAND__', '')

    assert wrappers_dir.join('run-in' + get_wrapper_extension()).read() == \
        expected_run_in_content
def test_dont_create_wrapper_when_file_has_same_name(tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    os.makedirs(str(bin_dir))
    # It should not create a wrapper for run-in, otherwise it will overwrite
    _create_executable_file(bin_dir.join("run-in"))

    create_conda_wrappers(
        [str(bin_dir.join("python")), str(bin_dir.join("gcc"))],
        str(wrappers_dir),
        "miniconda/envs/test",
        inline=False,
    )

    run_in_template_path = os.path.join(
        get_templates_dir(), "conda", "run-in" + get_wrapper_extension()
    )
    with open(run_in_template_path) as f:
        expected_run_in_content = (
            f.read()
            .replace("__CONDA_PREFIX__", os.path.abspath("miniconda/envs/test"))
            .replace("__CONDA_DEFAULT_ENV__", "test")
            .replace("__COMMAND__", "")
        )

    assert (
        wrappers_dir.join("run-in" + get_wrapper_extension()).read()
        == expected_run_in_content
    )
def _environ_from_wrapper():
    python_wrapper = os.path.normpath("wrappers/python") + get_wrapper_extension()
    output = subprocess.check_output(
        [python_wrapper, "-c", "from os import environ; print(dict(environ))"]
    )
    environ_from_wrapper = eval(output)
    return environ_from_wrapper
def _check_wrappers(wrappers_dir, basenames):
    obtained_wrappers = sorted([f.basename for f in wrappers_dir.listdir()])
    expected_wrappers = sorted([f + get_wrapper_extension() for f in basenames])

    assert obtained_wrappers == expected_wrappers

    for f in wrappers_dir.listdir():
        assert os.access(str(f), os.X_OK)
Exemple #6
0
def _check_wrappers(wrappers_dir, basenames):
    obtained_wrappers = sorted([f.basename for f in wrappers_dir.listdir()])
    expected_wrappers = sorted(
        [f + get_wrapper_extension() for f in basenames])

    assert obtained_wrappers == expected_wrappers

    for f in wrappers_dir.listdir():
        assert os.access(str(f), os.X_OK)
def _environ_from_wrapper():
    python_wrapper = os.path.normpath('wrappers/python') + \
                     get_wrapper_extension()
    output = subprocess.check_output([
        python_wrapper,
        '-c',
        'from os import environ; print(dict(environ))',
    ])
    environ_from_wrapper = eval(output)
    return environ_from_wrapper
def _environ_from_activate(activate_script, tmpdir):
    activate_file = tmpdir.join('environ-from-activate') + \
                    get_wrapper_extension()
    activate_file.write('''%s
        python -c "from os import environ; print(dict(environ))"
    ''' % activate_script)
    activate_file.chmod(activate_file.stat().mode | stat.S_IXUSR)
    output = subprocess.check_output(str(activate_file))
    environ_from_activate = eval(output)
    return environ_from_activate
def test_inline_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--files-to-wrap',
        'python:gcc',
        '--dest-dir',
        str(wrappers_dir),
        '--inline',
    ] + extra_args)

    # No run-in file
    _check_wrappers(wrappers_dir, ['python', 'gcc'])

    wrapper = wrappers_dir.join('python' + get_wrapper_extension())
    assert contents in wrapper.read()
    wrapper = wrappers_dir.join('gcc' + get_wrapper_extension())
    assert contents in wrapper.read()
Exemple #10
0
def test_inline_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")

    create_wrappers._main([
        "-t",
        wrapper_type,
        "--files-to-wrap",
        "python:gcc",
        "--dest-dir",
        str(wrappers_dir),
        "--inline",
    ] + extra_args)

    # No run-in file
    _check_wrappers(wrappers_dir, ["python", "gcc"])

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    assert contents in wrapper.read()
    wrapper = wrappers_dir.join("gcc" + get_wrapper_extension())
    assert contents in wrapper.read()
Exemple #11
0
def _create_custom_run_in_file(tmpdir):
    if sys.platform == "win32":
        run_in_content = "echo %~1 %~2\r\n"
    else:
        run_in_content = '#/bin/sh\necho "$@"\n'

    run_in_filepath = tmpdir.join("custom-run-in" + get_wrapper_extension())
    _create_executable_file(run_in_filepath)

    run_in_filepath.write(run_in_content)

    return run_in_filepath
def _environ_from_activate(activate_script, tmpdir):
    activate_file = tmpdir.join("environ-from-activate") + get_wrapper_extension()
    activate_file.write(
        """%s
        python -c "from os import environ; print(dict(environ))"
    """
        % activate_script
    )
    activate_file.chmod(activate_file.stat().mode | stat.S_IXUSR)
    output = subprocess.check_output(str(activate_file))
    environ_from_activate = eval(output)
    return environ_from_activate
def _create_custom_run_in_file(tmpdir):
    if sys.platform == 'win32':
        run_in_content = 'echo %*\r\n'
    else:
        run_in_content = '#/bin/sh\necho "$@"\n'

    run_in_filepath = tmpdir.join('custom-run-in' + get_wrapper_extension())
    _create_executable_file(run_in_filepath)

    run_in_filepath.write(run_in_content)

    return run_in_filepath
def _create_custom_run_in_file(tmpdir):
    if sys.platform == "win32":
        run_in_content = "echo %~1 %~2\r\n"
    else:
        run_in_content = '#/bin/sh\necho "$@"\n'

    run_in_filepath = tmpdir.join("custom-run-in" + get_wrapper_extension())
    _create_executable_file(run_in_filepath)

    run_in_filepath.write(run_in_content)

    return run_in_filepath
def test_inline_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")

    create_wrappers._main(
        [
            "-t",
            wrapper_type,
            "--files-to-wrap",
            "python:gcc",
            "--dest-dir",
            str(wrappers_dir),
            "--inline",
        ]
        + extra_args
    )

    # No run-in file
    _check_wrappers(wrappers_dir, ["python", "gcc"])

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    assert contents in wrapper.read()
    wrapper = wrappers_dir.join("gcc" + get_wrapper_extension())
    assert contents in wrapper.read()
Exemple #16
0
def test_specified_wrappers_should_use_relative_path_by_default(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")

    create_wrappers._main([
        "-t",
        wrapper_type,
        "--files-to-wrap",
        "python:gcc",
        "--dest-dir",
        str(wrappers_dir),
    ] + extra_args)

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be exactly as we passed to command line
    assert ' "python" ' in wrapper.read()
Exemple #17
0
def test_automatic_wrappers_should_use_absolute_path_by_default(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join("python"))

    create_wrappers._main([
        "-t", wrapper_type, "--bin-dir",
        str(bin_dir), "--dest-dir",
        str(wrappers_dir)
    ] + extra_args)

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(python_bin) in wrapper.read()
def test_automatic_wrappers_should_use_absolute_path_by_default(
    wrapper_type, extra_args, contents, tmpdir
):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join("python"))

    create_wrappers._main(
        ["-t", wrapper_type, "--bin-dir", str(bin_dir), "--dest-dir", str(wrappers_dir)]
        + extra_args
    )

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(python_bin) in wrapper.read()
Exemple #19
0
def _environ_from_wrapper():
    python_wrapper = os.path.normpath("wrappers/python") + get_wrapper_extension()
    with pytest.raises(subprocess.CalledProcessError) as exc_info:
        # Return a non-zero exit code on purpose, to make sure wrapper returns it.
        subprocess.check_output(
            [
                python_wrapper,
                "-c",
                "from os import environ; print(dict(environ))"
                "; import sys; sys.exit(42)",
            ]
        )
    assert exc_info.value.returncode == 42
    output = exc_info.value.output
    environ_from_wrapper = eval(output)
    return environ_from_wrapper
def test_specified_wrappers_should_use_relative_path_by_default(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--files-to-wrap',
        'python:gcc',
        '--dest-dir',
        str(wrappers_dir),
    ] + extra_args)

    wrapper = wrappers_dir.join('python' + get_wrapper_extension())
    # The wrapped command should be exactly as we passed to command line
    assert ' python ' in wrapper.read()
def test_create_automatic_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    _create_executable_file(bin_dir.join("python"))
    _create_executable_file(bin_dir.join("gcc"))

    create_wrappers._main(
        ["-t", wrapper_type, "--bin-dir", str(bin_dir), "--dest-dir", str(wrappers_dir)]
        + extra_args
    )

    _check_wrappers(wrappers_dir, ["run-in", "python", "gcc"])

    wrapper = wrappers_dir.join("run-in" + get_wrapper_extension())
    # The wrapped command should be absolute
    wrapper_contents = wrapper.read()
    assert contents in wrapper_contents
    assert "__COMMAND__" not in wrapper_contents
def test_automatic_wrappers_should_use_absolute_path_by_default(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    bin_dir = tmpdir.join('bin')
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join('python'))

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--bin-dir',
        str(bin_dir),
        '--dest-dir',
        str(wrappers_dir),
    ] + extra_args)

    wrapper = wrappers_dir.join('python' + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(python_bin) in wrapper.read()
def test_specified_wrappers_should_use_absolute_path_when_given_bin_dir(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    bin_dir = tmpdir.join('bin')

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--bin-dir',
        str(bin_dir),
        '--files-to-wrap',
        'python:gcc',
        '--dest-dir',
        str(wrappers_dir),
    ] + extra_args)

    wrapper = wrappers_dir.join('python' + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(bin_dir.join('python')) in wrapper.read()
Exemple #24
0
def test_specified_wrappers_should_use_absolute_path_when_given_bin_dir(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")

    create_wrappers._main([
        "-t",
        wrapper_type,
        "--bin-dir",
        str(bin_dir),
        "--files-to-wrap",
        "python:gcc",
        "--dest-dir",
        str(wrappers_dir),
    ] + extra_args)

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(bin_dir.join("python")) in wrapper.read()
Exemple #25
0
def test_create_automatic_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    _create_executable_file(bin_dir.join("python"))
    _create_executable_file(bin_dir.join("gcc"))

    create_wrappers._main([
        "-t", wrapper_type, "--bin-dir",
        str(bin_dir), "--dest-dir",
        str(wrappers_dir)
    ] + extra_args)

    _check_wrappers(wrappers_dir, ["run-in", "python", "gcc"])

    wrapper = wrappers_dir.join("run-in" + get_wrapper_extension())
    # The wrapped command should be absolute
    wrapper_contents = wrapper.read()
    assert contents in wrapper_contents
    assert "__COMMAND__" not in wrapper_contents
Exemple #26
0
def test_automatic_wrappers_should_use_basename_when_asked(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join("python"))

    create_wrappers._main([
        "-t",
        wrapper_type,
        "--bin-dir",
        str(bin_dir),
        "--dest-dir",
        str(wrappers_dir),
        "--use-basename",
    ] + extra_args)

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be the basename only
    assert '"{}"'.format(python_bin.basename) in wrapper.read()
def test_specified_wrappers_should_use_relative_path_by_default(
    wrapper_type, extra_args, contents, tmpdir
):
    wrappers_dir = tmpdir.join("wrappers")

    create_wrappers._main(
        [
            "-t",
            wrapper_type,
            "--files-to-wrap",
            "python:gcc",
            "--dest-dir",
            str(wrappers_dir),
        ]
        + extra_args
    )

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be exactly as we passed to command line
    assert ' "python" ' in wrapper.read()
def test_automatic_wrappers_should_use_basename_when_asked(
        wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    bin_dir = tmpdir.join('bin')
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join('python'))

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--bin-dir',
        str(bin_dir),
        '--dest-dir',
        str(wrappers_dir),
        '--use-basename',
    ] + extra_args)

    wrapper = wrappers_dir.join('python' + get_wrapper_extension())
    # The wrapped command should be the basename only
    assert ' {} '.format(python_bin.basename) in wrapper.read()
Exemple #29
0
def test_create_custom_wrappers(tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    run_in_file = _create_custom_run_in_file(tmpdir)

    create_wrappers._main([
        "-t",
        "custom",
        "--custom-script",
        str(run_in_file),
        "--files-to-wrap",
        "python",
        "--dest-dir",
        str(wrappers_dir),
    ])

    _check_wrappers(wrappers_dir, ["run-in", "python"])

    python_wrapper = str(wrappers_dir.join("python" + get_wrapper_extension()))
    python_output = str(
        subprocess.check_output([python_wrapper, "--version"]).decode())
    assert python_output.strip("\r\n") == "python --version"
def test_create_custom_wrappers(tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    run_in_file = _create_custom_run_in_file(tmpdir)

    create_wrappers._main([
        '-t',
        'custom',
        '--custom-script',
        str(run_in_file),
        '--files-to-wrap',
        'python',
        '--dest-dir',
        str(wrappers_dir),
    ])

    _check_wrappers(wrappers_dir, ['run-in', 'python'])

    python_wrapper = str(wrappers_dir.join('python' + get_wrapper_extension()))
    python_output = str(
        subprocess.check_output([python_wrapper, '--version']).decode())
    assert python_output.strip('\r\n') == 'python --version'
def test_create_custom_wrappers(tmpdir):
    wrappers_dir = tmpdir.join("wrappers")
    run_in_file = _create_custom_run_in_file(tmpdir)

    create_wrappers._main(
        [
            "-t",
            "custom",
            "--custom-script",
            str(run_in_file),
            "--files-to-wrap",
            "python",
            "--dest-dir",
            str(wrappers_dir),
        ]
    )

    _check_wrappers(wrappers_dir, ["run-in", "python"])

    python_wrapper = str(wrappers_dir.join("python" + get_wrapper_extension()))
    python_output = str(subprocess.check_output([python_wrapper, "--version"]).decode())
    assert python_output.strip("\r\n") == "python --version"
def test_create_automatic_wrappers(wrapper_type, extra_args, contents, tmpdir):
    wrappers_dir = tmpdir.join('wrappers')
    bin_dir = tmpdir.join('bin')
    bin_dir.mkdir()
    _create_executable_file(bin_dir.join('python'))
    _create_executable_file(bin_dir.join('gcc'))

    create_wrappers._main([
        '-t',
        wrapper_type,
        '--bin-dir',
        str(bin_dir),
        '--dest-dir',
        str(wrappers_dir),
    ] + extra_args)

    _check_wrappers(wrappers_dir, ['run-in', 'python', 'gcc'])

    wrapper = wrappers_dir.join('run-in' + get_wrapper_extension())
    # The wrapped command should be absolute
    wrapper_contents = wrapper.read()
    assert contents in wrapper_contents
    assert '__COMMAND__' not in wrapper_contents
def test_specified_wrappers_should_use_absolute_path_when_given_bin_dir(
    wrapper_type, extra_args, contents, tmpdir
):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")

    create_wrappers._main(
        [
            "-t",
            wrapper_type,
            "--bin-dir",
            str(bin_dir),
            "--files-to-wrap",
            "python:gcc",
            "--dest-dir",
            str(wrappers_dir),
        ]
        + extra_args
    )

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be absolute
    assert str(bin_dir.join("python")) in wrapper.read()
def test_automatic_wrappers_should_use_basename_when_asked(
    wrapper_type, extra_args, contents, tmpdir
):
    wrappers_dir = tmpdir.join("wrappers")
    bin_dir = tmpdir.join("bin")
    bin_dir.mkdir()
    python_bin = _create_executable_file(bin_dir.join("python"))

    create_wrappers._main(
        [
            "-t",
            wrapper_type,
            "--bin-dir",
            str(bin_dir),
            "--dest-dir",
            str(wrappers_dir),
            "--use-basename",
        ]
        + extra_args
    )

    wrapper = wrappers_dir.join("python" + get_wrapper_extension())
    # The wrapped command should be the basename only
    assert '"{}"'.format(python_bin.basename) in wrapper.read()