|
66 | 66 | from .component_evidence import ComponentEvidence, _ComponentEvidenceSerializationHelper |
67 | 67 | from .contact import OrganizationalContact, OrganizationalEntity |
68 | 68 | from .crypto import CryptoProperties |
| 69 | +from .data import ComponentData |
69 | 70 | from .dependency import Dependable |
70 | 71 | from .issue import IssueType |
71 | 72 | from .license import License, LicenseRepository, _LicenseRepositorySerializationHelper |
@@ -1013,6 +1014,7 @@ def __init__( |
1013 | 1014 | omnibor_ids: Optional[Iterable[OmniborId]] = None, |
1014 | 1015 | swhids: Optional[Iterable[Swhid]] = None, |
1015 | 1016 | crypto_properties: Optional[CryptoProperties] = None, |
| 1017 | + data: Optional[Iterable[ComponentData]] = None, |
1016 | 1018 | tags: Optional[Iterable[str]] = None, |
1017 | 1019 | # Deprecated in v1.6 |
1018 | 1020 | author: Optional[str] = None, |
@@ -1044,6 +1046,7 @@ def __init__( |
1044 | 1046 | self.release_notes = release_notes |
1045 | 1047 | self.model_card = model_card |
1046 | 1048 | self.crypto_properties = crypto_properties |
| 1049 | + self.data = data or [] |
1047 | 1050 | self.tags = tags or [] |
1048 | 1051 | # spec-deprecated properties below |
1049 | 1052 | self.author = author |
@@ -1631,16 +1634,24 @@ def model_card(self, model_card: Optional[ModelCard]) -> None: |
1631 | 1634 | # def model_card(self, ...) -> None: |
1632 | 1635 | # ... # TODO since CDX1.5 |
1633 | 1636 |
|
1634 | | - # @property |
1635 | | - # ... |
1636 | | - # @serializable.view(SchemaVersion1Dot5) |
1637 | | - # @serializable.xml_sequence(23) |
1638 | | - # def data(self) -> ...: |
1639 | | - # ... # TODO since CDX1.5 |
1640 | | - # |
1641 | | - # @data.setter |
1642 | | - # def data(self, ...) -> None: |
1643 | | - # ... # TODO since CDX1.5 |
| 1637 | + @property |
| 1638 | + @serializable.view(SchemaVersion1Dot5) |
| 1639 | + @serializable.view(SchemaVersion1Dot6) |
| 1640 | + @serializable.view(SchemaVersion1Dot7) |
| 1641 | + @serializable.xml_array(serializable.XmlArraySerializationType.FLAT, 'data') |
| 1642 | + @serializable.xml_sequence(27) |
| 1643 | + def data(self) -> 'SortedSet[ComponentData]': |
| 1644 | + """ |
| 1645 | + Specifies data objects for components of type `data`. |
| 1646 | +
|
| 1647 | + Returns: |
| 1648 | + `Iterable[ComponentData]` |
| 1649 | + """ |
| 1650 | + return self._data |
| 1651 | + |
| 1652 | + @data.setter |
| 1653 | + def data(self, data: Iterable[ComponentData]) -> None: |
| 1654 | + self._data = SortedSet(data) |
1644 | 1655 |
|
1645 | 1656 | @property |
1646 | 1657 | @serializable.view(SchemaVersion1Dot6) |
@@ -1712,7 +1723,7 @@ def __comparable_tuple(self) -> _ComparableTuple: |
1712 | 1723 | _ComparableTuple(self.external_references), _ComparableTuple(self.properties), |
1713 | 1724 | _ComparableTuple(self.components), self.evidence, self.release_notes, self.modified, |
1714 | 1725 | _ComparableTuple(self.authors), _ComparableTuple(self.omnibor_ids), self.manufacturer, |
1715 | | - self.crypto_properties, _ComparableTuple(self.tags), self.model_card, |
| 1726 | + self.crypto_properties, _ComparableTuple(self.tags), self.model_card, _ComparableTuple(self.data) |
1716 | 1727 | )) |
1717 | 1728 |
|
1718 | 1729 | def __eq__(self, other: object) -> bool: |
|
0 commit comments