1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00

Merge pull request #11679 from sbidoul/direct_url-hashes-sbi

Allow multiple hashes in direct_url.json
This commit is contained in:
Pradyun Gedam 2023-01-28 20:36:01 +00:00 committed by GitHub
commit e32ec0a8c3
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 23 additions and 2 deletions

2
news/11312.feature.rst Normal file
View file

@ -0,0 +1,2 @@
Change the hashes in the installation report to be a mapping. Emit the
``archive_info.hashes`` dictionary in ``direct_url.json``.

View file

@ -103,17 +103,28 @@ class ArchiveInfo:
def __init__(
self,
hash: Optional[str] = None,
hashes: Optional[Dict[str, str]] = None,
) -> None:
if hash is not None:
# Auto-populate the hashes key to upgrade to the new format automatically.
# We don't back-populate the legacy hash key.
hash_name, hash_value = hash.split("=", 1)
if hashes is None:
hashes = {hash_name: hash_value}
elif hash_name not in hash:
hashes = hashes.copy()
hashes[hash_name] = hash_value
self.hash = hash
self.hashes = hashes
@classmethod
def _from_dict(cls, d: Optional[Dict[str, Any]]) -> Optional["ArchiveInfo"]:
if d is None:
return None
return cls(hash=_get(d, str, "hash"))
return cls(hash=_get(d, str, "hash"), hashes=_get(d, dict, "hashes"))
def _to_dict(self) -> Dict[str, Any]:
return _filter_none(hash=self.hash)
return _filter_none(hash=self.hash, hashes=self.hashes)
class DirInfo:

View file

@ -39,6 +39,10 @@ def test_archive_info() -> None:
assert (
direct_url.info.hash == direct_url_dict["archive_info"]["hash"] # type: ignore
)
# test we add the hashes key automatically
direct_url_dict["archive_info"]["hashes"] = { # type: ignore
"sha1": "1b8c5bc61a86f377fea47b4276c8c8a5842d2220"
}
assert direct_url.to_dict() == direct_url_dict

View file

@ -146,6 +146,10 @@ def test_from_link_archive() -> None:
)
assert isinstance(direct_url.info, ArchiveInfo)
assert direct_url.info.hash == "sha1=1b8c5bc61a86f377fea47b4276c8c8a5842d2220"
# Test the hashes key has been automatically populated.
assert direct_url.info.hashes == {
"sha1": "1b8c5bc61a86f377fea47b4276c8c8a5842d2220"
}
def test_from_link_dir(tmpdir: Path) -> None: