Skip to content

Commit 1f89b6d

Browse files
committed
Refactor package case check
Refactor package case check so that logic is directly in package_manifest.py, rather than hidden in a poorly named util function Update test to reflect that updating packages that already exist with different case should still be valid
1 parent e01b725 commit 1f89b6d

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

django/thunderstore/repository/package_manifest.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,7 @@
1313
PackageVersionField,
1414
StrictCharField,
1515
)
16-
from thunderstore.repository.utils import (
17-
does_contain_package,
18-
has_different_case,
19-
has_duplicate_packages,
20-
)
16+
from thunderstore.repository.utils import does_contain_package, has_duplicate_packages
2117

2218

2319
class PackageInstallerSerializer(serializers.Serializer):
@@ -100,10 +96,13 @@ def validate(self, data):
10096
)
10197
if does_contain_package(result["dependencies"], reference):
10298
raise ValidationError("Package depending on itself is not allowed")
103-
if has_different_case(reference.without_version):
104-
raise ValidationError(
105-
"Package name already exists with different capitalization"
106-
)
99+
if not reference.without_version.exists: # if we're making a new package
100+
if (
101+
reference.without_version.exists_in_any_case
102+
): # if it exists in a different case
103+
raise ValidationError(
104+
"Package name already exists with different capitalization"
105+
)
107106
return result
108107

109108
def update(self, instance, validated_data):

django/thunderstore/repository/tests/test_package_manifest.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,16 @@ def test_manifest_v1_serializer_package_already_exists_with_different_case(
7575
assert "Package name already exists with different capitalization" in str(
7676
serializer.errors["non_field_errors"][0]
7777
)
78+
# Updating packages that already exist with different case should still be valid
79+
PackageFactory(
80+
owner=package.owner, name=package.name.swapcase(), namespace=package.namespace
81+
)
82+
serializer = ManifestV1Serializer(
83+
user=user,
84+
team=package.owner,
85+
data=manifest_v1_data,
86+
)
87+
assert serializer.is_valid() is True
7888

7989

8090
@pytest.mark.django_db

django/thunderstore/repository/utils.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,6 @@ def has_duplicate_packages(packages: List["PackageReference"]) -> bool:
4242
return False
4343

4444

45-
def has_different_case(reference: "PackageReference") -> bool:
46-
if reference.exists:
47-
return False
48-
elif reference.exists_in_any_case:
49-
return True
50-
return False
51-
52-
5345
def unpack_serializer_errors(field, errors, error_dict=None):
5446
if error_dict is None:
5547
error_dict = {}

0 commit comments

Comments
 (0)