Skip to content

Commit 4a3955a

Browse files
authored
feat: model.VulnerabilityAnalysis properties for issued/updated datetime (#794)
Signed-off-by: Indivar Mishra <[email protected]>
1 parent 4478cac commit 4a3955a

6 files changed

+40
-20
lines changed

cyclonedx/model/vulnerability.py

+27-19
Original file line numberDiff line numberDiff line change
@@ -235,11 +235,15 @@ def __init__(
235235
justification: Optional[ImpactAnalysisJustification] = None,
236236
responses: Optional[Iterable[ImpactAnalysisResponse]] = None,
237237
detail: Optional[str] = None,
238+
first_issued: Optional[datetime] = None,
239+
last_updated: Optional[datetime] = None,
238240
) -> None:
239241
self.state = state
240242
self.justification = justification
241243
self.responses = responses or [] # type:ignore[assignment]
242244
self.detail = detail
245+
self.first_issued = first_issued
246+
self.last_updated = last_updated
243247

244248
@property
245249
@serializable.xml_sequence(1)
@@ -307,29 +311,33 @@ def detail(self) -> Optional[str]:
307311
def detail(self, detail: Optional[str]) -> None:
308312
self._detail = detail
309313

310-
# @property
311-
# @serializable.view(SchemaVersion1Dot5)
312-
# @serializable.xml_sequence(5)
313-
# def first_issued(self) -> ...:
314-
# ... # TODO since CDX 1.5
315-
#
316-
# @first_issued.setter
317-
# def first_issued(self, ...) -> None:
318-
# ... # TODO since CDX 1.5
314+
@property
315+
@serializable.view(SchemaVersion1Dot5)
316+
@serializable.view(SchemaVersion1Dot6)
317+
@serializable.type_mapping(serializable.helpers.XsdDateTime)
318+
@serializable.xml_sequence(5)
319+
def first_issued(self) -> Optional[datetime]:
320+
return self._first_issued
319321

320-
# @property
321-
# @serializable.view(SchemaVersion1Dot5)
322-
# @serializable.xml_sequence(6)
323-
# def last_updated(self) -> ...:
324-
# ... # TODO since CDX 1.5
325-
#
326-
# @last_updated.setter
327-
# def last_updated(self, ...) -> None:
328-
# ... # TODO since CDX 1.5
322+
@first_issued.setter
323+
def first_issued(self, first_issue: Optional[datetime]) -> None:
324+
self._first_issued = first_issue
325+
326+
@property
327+
@serializable.view(SchemaVersion1Dot5)
328+
@serializable.view(SchemaVersion1Dot6)
329+
@serializable.type_mapping(serializable.helpers.XsdDateTime)
330+
@serializable.xml_sequence(6)
331+
def last_updated(self) -> Optional[datetime]:
332+
return self._last_updated
333+
334+
@last_updated.setter
335+
def last_updated(self, last_updated: Optional[datetime]) -> None:
336+
self._last_updated = last_updated
329337

330338
def __comparable_tuple(self) -> _ComparableTuple:
331339
return _ComparableTuple((
332-
self.state, self.justification, tuple(self.responses), self.detail
340+
self.state, self.justification, tuple(self.responses), self.detail, self.first_issued, self.last_updated
333341
))
334342

335343
def __eq__(self, other: object) -> bool:

tests/_data/models.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,11 @@ def get_bom_with_component_setuptools_with_vulnerability() -> Bom:
503503
)),
504504
analysis=VulnerabilityAnalysis(
505505
state=ImpactAnalysisState.EXPLOITABLE, justification=ImpactAnalysisJustification.REQUIRES_ENVIRONMENT,
506-
responses=[ImpactAnalysisResponse.CAN_NOT_FIX], detail='Some extra detail'
506+
responses=[ImpactAnalysisResponse.CAN_NOT_FIX], detail='Some extra detail',
507+
first_issued=datetime(year=2018, month=9, day=1, hour=10, minute=50, second=42, microsecond=51979,
508+
tzinfo=timezone.utc),
509+
last_updated=datetime(year=2018, month=9, day=1, hour=10, minute=50, second=42, microsecond=51979,
510+
tzinfo=timezone.utc)
507511
),
508512
affects=[
509513
BomTarget(

tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.5.json.bin

+2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@
5959
],
6060
"analysis": {
6161
"detail": "Some extra detail",
62+
"firstIssued": "2018-09-01T10:50:42.051979+00:00",
6263
"justification": "requires_environment",
64+
"lastUpdated": "2018-09-01T10:50:42.051979+00:00",
6365
"response": [
6466
"can_not_fix"
6567
],

tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.5.xml.bin

+2
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@
120120
<response>can_not_fix</response>
121121
</responses>
122122
<detail>Some extra detail</detail>
123+
<firstIssued>2018-09-01T10:50:42.051979+00:00</firstIssued>
124+
<lastUpdated>2018-09-01T10:50:42.051979+00:00</lastUpdated>
123125
</analysis>
124126
<affects>
125127
<target>

tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.6.json.bin

+2
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,9 @@
5959
],
6060
"analysis": {
6161
"detail": "Some extra detail",
62+
"firstIssued": "2018-09-01T10:50:42.051979+00:00",
6263
"justification": "requires_environment",
64+
"lastUpdated": "2018-09-01T10:50:42.051979+00:00",
6365
"response": [
6466
"can_not_fix"
6567
],

tests/_data/snapshots/get_bom_with_component_setuptools_with_vulnerability-1.6.xml.bin

+2
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@
126126
<response>can_not_fix</response>
127127
</responses>
128128
<detail>Some extra detail</detail>
129+
<firstIssued>2018-09-01T10:50:42.051979+00:00</firstIssued>
130+
<lastUpdated>2018-09-01T10:50:42.051979+00:00</lastUpdated>
129131
</analysis>
130132
<affects>
131133
<target>

0 commit comments

Comments
 (0)