@@ -292,17 +292,21 @@ def _make_bom(self, project: 'T_NameDict', locker: 'T_NameDict',
292292 use_extras_dep_names = frozenset (map (normalize_packagename ,
293293 chain .from_iterable (po_cfg ['extras' ][e ] for e in use_extras )))
294294 for group_name in use_groups :
295- for dep_name , dep_spec in po_cfg ['group' ][group_name ].get ('dependencies' , {}).items ():
295+ for dep_name , dep_specs in po_cfg ['group' ][group_name ].get ('dependencies' , {}).items ():
296296 dep_name = normalize_packagename (dep_name )
297- dep_spec = dep_spec if isinstance (dep_spec , dict ) else {'version' : dep_spec }
297+ if not isinstance (dep_specs , list ):
298+ if isinstance (dep_specs , dict ):
299+ dep_specs = [dep_specs ]
300+ else :
301+ dep_specs = [{'version' : dep_specs }]
298302 self ._logger .debug ('root-component depends on %s' , dep_name )
299303 if dep_name == 'python' :
300304 continue # skip python constraint
301305 lock_entries = lock_data .get (dep_name )
302306 if lock_entries is None :
303307 self ._logger .warning ('skip unlocked dependency: %s' , dep_name )
304308 continue
305- if dep_spec .get ('optional' ) and dep_name not in use_extras_dep_names :
309+ if all ( ds .get ('optional' ) for ds in dep_specs ) and dep_name not in use_extras_dep_names :
306310 self ._logger .debug ('skip optional unused dependency: %s' , dep_name )
307311 continue
308312 for lock_entry in lock_entries :
@@ -311,7 +315,10 @@ def _make_bom(self, project: 'T_NameDict', locker: 'T_NameDict',
311315 value = group_name
312316 ))
313317 root_d .dependencies .add (Dependency (lock_entry .component .bom_ref ))
314- self .__add_dep (bom , lock_entry , dep_spec .get ('extras' , ()), lock_data )
318+ self .__add_dep (
319+ bom , lock_entry ,
320+ chain .from_iterable (ds .get ('extras' , ()) for ds in dep_specs ),
321+ lock_data )
315322
316323 return bom
317324
0 commit comments