3333if 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