Skip to content

Commit

Permalink
feat: added helper method to return a PackageURL object representing …
Browse files Browse the repository at this point in the history
…a Component

Signed-off-by: Paul Horton <[email protected]>
  • Loading branch information
madpah committed Sep 14, 2021
1 parent f3ac42f commit 367bef1
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 9 deletions.
14 changes: 14 additions & 0 deletions cyclonedx/model/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
# Copyright (c) OWASP Foundation. All Rights Reserved.

from enum import Enum
from packageurl import PackageURL

PURL_TYPE_PREFIX = 'pypi'

Expand Down Expand Up @@ -90,6 +91,19 @@ def set_description(self, description: str):
def set_license(self, license_str: str):
self._license = license_str

def to_package_url(self) -> PackageURL:
"""
Return a PackageURL representation of this Component.
:return: PackageURL
"""""
return PackageURL(
type=PURL_TYPE_PREFIX,
name=self._name,
version=self._version,
qualifiers=self._qualifiers
)

def __eq__(self, other):
return other.get_purl() == self.get_purl()

Expand Down
35 changes: 26 additions & 9 deletions tests/test_component.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,19 @@


class TestComponent(TestCase):
_component: Component

@classmethod
def setUpClass(cls) -> None:
cls._component = Component(name='setuptools', version='50.3.2').get_purl()
cls._component_with_qualifiers = Component(name='setuptools', version='50.3.2',
qualifiers='extension=tar.gz').get_purl()
cls._component: Component = Component(name='setuptools', version='50.3.2')
cls._component_with_qualifiers: Component = Component(name='setuptools', version='50.3.2',
qualifiers='extension=tar.gz')

def test_purl_correct(self):
self.assertEqual(
str(PackageURL(
type='pypi', name='setuptools', version='50.3.2'
)),
TestComponent._component
TestComponent._component.get_purl()
)

def test_purl_incorrect_version(self):
Expand All @@ -47,7 +46,7 @@ def test_purl_incorrect_version(self):
)
self.assertNotEqual(
str(purl),
TestComponent._component
TestComponent._component.get_purl()
)
self.assertEqual(purl.type, 'pypi')
self.assertEqual(purl.name, 'setuptools')
Expand All @@ -59,7 +58,7 @@ def test_purl_incorrect_name(self):
)
self.assertNotEqual(
str(purl),
TestComponent._component
TestComponent._component.get_purl()
)
self.assertEqual(purl.type, 'pypi')
self.assertEqual(purl.name, 'setuptoolz')
Expand All @@ -71,10 +70,28 @@ def test_purl_with_qualifiers(self):
)
self.assertEqual(
str(purl),
TestComponent._component_with_qualifiers
TestComponent._component_with_qualifiers.get_purl()
)
self.assertNotEqual(
str(purl),
TestComponent._component
TestComponent._component.get_purl()
)
self.assertEqual(purl.qualifiers, {'extension': 'tar.gz'})

def test_as_package_url_1(self):
purl = PackageURL(
type='pypi', name='setuptools', version='50.3.2'
)
self.assertEqual(TestComponent._component.to_package_url(), purl)

def test_as_package_url_2(self):
purl = PackageURL(
type='pypi', name='setuptools', version='50.3.1'
)
self.assertNotEqual(TestComponent._component.to_package_url(), purl)

def test_as_package_url_3(self):
purl = PackageURL(
type='pypi', name='setuptools', version='50.3.2', qualifiers='extension=tar.gz'
)
self.assertEqual(TestComponent._component_with_qualifiers.to_package_url(), purl)

0 comments on commit 367bef1

Please sign in to comment.