Skip to content

Commit ae6423e

Browse files
authored
Parse release version before storing it (#10765)
* Add failing test * Parse release version before storing it This has the effect of removing any potential "preceding v character" from the version: https://www.python.org/dev/peps/pep-0440/#preceding-v-character
1 parent 08adf5d commit ae6423e

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

tests/unit/forklift/test_legacy.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def test_exc_with_exotic_message(self):
9999

100100

101101
class TestValidation:
102-
@pytest.mark.parametrize("version", ["1.0", "30a1", "1!1", "1.0-1"])
102+
@pytest.mark.parametrize("version", ["1.0", "30a1", "1!1", "1.0-1", "v1.0"])
103103
def test_validates_valid_pep440_version(self, version):
104104
form, field = pretend.stub(), pretend.stub(data=version)
105105
legacy._validate_pep440_version(form, field)
@@ -2968,7 +2968,17 @@ def test_upload_updates_existing_project_name(
29682968

29692969
assert release.uploaded_via == "warehouse-tests/6.6.6"
29702970

2971-
def test_upload_succeeds_creates_release(self, pyramid_config, db_request, metrics):
2971+
# here
2972+
@pytest.mark.parametrize(
2973+
"version, expected_version",
2974+
[
2975+
("1.0", "1.0"),
2976+
("v1.0", "1.0"),
2977+
],
2978+
)
2979+
def test_upload_succeeds_creates_release(
2980+
self, pyramid_config, db_request, metrics, version, expected_version
2981+
):
29722982
pyramid_config.testing_securitypolicy(userid=1)
29732983

29742984
user = UserFactory.create()
@@ -2987,7 +2997,7 @@ def test_upload_succeeds_creates_release(self, pyramid_config, db_request, metri
29872997
{
29882998
"metadata_version": "1.2",
29892999
"name": project.name,
2990-
"version": "1.0",
3000+
"version": version,
29913001
"summary": "This is my summary!",
29923002
"filetype": "sdist",
29933003
"md5_digest": _TAR_GZ_PKG_MD5,
@@ -3023,7 +3033,9 @@ def test_upload_succeeds_creates_release(self, pyramid_config, db_request, metri
30233033
# Ensure that a Release object has been created.
30243034
release = (
30253035
db_request.db.query(Release)
3026-
.filter((Release.project == project) & (Release.version == "1.0"))
3036+
.filter(
3037+
(Release.project == project) & (Release.version == expected_version)
3038+
)
30273039
.one()
30283040
)
30293041
assert release.summary == "This is my summary!"
@@ -3035,6 +3047,7 @@ def test_upload_succeeds_creates_release(self, pyramid_config, db_request, metri
30353047
assert set(release.project_urls) == {"Test, https://example.com/"}
30363048
assert set(release.requires_external) == {"Cheese (>1.0)"}
30373049
assert set(release.provides) == {"testing"}
3050+
assert release.version == expected_version
30383051
assert release.canonical_version == "1"
30393052
assert release.uploaded_via == "warehouse-tests/6.6.6"
30403053

warehouse/forklift/legacy.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1131,6 +1131,9 @@ def file_upload(request):
11311131
},
11321132
)
11331133
),
1134+
# This has the effect of removing any preceding v character
1135+
# https://www.python.org/dev/peps/pep-0440/#preceding-v-character
1136+
version=str(packaging.version.parse(form.version.data)),
11341137
canonical_version=canonical_version,
11351138
description=Description(
11361139
content_type=form.description_content_type.data,
@@ -1143,7 +1146,6 @@ def file_upload(request):
11431146
for k in {
11441147
# This is a list of all the fields in the form that we
11451148
# should pull off and insert into our new release.
1146-
"version",
11471149
"summary",
11481150
"license",
11491151
"author",

0 commit comments

Comments
 (0)