예제 #1
0
파일: test_env.py 프로젝트: zbw0046/poetry
def test_env_site_packages_should_find_the_site_packages_directory_if_root(tmp_dir):
    site_packages = Path(tmp_dir).joinpath("site-packages")
    site_packages.mkdir(parents=True)

    env = MockVirtualEnv(Path(tmp_dir), Path(tmp_dir), sys_path=[str(site_packages)])

    assert site_packages == env.site_packages
예제 #2
0
파일: test_env.py 프로젝트: zbw0046/poetry
def test_env_site_packages_should_prefer_site_packages_over_dist_packages(tmp_dir):
    dist_packages = Path(tmp_dir).joinpath("dist-packages")
    dist_packages.mkdir(parents=True)
    site_packages = Path(tmp_dir).joinpath("site-packages")
    site_packages.mkdir(parents=True)

    env = MockVirtualEnv(
        Path(tmp_dir), Path(tmp_dir), sys_path=[str(dist_packages), str(site_packages)]
    )

    assert site_packages == env.site_packages
예제 #3
0
def test_env_site_packages_should_find_the_site_packages_directory_if_standard(
        tmp_dir):
    if WINDOWS:
        site_packages = Path(tmp_dir).joinpath("Lib/site-packages")
    else:
        site_packages = Path(tmp_dir).joinpath(
            "lib/python{}/site-packages".format(".".join(
                str(v) for v in sys.version_info[:2])))

    site_packages.mkdir(parents=True)

    env = VirtualEnv(Path(tmp_dir), Path(tmp_dir))

    assert site_packages == env.site_packages
예제 #4
0
def test_remove_keeps_dir_if_not_deleteable(tmp_dir, manager, poetry, config,
                                            mocker):
    # Ensure we empty rather than delete folder if its is an active mount point.
    # See https://github.com/python-poetry/poetry/pull/2064
    config.merge({"virtualenvs": {"path": str(tmp_dir)}})

    venv_name = manager.generate_env_name("simple-project",
                                          str(poetry.file.parent))
    venv_path = Path(tmp_dir) / "{}-py3.6".format(venv_name)
    venv_path.mkdir()

    folder1_path = venv_path / "folder1"
    folder1_path.mkdir()

    file1_path = folder1_path / "file1"
    file1_path.touch(exist_ok=False)

    file2_path = venv_path / "file2"
    file2_path.touch(exist_ok=False)

    mocker.patch(
        "poetry.utils._compat.subprocess.check_output",
        side_effect=check_output_wrapper(Version.parse("3.6.6")),
    )

    original_rmtree = shutil.rmtree

    def err_on_rm_venv_only(path, *args, **kwargs):
        print(path)
        if path == str(venv_path):
            raise OSError(16,
                          "Test error")  # ERRNO 16: Device or resource busy
        else:
            original_rmtree(path)

    m = mocker.patch("shutil.rmtree", side_effect=err_on_rm_venv_only)

    venv = manager.remove("{}-py3.6".format(venv_name))

    m.assert_any_call(str(venv_path))

    assert venv_path == venv.path
    assert venv_path.exists()

    assert not folder1_path.exists()
    assert not file1_path.exists()
    assert not file2_path.exists()

    m.side_effect = original_rmtree  # Avoid teardown using `err_on_rm_venv_only`
예제 #5
0
def prepare_metadata_for_build_wheel(metadata_directory, config_settings=None):
    poetry = Factory().create_poetry(Path("."))
    builder = WheelBuilder(poetry, SystemEnv(Path(sys.prefix)), NullIO())

    dist_info = Path(metadata_directory, builder.dist_info)
    dist_info.mkdir(parents=True, exist_ok=True)

    if "scripts" in poetry.local_config or "plugins" in poetry.local_config:
        with (dist_info / "entry_points.txt").open("w", encoding="utf-8") as f:
            builder._write_entry_points(f)

    with (dist_info / "WHEEL").open("w", encoding="utf-8") as f:
        builder._write_wheel_file(f)

    with (dist_info / "METADATA").open("w", encoding="utf-8") as f:
        builder._write_metadata_file(f)

    return dist_info.name
예제 #6
0
def config_cache_dir(tmp_dir):
    path = Path(tmp_dir) / ".cache" / "pypoetry"
    path.mkdir(parents=True)
    return path
예제 #7
0
def env(tmp_dir):
    path = Path(tmp_dir) / ".venv"
    path.mkdir(parents=True)
    return MockEnv(path=path, is_venv=True)