@@ -53,12 +53,20 @@ class Dependency:
53
53
Models a Dependency within a BOM.
54
54
55
55
.. note::
56
- See https://cyclonedx.org/docs/1.4/xml/#type_dependencyType
56
+ See:
57
+ 1. https://cyclonedx.org/docs/1.6/xml/#type_dependencyType
58
+ 2. https://cyclonedx.org/docs/1.6/json/#dependencies
57
59
"""
58
60
59
- def __init__ (self , ref : BomRef , dependencies : Optional [Iterable ['Dependency' ]] = None ) -> None :
61
+ def __init__ (
62
+ self ,
63
+ ref : BomRef ,
64
+ dependencies : Optional [Iterable ['Dependency' ]] = None ,
65
+ provides : Optional [Iterable ['Dependency' ]] = None
66
+ ) -> None :
60
67
self .ref = ref
61
68
self .dependencies = dependencies or [] # type:ignore[assignment]
69
+ self .provides = provides or [] # type:ignore[assignment]
62
70
63
71
@property
64
72
@serializable .type_mapping (BomRefHelper )
@@ -81,9 +89,23 @@ def dependencies(self) -> 'SortedSet[Dependency]':
81
89
def dependencies (self , dependencies : Iterable ['Dependency' ]) -> None :
82
90
self ._dependencies = SortedSet (dependencies )
83
91
92
+ @property
93
+ @serializable .json_name ('provides' )
94
+ @serializable .type_mapping (_DependencyRepositorySerializationHelper )
95
+ @serializable .xml_array (serializable .XmlArraySerializationType .FLAT , 'provides' )
96
+ def provides (self ) -> 'SortedSet[Dependency]' :
97
+ return self ._provides
98
+
99
+ @provides .setter
100
+ def provides (self , provides : Iterable ['Dependency' ]) -> None :
101
+ self ._provides = SortedSet (provides )
102
+
84
103
def dependencies_as_bom_refs (self ) -> Set [BomRef ]:
85
104
return set (map (lambda d : d .ref , self .dependencies ))
86
105
106
+ def provides_as_bom_refs (self ) -> Set [BomRef ]:
107
+ return set (map (lambda d : d .ref , self .provides ))
108
+
87
109
def __eq__ (self , other : object ) -> bool :
88
110
if isinstance (other , Dependency ):
89
111
return hash (other ) == hash (self )
@@ -92,17 +114,25 @@ def __eq__(self, other: object) -> bool:
92
114
def __lt__ (self , other : Any ) -> bool :
93
115
if isinstance (other , Dependency ):
94
116
return _ComparableTuple ((
95
- self .ref , _ComparableTuple (self .dependencies )
117
+ self .ref ,
118
+ _ComparableTuple (self .dependencies ),
119
+ _ComparableTuple (self .provides )
96
120
)) < _ComparableTuple ((
97
- other .ref , _ComparableTuple (other .dependencies )
121
+ other .ref ,
122
+ _ComparableTuple (other .dependencies ),
123
+ _ComparableTuple (other .provides )
98
124
))
99
125
return NotImplemented
100
126
101
127
def __hash__ (self ) -> int :
102
- return hash ((self .ref , tuple (self .dependencies )))
128
+ return hash ((self .ref , tuple (self .dependencies ), tuple ( self . provides ) ))
103
129
104
130
def __repr__ (self ) -> str :
105
- return f'<Dependency ref={ self .ref !r} , targets={ len (self .dependencies )} >'
131
+ return (
132
+ f'<Dependency ref={ self .ref !r} '
133
+ f', targets={ len (self .dependencies )} '
134
+ f', provides={ len (self .provides )} >'
135
+ )
106
136
107
137
108
138
class Dependable (ABC ):
0 commit comments