Skip to content

Commit e03a25c

Browse files
committed
fix: added ability to add tools in addition to this library when generating CycloneDX + plus fixes relating to multiple BOM instances
Signed-off-by: Paul Horton <[email protected]>
1 parent 5fee85f commit e03a25c

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

cyclonedx/model/bom.py

+16-4
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ def __repr__(self):
8989

9090

9191
if sys.version_info >= (3, 8, 0):
92-
from importlib.metadata import version
92+
from importlib.metadata import version as meta_version
9393
else:
94-
from importlib_metadata import version
94+
from importlib_metadata import version as meta_version
9595

9696
try:
97-
ThisTool = Tool(vendor='CycloneDX', name='cyclonedx-python-lib', version=version('cyclonedx-python-lib'))
97+
ThisTool = Tool(vendor='CycloneDX', name='cyclonedx-python-lib', version=meta_version('cyclonedx-python-lib'))
9898
except Exception:
9999
ThisTool = Tool(vendor='CycloneDX', name='cyclonedx-python-lib', version='UNKNOWN')
100100

@@ -112,10 +112,22 @@ class BomMetaData:
112112

113113
def __init__(self, tools: List[Tool] = []):
114114
self._timestamp = datetime.datetime.now(tz=datetime.timezone.utc)
115+
self._tools.clear()
115116
if len(tools) == 0:
116117
tools.append(ThisTool)
117118
self._tools = tools
118119

120+
def add_tool(self, tool: Tool):
121+
"""
122+
Add a Tool definition to this Bom Metadata. The `cyclonedx-python-lib` is automatically added - you do not need
123+
to add this yourself.
124+
125+
Args:
126+
tool:
127+
Instance of `Tool` that represents the tool you are using.
128+
"""
129+
self._tools.append(tool)
130+
119131
def get_timestamp(self) -> datetime.datetime:
120132
"""
121133
The date and time (in UTC) when this BomMetaData was created.
@@ -173,7 +185,7 @@ def __init__(self):
173185
New, empty `cyclonedx.model.bom.Bom` instance.
174186
"""
175187
self._uuid = uuid4()
176-
self._metadata = BomMetaData()
188+
self._metadata = BomMetaData(tools=[])
177189
self._components.clear()
178190

179191
def add_component(self, component: Component):

tests/test_bom.py

+10-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import os
2121
from unittest import TestCase
2222

23-
from cyclonedx.model.bom import Bom, ThisTool
23+
from cyclonedx.model.bom import Bom, ThisTool, Tool
2424
from cyclonedx.model.component import Component
2525
from cyclonedx.parser.requirements import RequirementsFileParser
2626

@@ -42,3 +42,12 @@ def test_bom_metadata_tool_this_tool(self):
4242
self.assertEqual(ThisTool.get_vendor(), 'CycloneDX')
4343
self.assertEqual(ThisTool.get_name(), 'cyclonedx-python-lib')
4444
self.assertNotEqual(ThisTool.get_version(), 'UNKNOWN')
45+
46+
def test_bom_metadata_tool_multiple_tools(self):
47+
bom = Bom()
48+
self.assertEqual(len(bom.get_metadata().get_tools()), 1)
49+
50+
bom.get_metadata().add_tool(Tool(
51+
vendor='TestVendor', name='TestTool', version='0.0.0'
52+
))
53+
self.assertEqual(len(bom.get_metadata().get_tools()), 2)

0 commit comments

Comments
 (0)