33
33
if TYPE_CHECKING : # pragma: no cover
34
34
from ..model .bom import Bom
35
35
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
37
38
from ..model .license import License
38
39
from .json import Json as JsonOutputter
39
40
from .xml import Xml as XmlOutputter
@@ -175,7 +176,7 @@ def from_bom(cls, bom: 'Bom', prefix: str = 'BomRef') -> 'BomRefDiscriminator':
175
176
components = tuple (bom ._get_all_components ())
176
177
services = tuple (bom .services )
177
178
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]
179
180
(bom .metadata .manufacture , bom .metadata .manufacturer , bom .metadata .supplier ),
180
181
chain .from_iterable ((c .manufacturer , c .supplier ,) for c in components ),
181
182
(s .provider for s in services ),
@@ -187,20 +188,29 @@ def from_bom(cls, bom: 'Bom', prefix: str = 'BomRef') -> 'BomRefDiscriminator':
187
188
chain .from_iterable (v .credits .individuals for v in vulnerabilities if v .credits ),
188
189
chain .from_iterable (o .contacts for o in orgs ),
189
190
)
191
+ addresses : Iterable ['PostalAddress' ] = (o .address for o in orgs if o .address is not None )
190
192
licenses : Iterable ['License' ] = chain (
191
193
bom .metadata .licenses ,
192
194
chain .from_iterable (c .licenses for c in components ),
193
195
chain .from_iterable (c .evidence .licenses for c in components if c .evidence is not None ),
194
196
chain .from_iterable (s .licenses for s in services ),
195
197
)
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 )
196
203
return cls (
197
204
(i .bom_ref for i in chain (
198
205
components ,
199
206
services ,
200
207
vulnerabilities ,
201
208
orgs ,
202
209
contacts ,
203
- ( o . address for o in orgs if o . address is not None ) ,
210
+ addresses ,
204
211
licenses ,
212
+ standards ,
213
+ requirements ,
214
+ levels ,
205
215
)),
206
216
prefix )
0 commit comments