From a164b8c1a9643b74b9a6bcd9785ffcfc7e2135b2 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Thu, 6 Mar 2025 22:48:01 +0100 Subject: [PATCH 1/4] Define `pkg` as a PackageURL class attribute --- src/packageurl/__init__.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/packageurl/__init__.py b/src/packageurl/__init__.py index 8199e39..76ff71d 100644 --- a/src/packageurl/__init__.py +++ b/src/packageurl/__init__.py @@ -313,6 +313,7 @@ class PackageURL( A purl is a package URL as defined at https://github.com/package-url/purl-spec """ + SCHEME: str = "pkg" type: str namespace: str | None @@ -409,7 +410,7 @@ def to_string(self) -> str: encode=True, ) - purl = ["pkg:", type, "/"] + purl = [f"{self.SCHEME}:", type, "/"] if namespace: purl.extend((namespace, "/")) @@ -440,8 +441,10 @@ def from_string(cls, purl: str) -> Self: raise ValueError("A purl string argument is required.") scheme, sep, remainder = purl.partition(":") - if not sep or scheme != "pkg": - raise ValueError(f'purl is missing the required "pkg" scheme component: {purl!r}.') + if not sep or scheme != cls.SCHEME: + raise ValueError( + f'purl is missing the required "{cls.SCHEME}" scheme component: {purl!r}.' + ) # this strip '/, // and /// as possible in :// or :/// remainder = remainder.strip().lstrip("/") From 136403fc141b065cc145d3884ebc85d1524b190b Mon Sep 17 00:00:00 2001 From: jaimergp Date: Mon, 17 Mar 2025 10:24:38 +0100 Subject: [PATCH 2/4] Black --- src/packageurl/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/packageurl/__init__.py b/src/packageurl/__init__.py index 76ff71d..ef82bc4 100644 --- a/src/packageurl/__init__.py +++ b/src/packageurl/__init__.py @@ -313,6 +313,7 @@ class PackageURL( A purl is a package URL as defined at https://github.com/package-url/purl-spec """ + SCHEME: str = "pkg" type: str From 4ec193fe21067dfbf7b1ed352df4d2d2b2d3ae69 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Thu, 5 Jun 2025 15:38:28 +0200 Subject: [PATCH 3/4] use ClassVar --- src/packageurl/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/packageurl/__init__.py b/src/packageurl/__init__.py index ef82bc4..593c964 100644 --- a/src/packageurl/__init__.py +++ b/src/packageurl/__init__.py @@ -37,6 +37,7 @@ if TYPE_CHECKING: from collections.abc import Callable from collections.abc import Iterable + from typing import ClassVar from typing_extensions import Literal from typing_extensions import Self @@ -314,7 +315,7 @@ class PackageURL( https://github.com/package-url/purl-spec """ - SCHEME: str = "pkg" + SCHEME: ClassVar[str] = "pkg" type: str namespace: str | None From 74ef7b26c6527b57319ab3142e8c997f9bf75831 Mon Sep 17 00:00:00 2001 From: jaimergp Date: Thu, 5 Jun 2025 15:38:50 +0200 Subject: [PATCH 4/4] cleaner without f-string --- src/packageurl/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/packageurl/__init__.py b/src/packageurl/__init__.py index 593c964..ff4ef96 100644 --- a/src/packageurl/__init__.py +++ b/src/packageurl/__init__.py @@ -412,7 +412,7 @@ def to_string(self) -> str: encode=True, ) - purl = [f"{self.SCHEME}:", type, "/"] + purl = [self.SCHEME, ":", type, "/"] if namespace: purl.extend((namespace, "/"))