Skip to content

Commit 6481aa9

Browse files
authored
Merge pull request #207 from awilkins/fix/support-guaranteed-hashes
Support most of the guaranteed hashes
2 parents b25a72d + 0bf800c commit 6481aa9

File tree

3 files changed

+68
-4
lines changed

3 files changed

+68
-4
lines changed

poetry/core/packages/file_dependency.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def full_path(self): # type: () -> Path
6868
def is_file(self): # type: () -> bool
6969
return True
7070

71-
def hash(self): # type: () -> str
72-
h = hashlib.sha256()
71+
def hash(self, hash_name="sha256"): # type: (str) -> str
72+
h = hashlib.new(hash_name)
7373
with self._full_path.open("rb") as fp:
7474
for content in iter(lambda: fp.read(io.DEFAULT_BUFFER_SIZE), b""):
7575
h.update(content)

pyproject.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "poetry-core"
3-
version = "1.0.5"
3+
version = "1.0.6-alpha.0"
44
description = "Poetry PEP 517 Build Backend"
55
authors = ["Sébastien Eustace <[email protected]>"]
66

tests/packages/test_file_dependency.py

+65-1
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,82 @@
77

88

99
DIST_PATH = Path(__file__).parent.parent / "fixtures" / "distributions"
10+
TEST_FILE = "demo-0.1.0.tar.gz"
1011

1112

1213
def test_file_dependency_wrong_path():
1314
with pytest.raises(ValueError):
14-
FileDependency("demo", DIST_PATH / "demo-0.2.0.tar.gz")
15+
FileDependency("demo", DIST_PATH / TEST_FILE.replace("1", "2"))
1516

1617

1718
def test_file_dependency_dir():
1819
with pytest.raises(ValueError):
1920
FileDependency("demo", DIST_PATH)
2021

2122

23+
def test_default_hash():
24+
path = DIST_PATH / TEST_FILE
25+
dep = FileDependency("demo", path)
26+
SHA_256 = "72e8531e49038c5f9c4a837b088bfcb8011f4a9f76335c8f0654df6ac539b3d6"
27+
assert dep.hash() == SHA_256
28+
29+
30+
try:
31+
from hashlib import algorithms_guaranteed as ALGORITHMS_GUARANTEED
32+
except ImportError:
33+
ALGORITHMS_GUARANTEED = "md5,sha1,sha224,sha256,sha384,sha512".split(",")
34+
35+
36+
@pytest.mark.parametrize(
37+
"hash_name,expected",
38+
[
39+
(hash_name, value)
40+
for hash_name, value in [
41+
("sha224", "972d02f36539a98599aed0566bc8aaf3e6701f4e895dd797d8f5248e"),
42+
(
43+
"sha3_512",
44+
"c04ee109ae52d6440445e24dbd6d244a1d0f0289ef79cb7ba9bc3c139c0237169af9a8f61cd1cf4fc17f853ddf84f97c475ac5bb6c91a4aff0b825b884d4896c",
45+
),
46+
(
47+
"blake2s",
48+
"c336ecbc9d867c9d860accfba4c3723c51c4b5c47a1e0a955e1c8df499e36741",
49+
),
50+
(
51+
"sha3_384",
52+
"d4abb2459941369aabf8880c5287b7eeb80678e14f13c71b9ecf64c772029dc3f93939590bea9ecdb51a1d1a74fefc5a",
53+
),
54+
(
55+
"blake2b",
56+
"48e70abac547ab38e2330e6e6743a0c0f6274dcaa6df2c98135a78a9dd5b04a072d551fc3851b34da03eb0bf50dd71c7f32a8c36956e99fd6c66491bc7844800",
57+
),
58+
(
59+
"sha256",
60+
"72e8531e49038c5f9c4a837b088bfcb8011f4a9f76335c8f0654df6ac539b3d6",
61+
),
62+
(
63+
"sha512",
64+
"e08a00a4b86358e49a318e7e3ba7a3d2fabdd17a2fef95559a0af681ea07ab1296b0b8e11e645297da296290661dc07ae3c8f74eab66bd18a80dce0c0ccb355b",
65+
),
66+
(
67+
"sha384",
68+
"aa3144e28c6700a83247e8ec8711af5d3f5f75997990d48ec41e66bd275b3d0e19ee6f2fe525a358f874aa717afd06a9",
69+
),
70+
("sha3_224", "64bfc6e4125b4c6d67fd88ad1c7d1b5c4dc11a1970e433cd576c91d4"),
71+
("sha1", "4c057579005ac3e68e951a11ffdc4b27c6ae16af"),
72+
(
73+
"sha3_256",
74+
"ba3d2a964b0680b6dc9565a03952e29c294c785d5a2307d3e2d785d73b75ed7e",
75+
),
76+
]
77+
if hash_name in ALGORITHMS_GUARANTEED
78+
],
79+
)
80+
def test_guaranteed_hash(hash_name, expected):
81+
path = DIST_PATH / TEST_FILE
82+
dep = FileDependency("demo", path)
83+
assert dep.hash(hash_name) == expected
84+
85+
2286
def _test_file_dependency_pep_508(
2387
mocker, name, path, pep_508_input, pep_508_output=None
2488
):

0 commit comments

Comments
 (0)