Skip to content

Commit da5e283

Browse files
committed
wip
Signed-off-by: Jan Kowalleck <[email protected]>
1 parent d54c910 commit da5e283

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

cyclonedx/output/__init__.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@
3333
if TYPE_CHECKING: # pragma: no cover
3434
from ..model.bom import Bom
3535
from ..model.bom_ref import BomRef
36-
from ..model.contact import OrganizationalContact, OrganizationalEntity
36+
from ..model.contact import OrganizationalContact, OrganizationalEntity, PostalAddress
37+
from ..model.definition import Level, Requirement, Standard
3738
from ..model.license import License
3839
from .json import Json as JsonOutputter
3940
from .xml import Xml as XmlOutputter
@@ -175,7 +176,7 @@ def from_bom(cls, bom: 'Bom', prefix: str = 'BomRef') -> 'BomRefDiscriminator':
175176
components = tuple(bom._get_all_components())
176177
services = tuple(bom.services)
177178
vulnerabilities = tuple(bom.vulnerabilities)
178-
orgs: list['OrganizationalEntity'] = list(filter(lambda o: o is not None, chain( # type:ignore[arg-type]
179+
orgs: tuple['OrganizationalEntity', ...] = tuple(filter(lambda o: o is not None, chain( # type:ignore[arg-type]
179180
(bom.metadata.manufacture, bom.metadata.manufacturer, bom.metadata.supplier),
180181
chain.from_iterable((c.manufacturer, c.supplier,) for c in components),
181182
(s.provider for s in services),
@@ -187,20 +188,29 @@ def from_bom(cls, bom: 'Bom', prefix: str = 'BomRef') -> 'BomRefDiscriminator':
187188
chain.from_iterable(v.credits.individuals for v in vulnerabilities if v.credits),
188189
chain.from_iterable(o.contacts for o in orgs),
189190
)
191+
addresses: Iterable['PostalAddress'] = (o.address for o in orgs if o.address is not None)
190192
licenses: Iterable['License'] = chain(
191193
bom.metadata.licenses,
192194
chain.from_iterable(c.licenses for c in components),
193195
chain.from_iterable(c.evidence.licenses for c in components if c.evidence is not None),
194196
chain.from_iterable(s.licenses for s in services),
195197
)
198+
standards: tuple['Standard', ...] = () \
199+
if bom.definitions is None \
200+
else tuple(bom.definitions.standards)
201+
requirements: Iterable['Requirement'] = chain.from_iterable(s.requirements for s in standards)
202+
levels: Iterable['Level'] = chain.from_iterable(s.levels for s in standards)
196203
return cls(
197204
(i.bom_ref for i in chain(
198205
components,
199206
services,
200207
vulnerabilities,
201208
orgs,
202209
contacts,
203-
(o.address for o in orgs if o.address is not None),
210+
addresses,
204211
licenses,
212+
standards,
213+
requirements,
214+
levels,
205215
)),
206216
prefix)

0 commit comments

Comments
 (0)