def test_project_name_and_version_from_filename( pygoogleearth_zip_sdist, # type: str pip_tgz_sdist, # type: str pip_wheel, # type: str ): # type: (...) -> None assert PYGOOGLEEARTH_PROJECT_NAME_AND_VERSION == ProjectNameAndVersion.from_filename( pygoogleearth_zip_sdist ) assert PIP_PROJECT_NAME_AND_VERSION == ProjectNameAndVersion.from_filename(pip_tgz_sdist) assert PIP_PROJECT_NAME_AND_VERSION == ProjectNameAndVersion.from_filename(pip_wheel)
def test_project_name_and_version_fallback(tmpdir): # type: (Any) -> None def tmp_path(relpath): # type: (str) -> str return os.path.join(str(tmpdir), relpath) expected_metadata_project_name_and_version = ProjectNameAndVersion("foo", "1.2.3") pkg_info_src = tmp_path("PKG-INFO") with open(pkg_info_src, "w") as fp: fp.write("Name: {}\n".format(expected_metadata_project_name_and_version.project_name)) fp.write("Version: {}\n".format(expected_metadata_project_name_and_version.version)) sdist_path = tmp_path("bar-baz-4.5.6.tar.gz") with tarfile.open(sdist_path, mode="w:gz") as tf: # N.B.: Valid PKG-INFO at an invalid location. tf.add(pkg_info_src, arcname="PKG-INFO") with ENV.patch(PEX_EMIT_WARNINGS="True"), warnings.catch_warnings(record=True) as events: assert project_name_and_version(sdist_path, fallback_to_filename=False) is None assert 1 == len(events) warning = events[0] assert PEXWarning == warning.category assert "bar-baz-4.5.6/PKG-INFO" in str(warning.message) assert ProjectNameAndVersion("bar-baz", "4.5.6") == project_name_and_version( sdist_path, fallback_to_filename=True ) name_and_version = "eggs-7.8.9" pkf_info_path = "{}/PKG-INFO".format(name_and_version) def write_sdist_tgz(extension): sdist_path = tmp_path("{}.{}".format(name_and_version, extension)) with tarfile.open(sdist_path, mode="w:gz") as tf: tf.add(pkg_info_src, arcname=pkf_info_path) return sdist_path assert expected_metadata_project_name_and_version == project_name_and_version( write_sdist_tgz("tar.gz"), fallback_to_filename=False ) assert expected_metadata_project_name_and_version == project_name_and_version( write_sdist_tgz("sdist"), fallback_to_filename=False ) zip_sdist_path = tmp_path("{}.zip".format(name_and_version)) with open_zip(zip_sdist_path, mode="w") as zf: zf.write(pkg_info_src, arcname=pkf_info_path) assert expected_metadata_project_name_and_version == project_name_and_version( zip_sdist_path, fallback_to_filename=False )
def _try_parse_project_name_and_specifier_from_path(path): # type: (str) -> Optional[ProjectNameAndSpecifier] try: return ProjectNameAndSpecifier.from_project_name_and_version( ProjectNameAndVersion.from_filename(path) ) except MetadataError: return None
def _fixup_install( dist, # type: str install_dir, # type: str ): # type: (...) -> None # The dist-info metadata directory is named as specifed in: # https://www.python.org/dev/peps/pep-0427/ # https://packaging.python.org/specifications/recording-installed-packages/#the-dist-info-directory project_name_and_version = dist_metadata.project_name_and_version( dist) or ProjectNameAndVersion.from_filename(dist) project_name = safe_name( project_name_and_version.project_name).replace("-", "_") version = safe_version(project_name_and_version.version).replace( "-", "_") dist_info_dir = os.path.join( install_dir, "{project_name}-{version}.dist-info".format( project_name=project_name, version=version), ) # The `direct_url.json` file is both mandatory for Pip to install and non-hermetic for # Pex's purpose, since it contains the absolute local filesystem path to any local wheel # file Pex installs via Pip. We remove the file and its entry in RECORD so that PEX files # are bytewise reproducible. The absence of the direct_url.json file only affects Pex venvs # where further mutation by PEP-compatible packaging tooling (e.g.: Pip) may be hindered. # In particular, `pip freeze` for any distributions provided by local projects or archives # will produce unuseful entries for those distributions. # # See: # https://www.python.org/dev/peps/pep-0610/ # https://packaging.python.org/specifications/direct-url/#specification direct_url_relpath = os.path.join(os.path.basename(dist_info_dir), "direct_url.json") direct_url_abspath = os.path.join(os.path.dirname(dist_info_dir), direct_url_relpath) if not os.path.exists(direct_url_abspath): return with open(direct_url_abspath) as fp: if urlparse.urlparse(json.load(fp)["url"]).scheme != "file": return os.unlink(direct_url_abspath) # The RECORD is a csv file with the path to each installed file in the 1st column. # See: https://www.python.org/dev/peps/pep-0376/#record with closing( fileinput.input(files=[os.path.join(dist_info_dir, "RECORD")], inplace=True)) as record_fi: for line in record_fi: if line.split(",")[0] != direct_url_relpath: # N.B.: These lines include the newline already. sys.stdout.write(line)
def test_project_name_and_version_from_filename_invalid(): # type: () -> None with pytest.raises(MetadataError): ProjectNameAndVersion.from_filename("unknown_distribution.format")
def test_project_name_and_version_from_filename_pep625(): # type: () -> None assert ProjectNameAndVersion( "a-distribution-name", "1.2.3" ) == ProjectNameAndVersion.from_filename("a-distribution-name-1.2.3.sdist")
transitive=False, use_wheel=False, ).wait() dists = os.listdir(download_dir) assert len(dists) == 1, "Expected 1 dist to be downloaded for {}.".format(requirement) sdist = os.path.join(download_dir, dists[0]) assert sdist.endswith((".sdist", ".tar.gz", ".zip")) yield sdist def as_requirement(project_name_and_version): # type: (ProjectNameAndVersion) -> str return "{}=={}".format(project_name_and_version.project_name, project_name_and_version.version) PYGOOGLEEARTH_PROJECT_NAME_AND_VERSION = ProjectNameAndVersion("pygoogleearth", "0.0.2") @pytest.fixture(scope="module") def pygoogleearth_zip_sdist(): # type: () -> Iterator[str] with downloaded_sdist(as_requirement(PYGOOGLEEARTH_PROJECT_NAME_AND_VERSION)) as sdist: assert sdist.endswith(".zip") yield sdist PIP_PROJECT_NAME_AND_VERSION = ProjectNameAndVersion("pip", "20.3.1") @pytest.fixture(scope="module") def pip_tgz_sdist():