33
33
from . import AttachedText , XsUri
34
34
35
35
36
+ @serializable .serializable_enum
37
+ class LicenseAcknowledgement (str , Enum ):
38
+ """
39
+ This is our internal representation of the `type_licenseAcknowledgementEnumerationType` ENUM type
40
+ within the CycloneDX standard.
41
+
42
+ .. note::
43
+ Introduced in CycloneDX v1.6
44
+
45
+ .. note::
46
+ See the CycloneDX Schema for hashType:
47
+ https://cyclonedx.org/docs/1.6/#type_licenseAcknowledgementEnumerationType
48
+ """
49
+
50
+ CONCLUDED = 'concluded'
51
+ DECLARED = 'declared'
52
+
53
+
54
+ # In an error, the name of the enum was `LicenseExpressionAcknowledgement`.
55
+ # Even though this was changed, there might be some downstream usage of this symbol, so we keep it around ...
56
+ LicenseExpressionAcknowledgement = LicenseAcknowledgement
57
+ """Deprecated alias for :class:`LicenseAcknowledgement`"""
58
+
59
+
36
60
@serializable .serializable_class (name = 'license' )
37
61
class DisjunctiveLicense :
38
62
"""
@@ -43,8 +67,12 @@ class DisjunctiveLicense:
43
67
See the CycloneDX Schema definition: https://cyclonedx.org/docs/1.4/json/#components_items_licenses
44
68
"""
45
69
46
- def __init__ (self , * , id : Optional [str ] = None , name : Optional [str ] = None ,
47
- text : Optional [AttachedText ] = None , url : Optional [XsUri ] = None ) -> None :
70
+ def __init__ (
71
+ self , * ,
72
+ id : Optional [str ] = None , name : Optional [str ] = None ,
73
+ text : Optional [AttachedText ] = None , url : Optional [XsUri ] = None ,
74
+ acknowledgement : Optional [LicenseAcknowledgement ] = None
75
+ ) -> None :
48
76
if not id and not name :
49
77
raise MutuallyExclusivePropertiesException ('Either `id` or `name` MUST be supplied' )
50
78
if id and name :
@@ -56,6 +84,7 @@ def __init__(self, *, id: Optional[str] = None, name: Optional[str] = None,
56
84
self ._name = name if not id else None
57
85
self ._text = text
58
86
self ._url = url
87
+ self ._acknowledgement = acknowledgement
59
88
60
89
@property
61
90
@serializable .xml_sequence (1 )
@@ -129,14 +158,62 @@ def url(self, url: Optional[XsUri]) -> None:
129
158
# @property
130
159
# ...
131
160
# @serializable.view(SchemaVersion1Dot5)
132
- # @serializable.xml_sequence(4)
161
+ # @serializable.view(SchemaVersion1Dot6)
162
+ # @serializable.xml_sequence(5)
133
163
# def licensing(self) -> ...:
134
164
# ... # TODO since CDX1.5
135
165
#
136
166
# @licensing.setter
137
167
# def licensing(self, ...) -> None:
138
168
# ... # TODO since CDX1.5
139
169
170
+ # @property
171
+ # ...
172
+ # @serializable.view(SchemaVersion1Dot5)
173
+ # @serializable.view(SchemaVersion1Dot6)
174
+ # @serializable.xml_sequence(6)
175
+ # def properties(self) -> ...:
176
+ # ... # TODO since CDX1.5
177
+ #
178
+ # @licensing.setter
179
+ # def properties(self, ...) -> None:
180
+ # ... # TODO since CDX1.5
181
+
182
+ # @property
183
+ # @serializable.json_name('bom-ref')
184
+ # @serializable.type_mapping(BomRefHelper)
185
+ # @serializable.view(SchemaVersion1Dot5)
186
+ # @serializable.view(SchemaVersion1Dot6)
187
+ # @serializable.xml_attribute()
188
+ # @serializable.xml_name('bom-ref')
189
+ # def bom_ref(self) -> BomRef:
190
+ # ... # TODO since CDX1.5
191
+
192
+ @property
193
+ @serializable .view (SchemaVersion1Dot6 )
194
+ @serializable .xml_attribute ()
195
+ def acknowledgement (self ) -> Optional [LicenseAcknowledgement ]:
196
+ """
197
+ Declared licenses and concluded licenses represent two different stages in the licensing process within
198
+ software development.
199
+
200
+ Declared licenses refer to the initial intention of the software authors regarding the
201
+ licensing terms under which their code is released. On the other hand, concluded licenses are the result of a
202
+ comprehensive analysis of the project's codebase to identify and confirm the actual licenses of the components
203
+ used, which may differ from the initially declared licenses. While declared licenses provide an upfront
204
+ indication of the licensing intentions, concluded licenses offer a more thorough understanding of the actual
205
+ licensing within a project, facilitating proper compliance and risk management. Observed licenses are defined
206
+ in evidence.licenses. Observed licenses form the evidence necessary to substantiate a concluded license.
207
+
208
+ Returns:
209
+ `LicenseAcknowledgement` or `None`
210
+ """
211
+ return self ._acknowledgement
212
+
213
+ @acknowledgement .setter
214
+ def acknowledgement (self , acknowledgement : Optional [LicenseAcknowledgement ]) -> None :
215
+ self ._acknowledgement = acknowledgement
216
+
140
217
def __eq__ (self , other : object ) -> bool :
141
218
if isinstance (other , DisjunctiveLicense ):
142
219
return hash (other ) == hash (self )
@@ -154,30 +231,12 @@ def __lt__(self, other: Any) -> bool:
154
231
return NotImplemented
155
232
156
233
def __hash__ (self ) -> int :
157
- return hash ((self ._id , self ._name , self ._text , self ._url ))
234
+ return hash ((self ._id , self ._name , self ._text , self ._url , self . _acknowledgement ))
158
235
159
236
def __repr__ (self ) -> str :
160
237
return f'<License id={ self ._id !r} , name={ self ._name !r} >'
161
238
162
239
163
- @serializable .serializable_enum
164
- class LicenseExpressionAcknowledgement (str , Enum ):
165
- """
166
- This is our internal representation of the `type_licenseAcknowledgementEnumerationType` ENUM type
167
- within the CycloneDX standard.
168
-
169
- .. note::
170
- Introduced in CycloneDX v1.6
171
-
172
- .. note::
173
- See the CycloneDX Schema for hashType:
174
- https://cyclonedx.org/docs/1.6/#type_licenseAcknowledgementEnumerationType
175
- """
176
-
177
- CONCLUDED = 'concluded'
178
- DECLARED = 'declared'
179
-
180
-
181
240
@serializable .serializable_class (name = 'expression' )
182
241
class LicenseExpression :
183
242
"""
@@ -189,15 +248,43 @@ class LicenseExpression:
189
248
https://cyclonedx.org/docs/1.4/json/#components_items_licenses_items_expression
190
249
"""
191
250
192
- def __init__ (self , value : str ,
193
- acknowledgement : Optional [LicenseExpressionAcknowledgement ] = None ) -> None :
251
+ def __init__ (
252
+ self , value : str ,
253
+ acknowledgement : Optional [LicenseAcknowledgement ] = None
254
+ ) -> None :
255
+ self ._value = value
256
+ self ._acknowledgement = acknowledgement
257
+
258
+ @property
259
+ @serializable .xml_name ('.' )
260
+ @serializable .json_name ('expression' )
261
+ def value (self ) -> str :
262
+ """
263
+ Value of this LicenseExpression.
264
+
265
+ Returns:
266
+ `str`
267
+ """
268
+ return self ._value
269
+
270
+ @value .setter
271
+ def value (self , value : str ) -> None :
194
272
self ._value = value
195
- self .acknowledgement = acknowledgement
273
+
274
+ # @property
275
+ # @serializable.json_name('bom-ref')
276
+ # @serializable.type_mapping(BomRefHelper)
277
+ # @serializable.view(SchemaVersion1Dot5)
278
+ # @serializable.view(SchemaVersion1Dot6)
279
+ # @serializable.xml_attribute()
280
+ # @serializable.xml_name('bom-ref')
281
+ # def bom_ref(self) -> BomRef:
282
+ # ... # TODO since CDX1.5
196
283
197
284
@property
198
285
@serializable .view (SchemaVersion1Dot6 )
199
286
@serializable .xml_attribute ()
200
- def acknowledgement (self ) -> Optional [LicenseExpressionAcknowledgement ]:
287
+ def acknowledgement (self ) -> Optional [LicenseAcknowledgement ]:
201
288
"""
202
289
Declared licenses and concluded licenses represent two different stages in the licensing process within
203
290
software development.
@@ -211,36 +298,20 @@ def acknowledgement(self) -> Optional[LicenseExpressionAcknowledgement]:
211
298
in evidence.licenses. Observed licenses form the evidence necessary to substantiate a concluded license.
212
299
213
300
Returns:
214
- `LicenseExpressionAcknowledgement ` or `None`
301
+ `LicenseAcknowledgement ` or `None`
215
302
"""
216
303
return self ._acknowledgement
217
304
218
305
@acknowledgement .setter
219
- def acknowledgement (self , acknowledgement : Optional [LicenseExpressionAcknowledgement ]) -> None :
306
+ def acknowledgement (self , acknowledgement : Optional [LicenseAcknowledgement ]) -> None :
220
307
self ._acknowledgement = acknowledgement
221
308
222
- @property
223
- @serializable .xml_name ('.' )
224
- @serializable .json_name ('expression' )
225
- def value (self ) -> str :
226
- """
227
- Value of this LicenseExpression.
228
-
229
- Returns:
230
- `str`
231
- """
232
- return self ._value
233
-
234
- @value .setter
235
- def value (self , value : str ) -> None :
236
- self ._value = value
237
-
238
309
def __hash__ (self ) -> int :
239
- return hash (self ._value )
310
+ return hash (( self ._value , self . _acknowledgement ) )
240
311
241
312
def __eq__ (self , other : object ) -> bool :
242
313
if isinstance (other , LicenseExpression ):
243
- return self . _value == other . _value
314
+ return hash ( other ) == hash ( self )
244
315
return False
245
316
246
317
def __lt__ (self , other : Any ) -> bool :
0 commit comments