Skip to content

Commit 367bef1

Browse files
committed
feat: added helper method to return a PackageURL object representing a Component
Signed-off-by: Paul Horton <[email protected]>
1 parent f3ac42f commit 367bef1

File tree

2 files changed

+40
-9
lines changed

2 files changed

+40
-9
lines changed

cyclonedx/model/component.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
# Copyright (c) OWASP Foundation. All Rights Reserved.
1919

2020
from enum import Enum
21+
from packageurl import PackageURL
2122

2223
PURL_TYPE_PREFIX = 'pypi'
2324

@@ -90,6 +91,19 @@ def set_description(self, description: str):
9091
def set_license(self, license_str: str):
9192
self._license = license_str
9293

94+
def to_package_url(self) -> PackageURL:
95+
"""
96+
Return a PackageURL representation of this Component.
97+
98+
:return: PackageURL
99+
"""""
100+
return PackageURL(
101+
type=PURL_TYPE_PREFIX,
102+
name=self._name,
103+
version=self._version,
104+
qualifiers=self._qualifiers
105+
)
106+
93107
def __eq__(self, other):
94108
return other.get_purl() == self.get_purl()
95109

tests/test_component.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,19 @@
2525

2626

2727
class TestComponent(TestCase):
28-
_component: Component
2928

3029
@classmethod
3130
def setUpClass(cls) -> None:
32-
cls._component = Component(name='setuptools', version='50.3.2').get_purl()
33-
cls._component_with_qualifiers = Component(name='setuptools', version='50.3.2',
34-
qualifiers='extension=tar.gz').get_purl()
31+
cls._component: Component = Component(name='setuptools', version='50.3.2')
32+
cls._component_with_qualifiers: Component = Component(name='setuptools', version='50.3.2',
33+
qualifiers='extension=tar.gz')
3534

3635
def test_purl_correct(self):
3736
self.assertEqual(
3837
str(PackageURL(
3938
type='pypi', name='setuptools', version='50.3.2'
4039
)),
41-
TestComponent._component
40+
TestComponent._component.get_purl()
4241
)
4342

4443
def test_purl_incorrect_version(self):
@@ -47,7 +46,7 @@ def test_purl_incorrect_version(self):
4746
)
4847
self.assertNotEqual(
4948
str(purl),
50-
TestComponent._component
49+
TestComponent._component.get_purl()
5150
)
5251
self.assertEqual(purl.type, 'pypi')
5352
self.assertEqual(purl.name, 'setuptools')
@@ -59,7 +58,7 @@ def test_purl_incorrect_name(self):
5958
)
6059
self.assertNotEqual(
6160
str(purl),
62-
TestComponent._component
61+
TestComponent._component.get_purl()
6362
)
6463
self.assertEqual(purl.type, 'pypi')
6564
self.assertEqual(purl.name, 'setuptoolz')
@@ -71,10 +70,28 @@ def test_purl_with_qualifiers(self):
7170
)
7271
self.assertEqual(
7372
str(purl),
74-
TestComponent._component_with_qualifiers
73+
TestComponent._component_with_qualifiers.get_purl()
7574
)
7675
self.assertNotEqual(
7776
str(purl),
78-
TestComponent._component
77+
TestComponent._component.get_purl()
7978
)
8079
self.assertEqual(purl.qualifiers, {'extension': 'tar.gz'})
80+
81+
def test_as_package_url_1(self):
82+
purl = PackageURL(
83+
type='pypi', name='setuptools', version='50.3.2'
84+
)
85+
self.assertEqual(TestComponent._component.to_package_url(), purl)
86+
87+
def test_as_package_url_2(self):
88+
purl = PackageURL(
89+
type='pypi', name='setuptools', version='50.3.1'
90+
)
91+
self.assertNotEqual(TestComponent._component.to_package_url(), purl)
92+
93+
def test_as_package_url_3(self):
94+
purl = PackageURL(
95+
type='pypi', name='setuptools', version='50.3.2', qualifiers='extension=tar.gz'
96+
)
97+
self.assertEqual(TestComponent._component_with_qualifiers.to_package_url(), purl)

0 commit comments

Comments
 (0)