Skip to content

Commit b419f32

Browse files
authored
Include filename and hash in duplicate file error message (#16488)
1 parent b4b0424 commit b419f32

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

tests/unit/forklift/test_legacy.py

+13-6
Original file line numberDiff line numberDiff line change
@@ -1962,7 +1962,9 @@ def test_upload_fails_with_existing_filename_diff_content(
19621962
),
19631963
}
19641964
)
1965-
1965+
blake2_256_digest = hashlib.blake2b(
1966+
file_content.getvalue(), digest_size=256 // 8
1967+
).hexdigest()
19661968
db_request.db.add(
19671969
FileFactory.create(
19681970
release=release,
@@ -1986,7 +1988,9 @@ def test_upload_fails_with_existing_filename_diff_content(
19861988
assert db_request.help_url.calls == [pretend.call(_anchor="file-name-reuse")]
19871989
assert resp.status_code == 400
19881990
assert resp.status == (
1989-
"400 File already exists. See /the/help/url/ for more information."
1991+
f"400 File already exists ({filename!r}, "
1992+
f"with blake2_256 hash {blake2_256_digest!r}). "
1993+
"See /the/help/url/ for more information."
19901994
)
19911995

19921996
def test_upload_fails_with_diff_filename_same_blake2(
@@ -2018,15 +2022,16 @@ def test_upload_fails_with_diff_filename_same_blake2(
20182022
}
20192023
)
20202024

2025+
blake2_256_digest = hashlib.blake2b(
2026+
file_content.getvalue(), digest_size=256 // 8
2027+
).hexdigest()
20212028
db_request.db.add(
20222029
FileFactory.create(
20232030
release=release,
20242031
filename=filename,
20252032
md5_digest=hashlib.md5(file_content.getvalue()).hexdigest(),
20262033
sha256_digest=hashlib.sha256(file_content.getvalue()).hexdigest(),
2027-
blake2_256_digest=hashlib.blake2b(
2028-
file_content.getvalue(), digest_size=256 // 8
2029-
).hexdigest(),
2034+
blake2_256_digest=blake2_256_digest,
20302035
path="source/{name[0]}/{name}/{filename}".format(
20312036
name=project.name, filename=filename
20322037
),
@@ -2042,7 +2047,9 @@ def test_upload_fails_with_diff_filename_same_blake2(
20422047
assert db_request.help_url.calls == [pretend.call(_anchor="file-name-reuse")]
20432048
assert resp.status_code == 400
20442049
assert resp.status == (
2045-
"400 File already exists. See /the/help/url/ for more information."
2050+
f"400 File already exists ({db_request.POST['content'].filename!r}, "
2051+
f"with blake2_256 hash {blake2_256_digest!r}). "
2052+
"See /the/help/url/ for more information."
20462053
)
20472054

20482055
@pytest.mark.parametrize(

warehouse/forklift/legacy.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1138,7 +1138,9 @@ def file_upload(request):
11381138
# --skip-existing functionality in twine
11391139
# ref: https://github.com/pypi/warehouse/issues/3482
11401140
# ref: https://github.com/pypa/twine/issues/332
1141-
"File already exists. See "
1141+
"File already exists "
1142+
+ f"({filename!r}, with blake2_256 hash {file_hashes['blake2_256']!r})."
1143+
+ " See "
11421144
+ request.help_url(_anchor="file-name-reuse")
11431145
+ " for more information.",
11441146
)

0 commit comments

Comments
 (0)