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
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
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
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`
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
def config_cache_dir(tmp_dir): path = Path(tmp_dir) / ".cache" / "pypoetry" path.mkdir(parents=True) return path
def env(tmp_dir): path = Path(tmp_dir) / ".venv" path.mkdir(parents=True) return MockEnv(path=path, is_venv=True)