hoppr-cyclonedx-models 0.5.5__py3-none-any.whl → 0.6.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of hoppr-cyclonedx-models might be problematic. Click here for more details.

@@ -1,6 +1,6 @@
1
1
  """
2
2
  --------------------------------------------------------------------------------
3
- SPDX-FileCopyrightText: Copyright © 2023 Lockheed Martin <open.source@lmco.com>
3
+ SPDX-FileCopyrightText: Copyright © 2025 Lockheed Martin <open.source@lmco.com>
4
4
  SPDX-FileName: hoppr_cyclonedx_models/cyclonedx_1_5.py
5
5
  SPDX-FileType: SOURCE
6
6
  SPDX-License-Identifier: MIT
@@ -25,8 +25,8 @@ THE SOFTWARE.
25
25
  --------------------------------------------------------------------------------
26
26
  This file was generated by datamodel-codegen:
27
27
  filename: bom-1.5.schema.json
28
- timestamp: 2023-09-12T17:26:28+00:00
29
- version: 0.21.5
28
+ timestamp: 2025-09-17T19:02:47+00:00
29
+ version: 0.25.7
30
30
  """
31
31
 
32
32
  from __future__ import annotations
@@ -103,7 +103,11 @@ class Phase(Enum):
103
103
  return next((member for member in cls if member.name in {str(value), str(value).upper()}), None)
104
104
 
105
105
 
106
- class Lifecycle(CycloneDXBaseModel):
106
+ class Lifecycles(CycloneDXBaseModel):
107
+ """
108
+ The product lifecycle(s) that this BOM represents.
109
+ """
110
+
107
111
  class Config:
108
112
  extra = Extra.forbid
109
113
 
@@ -137,7 +141,11 @@ class Lifecycle(CycloneDXBaseModel):
137
141
  ]
138
142
 
139
143
 
140
- class Lifecycle1(CycloneDXBaseModel):
144
+ class Lifecycles1(CycloneDXBaseModel):
145
+ """
146
+ The product lifecycle(s) that this BOM represents.
147
+ """
148
+
141
149
  class Config:
142
150
  extra = Extra.forbid
143
151
 
@@ -316,76 +324,42 @@ class LicenseType(Enum):
316
324
  return next((member for member in cls if member.name in {str(value), str(value).upper()}), None)
317
325
 
318
326
 
319
- class Licensing(CycloneDXBaseModel):
320
- """
321
- Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and other important metadata
322
- """
323
-
327
+ class LicenseChoice21(CycloneDXBaseModel):
324
328
  class Config:
325
329
  extra = Extra.forbid
326
330
 
327
- altIds: Annotated[
328
- Optional[List[str]],
331
+ expression: Annotated[
332
+ str,
329
333
  Field(
330
- description="License identifiers that may be used to manage licenses and their lifecycle",
331
- title="Alternate License Identifiers",
334
+ examples=["Apache-2.0 AND (MIT OR GPL-2.0-only)", "GPL-3.0-only WITH Classpath-exception-2.0"],
335
+ title="SPDX License Expression",
332
336
  ),
333
- ] = None
334
- purchaseOrder: Annotated[
337
+ ]
338
+ bom_ref: Annotated[
335
339
  Optional[str],
336
340
  Field(
341
+ alias="bom-ref",
337
342
  description=(
338
- "The purchase order identifier the purchaser sent to a supplier or vendor to authorize a purchase"
339
- ),
340
- title="Purchase Order",
341
- ),
342
- ] = None
343
- licenseTypes: Annotated[
344
- Optional[List[LicenseType]],
345
- Field(
346
- description=(
347
- "The type of license(s) that was granted to the licensee\n\n* __academic__ = A license that grants use"
348
- " of software solely for the purpose of education or research.\n* __appliance__ = A license covering"
349
- " use of software embedded in a specific piece of hardware.\n* __client-access__ = A Client Access"
350
- " License (CAL) allows client computers to access services provided by server software.\n*"
351
- " __concurrent-user__ = A Concurrent User license (aka floating license) limits the number of licenses"
352
- " for a software application and licenses are shared among a larger number of users.\n* __core-points__"
353
- " = A license where the core of a computer's processor is assigned a specific number of points.\n*"
354
- " __custom-metric__ = A license for which consumption is measured by non-standard metrics.\n*"
355
- " __device__ = A license that covers a defined number of installations on computers and other types of"
356
- " devices.\n* __evaluation__ = A license that grants permission to install and use software for trial"
357
- " purposes.\n* __named-user__ = A license that grants access to the software to one or more pre-defined"
358
- " users.\n* __node-locked__ = A license that grants access to the software on one or more pre-defined"
359
- " computers or devices.\n* __oem__ = An Original Equipment Manufacturer license that is delivered with"
360
- " hardware, cannot be transferred to other hardware, and is valid for the life of the hardware.\n*"
361
- " __perpetual__ = A license where the software is sold on a one-time basis and the licensee can use a"
362
- " copy of the software indefinitely.\n* __processor-points__ = A license where each installation"
363
- " consumes points per processor.\n* __subscription__ = A license where the licensee pays a fee to use"
364
- " the software or service.\n* __user__ = A license that grants access to the software or service by a"
365
- " specified number of users.\n* __other__ = Another license type.\n"
366
- ),
367
- title="License Type",
368
- ),
369
- ] = None
370
- lastRenewal: Annotated[
371
- Optional[datetime],
372
- Field(
373
- description=(
374
- "The timestamp indicating when the license was last renewed. For new purchases, this is often the"
375
- " purchase or acquisition date. For non-perpetual licenses or subscriptions, this is the timestamp of"
376
- " when the license was last renewed."
343
+ "An optional identifier which can be used to reference the license elsewhere in the BOM. Every bom-ref"
344
+ " MUST be unique within the BOM."
377
345
  ),
378
- title="Last Renewal",
379
- ),
380
- ] = None
381
- expiration: Annotated[
382
- Optional[datetime],
383
- Field(
384
- description="The timestamp indicating when the current license expires (if applicable).", title="Expiration"
346
+ min_length=1,
347
+ title="BOM Reference",
385
348
  ),
386
349
  ] = None
387
350
 
388
351
 
352
+ LicenseChoice2 = Annotated[
353
+ List[LicenseChoice21],
354
+ Field(
355
+ description="A tuple of exactly one SPDX License Expression.",
356
+ max_items=1,
357
+ min_items=1,
358
+ title="SPDX License Expression",
359
+ ),
360
+ ]
361
+
362
+
389
363
  class Type1(Enum):
390
364
  """
391
365
  Specifies the purpose for the patch including the resolution of defects, security issues, or new behavior or functionality.
@@ -615,11 +589,12 @@ class Dependency(CycloneDXBaseModel):
615
589
  ),
616
590
  ]
617
591
  dependsOn: Annotated[
618
- Optional[List[RefLinkType]],
592
+ Optional[List[str]],
619
593
  Field(
620
594
  description=(
621
595
  "The bom-ref identifiers of the components or services that are dependencies of this dependency object."
622
596
  ),
597
+ min_length=1,
623
598
  title="Depends On",
624
599
  ),
625
600
  ] = None
@@ -821,39 +796,6 @@ class Callstack(CycloneDXBaseModel):
821
796
  frames: Annotated[Optional[List[Frame]], Field(title="Methods")] = None
822
797
 
823
798
 
824
- class ComponentEvidence(CycloneDXBaseModel):
825
- """
826
- Provides the ability to document evidence collected through various forms of extraction or analysis.
827
- """
828
-
829
- class Config:
830
- extra = Extra.forbid
831
-
832
- identity: Annotated[
833
- Optional[Identity], Field(description="Evidence that substantiates the identity of a component.")
834
- ] = None
835
- occurrences: Annotated[
836
- Optional[List[Occurrence]],
837
- Field(
838
- description="Evidence of individual instances of a component spread across multiple locations.",
839
- title="Occurrences",
840
- ),
841
- ] = None
842
- callstack: Annotated[
843
- Optional[Callstack], Field(description="Evidence of the components use through the callstack.")
844
- ] = None
845
- licenses: Annotated[
846
- Optional[List],
847
- Field(
848
- description=(
849
- "EITHER (list of SPDX licenses and/or named licenses) OR (tuple of one SPDX License Expression)"
850
- ),
851
- title="Component License(s)",
852
- ),
853
- ] = None
854
- copyright: Annotated[Optional[List[Copyright]], Field(title="Copyright")] = None
855
-
856
-
857
799
  class AggregateType(Enum):
858
800
  COMPLETE = complete = "complete"
859
801
  INCOMPLETE = incomplete = "incomplete"
@@ -1012,19 +954,6 @@ class Advisory(CycloneDXBaseModel):
1012
954
  url: Annotated[str, Field(description="Location where the advisory can be obtained.", title="URL")]
1013
955
 
1014
956
 
1015
- Cwe = Annotated[
1016
- int,
1017
- Field(
1018
- description=(
1019
- "Integer representation of a Common Weaknesses Enumerations (CWE). For example 399 (of"
1020
- " https://cwe.mitre.org/data/definitions/399.html)"
1021
- ),
1022
- ge=1,
1023
- title="CWE",
1024
- ),
1025
- ]
1026
-
1027
-
1028
957
  class Severity(Enum):
1029
958
  """
1030
959
  Textual representation of the severity of the vulnerability adopted by the analysis method. If the analysis method uses values other than what is provided, the user is expected to translate appropriately.
@@ -1256,19 +1185,6 @@ class Analysis(CycloneDXBaseModel):
1256
1185
  ] = None
1257
1186
 
1258
1187
 
1259
- class Affect(CycloneDXBaseModel):
1260
- class Config:
1261
- extra = Extra.forbid
1262
-
1263
- ref: Annotated[
1264
- Union[RefLinkType, BomLinkElementType],
1265
- Field(description="References a component or service by the objects bom-ref", title="Reference"),
1266
- ]
1267
- versions: Annotated[
1268
- Optional[List], Field(description="Zero or more individual versions or range of versions.", title="Versions")
1269
- ] = None
1270
-
1271
-
1272
1188
  class AffectedStatus(Enum):
1273
1189
  """
1274
1190
  The vulnerability status of a given version or range of versions of a product. The statuses 'affected' and 'unaffected' indicate that the version is affected or unaffected by the vulnerability. The status 'unknown' indicates that it is unknown or unspecified whether the given version is affected. There can be many reasons for an 'unknown' status, including that an investigation has not been undertaken or that a vendor has not disclosed the status.
@@ -1286,24 +1202,6 @@ class AffectedStatus(Enum):
1286
1202
  return next((member for member in cls if member.name in {str(value), str(value).upper()}), None)
1287
1203
 
1288
1204
 
1289
- Version = Annotated[
1290
- str, Field(description="A single version of a component or service.", max_length=1024, min_length=1)
1291
- ]
1292
-
1293
-
1294
- Range = Annotated[
1295
- str,
1296
- Field(
1297
- description=(
1298
- "A version range specified in Package URL Version Range syntax (vers) which is defined at"
1299
- " https://github.com/package-url/purl-spec/VERSION-RANGE-SPEC.rst"
1300
- ),
1301
- max_length=1024,
1302
- min_length=1,
1303
- ),
1304
- ]
1305
-
1306
-
1307
1205
  class Type4(Enum):
1308
1206
  """
1309
1207
  Learning types describing the learning problem or hybrid learning problem.
@@ -1340,7 +1238,7 @@ class Approach(CycloneDXBaseModel):
1340
1238
  ] = None
1341
1239
 
1342
1240
 
1343
- class Dataset(CycloneDXBaseModel):
1241
+ class Datasets(CycloneDXBaseModel):
1344
1242
  class Config:
1345
1243
  extra = Extra.forbid
1346
1244
 
@@ -1677,7 +1575,7 @@ class Parameter(CycloneDXBaseModel):
1677
1575
  dataType: Annotated[Optional[str], Field(description="The data type of the parameter.", title="Data type")] = None
1678
1576
 
1679
1577
 
1680
- class AlgorithmEnum(Enum):
1578
+ class Algorithm(Enum):
1681
1579
  """
1682
1580
  Signature algorithm. The currently recognized JWA [RFC7518] and RFC8037 [RFC8037] asymmetric key algorithms. Note: Unlike RFC8037 [RFC8037] JSF requires explicit Ed* algorithm names instead of "EdDSA".
1683
1581
  """
@@ -1807,116 +1705,523 @@ class Hash(CycloneDXBaseModel):
1807
1705
  ]
1808
1706
 
1809
1707
 
1810
- class License(CycloneDXBaseModel):
1708
+ class Licensor(CycloneDXBaseModel):
1709
+ """
1710
+ The individual or organization that grants a license to another individual or organization
1711
+ """
1712
+
1811
1713
  class Config:
1812
1714
  extra = Extra.forbid
1813
1715
 
1814
- bom_ref: Annotated[
1815
- Optional[str],
1716
+ organization: Annotated[
1717
+ OrganizationalEntity,
1718
+ Field(description="The organization that granted the license", title="Licensor (Organization)"),
1719
+ ]
1720
+ individual: Annotated[
1721
+ Optional[OrganizationalContact],
1816
1722
  Field(
1817
- alias="bom-ref",
1818
- description=(
1819
- "An optional identifier which can be used to reference the license elsewhere in the BOM. Every bom-ref"
1820
- " MUST be unique within the BOM."
1821
- ),
1822
- min_length=1,
1823
- title="BOM Reference",
1723
+ description="The individual, not associated with an organization, that granted the license",
1724
+ title="Licensor (Individual)",
1824
1725
  ),
1825
1726
  ] = None
1826
- id: Annotated[
1827
- Optional[spdx.LicenseID],
1828
- Field(description="A valid SPDX license ID", examples=["Apache-2.0"], title="License ID (SPDX)"),
1727
+
1728
+
1729
+ class Licensor1(CycloneDXBaseModel):
1730
+ """
1731
+ The individual or organization that grants a license to another individual or organization
1732
+ """
1733
+
1734
+ class Config:
1735
+ extra = Extra.forbid
1736
+
1737
+ organization: Annotated[
1738
+ Optional[OrganizationalEntity],
1739
+ Field(description="The organization that granted the license", title="Licensor (Organization)"),
1829
1740
  ] = None
1830
- name: Annotated[
1831
- Optional[str],
1741
+ individual: Annotated[
1742
+ OrganizationalContact,
1832
1743
  Field(
1833
- description="If SPDX does not define the license used, this field may be used to provide the license name",
1834
- examples=["Acme Software License"],
1835
- title="License Name",
1744
+ description="The individual, not associated with an organization, that granted the license",
1745
+ title="Licensor (Individual)",
1836
1746
  ),
1837
- ] = None
1838
- text: Annotated[
1839
- Optional[Attachment],
1840
- Field(description="An optional way to include the textual content of a license.", title="License text"),
1841
- ] = None
1842
- url: Annotated[
1843
- Optional[str],
1747
+ ]
1748
+
1749
+
1750
+ class Licensee(CycloneDXBaseModel):
1751
+ """
1752
+ The individual or organization for which a license was granted to
1753
+ """
1754
+
1755
+ class Config:
1756
+ extra = Extra.forbid
1757
+
1758
+ organization: Annotated[
1759
+ OrganizationalEntity,
1760
+ Field(description="The organization that was granted the license", title="Licensee (Organization)"),
1761
+ ]
1762
+ individual: Annotated[
1763
+ Optional[OrganizationalContact],
1844
1764
  Field(
1845
- description=(
1846
- "The URL to the license file. If specified, a 'license' externalReference should also be specified for"
1847
- " completeness"
1848
- ),
1849
- examples=["https://www.apache.org/licenses/LICENSE-2.0.txt"],
1850
- title="License URL",
1765
+ description="The individual, not associated with an organization, that was granted the license",
1766
+ title="Licensee (Individual)",
1851
1767
  ),
1852
1768
  ] = None
1853
- licensing: Annotated[
1854
- Optional[Licensing],
1855
- Field(
1856
- description=(
1857
- "Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and"
1858
- " other important metadata"
1859
- ),
1860
- title="Licensing information",
1861
- ),
1769
+
1770
+
1771
+ class Licensee1(CycloneDXBaseModel):
1772
+ """
1773
+ The individual or organization for which a license was granted to
1774
+ """
1775
+
1776
+ class Config:
1777
+ extra = Extra.forbid
1778
+
1779
+ organization: Annotated[
1780
+ Optional[OrganizationalEntity],
1781
+ Field(description="The organization that was granted the license", title="Licensee (Organization)"),
1862
1782
  ] = None
1863
- properties: Annotated[
1864
- Optional[List[Property]],
1783
+ individual: Annotated[
1784
+ OrganizationalContact,
1865
1785
  Field(
1866
- description=(
1867
- "Provides the ability to document properties in a name-value store. This provides flexibility to"
1868
- " include data not officially supported in the standard without having to use additional namespaces or"
1869
- " create extensions. Unlike key-value stores, properties support duplicate names, each potentially"
1870
- " having different values. Property names of interest to the general public are encouraged to be"
1871
- " registered in the [CycloneDX Property"
1872
- " Taxonomy](https://github.com/CycloneDX/cyclonedx-property-taxonomy). Formal registration is OPTIONAL."
1873
- ),
1874
- title="Properties",
1786
+ description="The individual, not associated with an organization, that was granted the license",
1787
+ title="Licensee (Individual)",
1875
1788
  ),
1876
- ] = None
1789
+ ]
1877
1790
 
1878
1791
 
1879
- class Commit(CycloneDXBaseModel):
1792
+ class Purchaser(CycloneDXBaseModel):
1880
1793
  """
1881
- Specifies an individual commit
1794
+ The individual or organization that purchased the license
1882
1795
  """
1883
1796
 
1884
1797
  class Config:
1885
1798
  extra = Extra.forbid
1886
1799
 
1887
- uid: Annotated[
1888
- Optional[str],
1889
- Field(
1890
- description=(
1891
- "A unique identifier of the commit. This may be version control specific. For example, Subversion uses"
1892
- " revision numbers whereas git uses commit hashes."
1893
- ),
1894
- title="UID",
1895
- ),
1896
- ] = None
1897
- url: Annotated[
1898
- Optional[str],
1800
+ organization: Annotated[
1801
+ OrganizationalEntity,
1802
+ Field(description="The organization that purchased the license", title="Purchaser (Organization)"),
1803
+ ]
1804
+ individual: Annotated[
1805
+ Optional[OrganizationalContact],
1899
1806
  Field(
1900
- description="The URL to the commit. This URL will typically point to a commit in a version control system.",
1901
- title="URL",
1807
+ description="The individual, not associated with an organization, that purchased the license",
1808
+ title="Purchaser (Individual)",
1902
1809
  ),
1903
1810
  ] = None
1904
- author: Annotated[
1905
- Optional[IdentifiableAction],
1906
- Field(description="The author who created the changes in the commit", title="Author"),
1907
- ] = None
1908
- committer: Annotated[
1909
- Optional[IdentifiableAction],
1910
- Field(description="The person who committed or pushed the commit", title="Committer"),
1911
- ] = None
1912
- message: Annotated[
1913
- Optional[str], Field(description="The text description of the contents of the commit", title="Message")
1914
- ] = None
1915
1811
 
1916
1812
 
1917
- class Patch(CycloneDXBaseModel):
1813
+ class Purchaser1(CycloneDXBaseModel):
1918
1814
  """
1919
- Specifies an individual patch
1815
+ The individual or organization that purchased the license
1816
+ """
1817
+
1818
+ class Config:
1819
+ extra = Extra.forbid
1820
+
1821
+ organization: Annotated[
1822
+ Optional[OrganizationalEntity],
1823
+ Field(description="The organization that purchased the license", title="Purchaser (Organization)"),
1824
+ ] = None
1825
+ individual: Annotated[
1826
+ OrganizationalContact,
1827
+ Field(
1828
+ description="The individual, not associated with an organization, that purchased the license",
1829
+ title="Purchaser (Individual)",
1830
+ ),
1831
+ ]
1832
+
1833
+
1834
+ class Licensing(CycloneDXBaseModel):
1835
+ """
1836
+ Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and other important metadata
1837
+ """
1838
+
1839
+ class Config:
1840
+ extra = Extra.forbid
1841
+
1842
+ altIds: Annotated[
1843
+ Optional[List[str]],
1844
+ Field(
1845
+ description="License identifiers that may be used to manage licenses and their lifecycle",
1846
+ title="Alternate License Identifiers",
1847
+ ),
1848
+ ] = None
1849
+ licensor: Annotated[
1850
+ Optional[Union[Licensor, Licensor1]],
1851
+ Field(
1852
+ description="The individual or organization that grants a license to another individual or organization",
1853
+ title="Licensor",
1854
+ ),
1855
+ ] = None
1856
+ licensee: Annotated[
1857
+ Optional[Union[Licensee, Licensee1]],
1858
+ Field(description="The individual or organization for which a license was granted to", title="Licensee"),
1859
+ ] = None
1860
+ purchaser: Annotated[
1861
+ Optional[Union[Purchaser, Purchaser1]],
1862
+ Field(description="The individual or organization that purchased the license", title="Purchaser"),
1863
+ ] = None
1864
+ purchaseOrder: Annotated[
1865
+ Optional[str],
1866
+ Field(
1867
+ description=(
1868
+ "The purchase order identifier the purchaser sent to a supplier or vendor to authorize a purchase"
1869
+ ),
1870
+ title="Purchase Order",
1871
+ ),
1872
+ ] = None
1873
+ licenseTypes: Annotated[
1874
+ Optional[List[LicenseType]],
1875
+ Field(
1876
+ description=(
1877
+ "The type of license(s) that was granted to the licensee\n\n* __academic__ = A license that grants use"
1878
+ " of software solely for the purpose of education or research.\n* __appliance__ = A license covering"
1879
+ " use of software embedded in a specific piece of hardware.\n* __client-access__ = A Client Access"
1880
+ " License (CAL) allows client computers to access services provided by server software.\n*"
1881
+ " __concurrent-user__ = A Concurrent User license (aka floating license) limits the number of licenses"
1882
+ " for a software application and licenses are shared among a larger number of users.\n* __core-points__"
1883
+ " = A license where the core of a computer's processor is assigned a specific number of points.\n*"
1884
+ " __custom-metric__ = A license for which consumption is measured by non-standard metrics.\n*"
1885
+ " __device__ = A license that covers a defined number of installations on computers and other types of"
1886
+ " devices.\n* __evaluation__ = A license that grants permission to install and use software for trial"
1887
+ " purposes.\n* __named-user__ = A license that grants access to the software to one or more pre-defined"
1888
+ " users.\n* __node-locked__ = A license that grants access to the software on one or more pre-defined"
1889
+ " computers or devices.\n* __oem__ = An Original Equipment Manufacturer license that is delivered with"
1890
+ " hardware, cannot be transferred to other hardware, and is valid for the life of the hardware.\n*"
1891
+ " __perpetual__ = A license where the software is sold on a one-time basis and the licensee can use a"
1892
+ " copy of the software indefinitely.\n* __processor-points__ = A license where each installation"
1893
+ " consumes points per processor.\n* __subscription__ = A license where the licensee pays a fee to use"
1894
+ " the software or service.\n* __user__ = A license that grants access to the software or service by a"
1895
+ " specified number of users.\n* __other__ = Another license type.\n"
1896
+ ),
1897
+ title="License Type",
1898
+ ),
1899
+ ] = None
1900
+ lastRenewal: Annotated[
1901
+ Optional[datetime],
1902
+ Field(
1903
+ description=(
1904
+ "The timestamp indicating when the license was last renewed. For new purchases, this is often the"
1905
+ " purchase or acquisition date. For non-perpetual licenses or subscriptions, this is the timestamp of"
1906
+ " when the license was last renewed."
1907
+ ),
1908
+ title="Last Renewal",
1909
+ ),
1910
+ ] = None
1911
+ expiration: Annotated[
1912
+ Optional[datetime],
1913
+ Field(
1914
+ description="The timestamp indicating when the current license expires (if applicable).", title="Expiration"
1915
+ ),
1916
+ ] = None
1917
+
1918
+
1919
+ class License1(CycloneDXBaseModel):
1920
+ class Config:
1921
+ extra = Extra.forbid
1922
+
1923
+ bom_ref: Annotated[
1924
+ Optional[str],
1925
+ Field(
1926
+ alias="bom-ref",
1927
+ description=(
1928
+ "An optional identifier which can be used to reference the license elsewhere in the BOM. Every bom-ref"
1929
+ " MUST be unique within the BOM."
1930
+ ),
1931
+ min_length=1,
1932
+ title="BOM Reference",
1933
+ ),
1934
+ ] = None
1935
+ id: Annotated[
1936
+ spdx.LicenseID, Field(description="A valid SPDX license ID", examples=["Apache-2.0"], title="License ID (SPDX)")
1937
+ ]
1938
+ name: Annotated[
1939
+ Optional[str],
1940
+ Field(
1941
+ description="If SPDX does not define the license used, this field may be used to provide the license name",
1942
+ examples=["Acme Software License"],
1943
+ title="License Name",
1944
+ ),
1945
+ ] = None
1946
+ text: Annotated[
1947
+ Optional[Attachment],
1948
+ Field(description="An optional way to include the textual content of a license.", title="License text"),
1949
+ ] = None
1950
+ url: Annotated[
1951
+ Optional[str],
1952
+ Field(
1953
+ description=(
1954
+ "The URL to the license file. If specified, a 'license' externalReference should also be specified for"
1955
+ " completeness"
1956
+ ),
1957
+ examples=["https://www.apache.org/licenses/LICENSE-2.0.txt"],
1958
+ title="License URL",
1959
+ ),
1960
+ ] = None
1961
+ licensing: Annotated[
1962
+ Optional[Licensing],
1963
+ Field(
1964
+ description=(
1965
+ "Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and"
1966
+ " other important metadata"
1967
+ ),
1968
+ title="Licensing information",
1969
+ ),
1970
+ ] = None
1971
+ properties: Annotated[
1972
+ Optional[List[Property]],
1973
+ Field(
1974
+ description=(
1975
+ "Provides the ability to document properties in a name-value store. This provides flexibility to"
1976
+ " include data not officially supported in the standard without having to use additional namespaces or"
1977
+ " create extensions. Unlike key-value stores, properties support duplicate names, each potentially"
1978
+ " having different values. Property names of interest to the general public are encouraged to be"
1979
+ " registered in the [CycloneDX Property"
1980
+ " Taxonomy](https://github.com/CycloneDX/cyclonedx-property-taxonomy). Formal registration is OPTIONAL."
1981
+ ),
1982
+ title="Properties",
1983
+ ),
1984
+ ] = None
1985
+
1986
+
1987
+ class Licensor2(Licensor):
1988
+ """
1989
+ The individual or organization that grants a license to another individual or organization
1990
+ """
1991
+
1992
+
1993
+ class Licensor3(Licensor1):
1994
+ """
1995
+ The individual or organization that grants a license to another individual or organization
1996
+ """
1997
+
1998
+
1999
+ class Licensee2(Licensee):
2000
+ """
2001
+ The individual or organization for which a license was granted to
2002
+ """
2003
+
2004
+
2005
+ class Licensee3(Licensee1):
2006
+ """
2007
+ The individual or organization for which a license was granted to
2008
+ """
2009
+
2010
+
2011
+ class Purchaser2(Purchaser):
2012
+ """
2013
+ The individual or organization that purchased the license
2014
+ """
2015
+
2016
+
2017
+ class Purchaser3(Purchaser1):
2018
+ """
2019
+ The individual or organization that purchased the license
2020
+ """
2021
+
2022
+
2023
+ class Licensing1(CycloneDXBaseModel):
2024
+ """
2025
+ Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and other important metadata
2026
+ """
2027
+
2028
+ class Config:
2029
+ extra = Extra.forbid
2030
+
2031
+ altIds: Annotated[
2032
+ Optional[List[str]],
2033
+ Field(
2034
+ description="License identifiers that may be used to manage licenses and their lifecycle",
2035
+ title="Alternate License Identifiers",
2036
+ ),
2037
+ ] = None
2038
+ licensor: Annotated[
2039
+ Optional[Union[Licensor2, Licensor3]],
2040
+ Field(
2041
+ description="The individual or organization that grants a license to another individual or organization",
2042
+ title="Licensor",
2043
+ ),
2044
+ ] = None
2045
+ licensee: Annotated[
2046
+ Optional[Union[Licensee2, Licensee3]],
2047
+ Field(description="The individual or organization for which a license was granted to", title="Licensee"),
2048
+ ] = None
2049
+ purchaser: Annotated[
2050
+ Optional[Union[Purchaser2, Purchaser3]],
2051
+ Field(description="The individual or organization that purchased the license", title="Purchaser"),
2052
+ ] = None
2053
+ purchaseOrder: Annotated[
2054
+ Optional[str],
2055
+ Field(
2056
+ description=(
2057
+ "The purchase order identifier the purchaser sent to a supplier or vendor to authorize a purchase"
2058
+ ),
2059
+ title="Purchase Order",
2060
+ ),
2061
+ ] = None
2062
+ licenseTypes: Annotated[
2063
+ Optional[List[LicenseType]],
2064
+ Field(
2065
+ description=(
2066
+ "The type of license(s) that was granted to the licensee\n\n* __academic__ = A license that grants use"
2067
+ " of software solely for the purpose of education or research.\n* __appliance__ = A license covering"
2068
+ " use of software embedded in a specific piece of hardware.\n* __client-access__ = A Client Access"
2069
+ " License (CAL) allows client computers to access services provided by server software.\n*"
2070
+ " __concurrent-user__ = A Concurrent User license (aka floating license) limits the number of licenses"
2071
+ " for a software application and licenses are shared among a larger number of users.\n* __core-points__"
2072
+ " = A license where the core of a computer's processor is assigned a specific number of points.\n*"
2073
+ " __custom-metric__ = A license for which consumption is measured by non-standard metrics.\n*"
2074
+ " __device__ = A license that covers a defined number of installations on computers and other types of"
2075
+ " devices.\n* __evaluation__ = A license that grants permission to install and use software for trial"
2076
+ " purposes.\n* __named-user__ = A license that grants access to the software to one or more pre-defined"
2077
+ " users.\n* __node-locked__ = A license that grants access to the software on one or more pre-defined"
2078
+ " computers or devices.\n* __oem__ = An Original Equipment Manufacturer license that is delivered with"
2079
+ " hardware, cannot be transferred to other hardware, and is valid for the life of the hardware.\n*"
2080
+ " __perpetual__ = A license where the software is sold on a one-time basis and the licensee can use a"
2081
+ " copy of the software indefinitely.\n* __processor-points__ = A license where each installation"
2082
+ " consumes points per processor.\n* __subscription__ = A license where the licensee pays a fee to use"
2083
+ " the software or service.\n* __user__ = A license that grants access to the software or service by a"
2084
+ " specified number of users.\n* __other__ = Another license type.\n"
2085
+ ),
2086
+ title="License Type",
2087
+ ),
2088
+ ] = None
2089
+ lastRenewal: Annotated[
2090
+ Optional[datetime],
2091
+ Field(
2092
+ description=(
2093
+ "The timestamp indicating when the license was last renewed. For new purchases, this is often the"
2094
+ " purchase or acquisition date. For non-perpetual licenses or subscriptions, this is the timestamp of"
2095
+ " when the license was last renewed."
2096
+ ),
2097
+ title="Last Renewal",
2098
+ ),
2099
+ ] = None
2100
+ expiration: Annotated[
2101
+ Optional[datetime],
2102
+ Field(
2103
+ description="The timestamp indicating when the current license expires (if applicable).", title="Expiration"
2104
+ ),
2105
+ ] = None
2106
+
2107
+
2108
+ class License2(CycloneDXBaseModel):
2109
+ class Config:
2110
+ extra = Extra.forbid
2111
+
2112
+ bom_ref: Annotated[
2113
+ Optional[str],
2114
+ Field(
2115
+ alias="bom-ref",
2116
+ description=(
2117
+ "An optional identifier which can be used to reference the license elsewhere in the BOM. Every bom-ref"
2118
+ " MUST be unique within the BOM."
2119
+ ),
2120
+ min_length=1,
2121
+ title="BOM Reference",
2122
+ ),
2123
+ ] = None
2124
+ id: Annotated[
2125
+ Optional[spdx.LicenseID],
2126
+ Field(description="A valid SPDX license ID", examples=["Apache-2.0"], title="License ID (SPDX)"),
2127
+ ] = None
2128
+ name: Annotated[
2129
+ str,
2130
+ Field(
2131
+ description="If SPDX does not define the license used, this field may be used to provide the license name",
2132
+ examples=["Acme Software License"],
2133
+ title="License Name",
2134
+ ),
2135
+ ]
2136
+ text: Annotated[
2137
+ Optional[Attachment],
2138
+ Field(description="An optional way to include the textual content of a license.", title="License text"),
2139
+ ] = None
2140
+ url: Annotated[
2141
+ Optional[str],
2142
+ Field(
2143
+ description=(
2144
+ "The URL to the license file. If specified, a 'license' externalReference should also be specified for"
2145
+ " completeness"
2146
+ ),
2147
+ examples=["https://www.apache.org/licenses/LICENSE-2.0.txt"],
2148
+ title="License URL",
2149
+ ),
2150
+ ] = None
2151
+ licensing: Annotated[
2152
+ Optional[Licensing1],
2153
+ Field(
2154
+ description=(
2155
+ "Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and"
2156
+ " other important metadata"
2157
+ ),
2158
+ title="Licensing information",
2159
+ ),
2160
+ ] = None
2161
+ properties: Annotated[
2162
+ Optional[List[Property]],
2163
+ Field(
2164
+ description=(
2165
+ "Provides the ability to document properties in a name-value store. This provides flexibility to"
2166
+ " include data not officially supported in the standard without having to use additional namespaces or"
2167
+ " create extensions. Unlike key-value stores, properties support duplicate names, each potentially"
2168
+ " having different values. Property names of interest to the general public are encouraged to be"
2169
+ " registered in the [CycloneDX Property"
2170
+ " Taxonomy](https://github.com/CycloneDX/cyclonedx-property-taxonomy). Formal registration is OPTIONAL."
2171
+ ),
2172
+ title="Properties",
2173
+ ),
2174
+ ] = None
2175
+
2176
+
2177
+ class LicenseChoice1(CycloneDXBaseModel):
2178
+ class Config:
2179
+ extra = Extra.forbid
2180
+
2181
+ license: Annotated[Union[License1, License2], Field(title="License Object")]
2182
+
2183
+
2184
+ class Commit(CycloneDXBaseModel):
2185
+ """
2186
+ Specifies an individual commit
2187
+ """
2188
+
2189
+ class Config:
2190
+ extra = Extra.forbid
2191
+
2192
+ uid: Annotated[
2193
+ Optional[str],
2194
+ Field(
2195
+ description=(
2196
+ "A unique identifier of the commit. This may be version control specific. For example, Subversion uses"
2197
+ " revision numbers whereas git uses commit hashes."
2198
+ ),
2199
+ title="UID",
2200
+ ),
2201
+ ] = None
2202
+ url: Annotated[
2203
+ Optional[str],
2204
+ Field(
2205
+ description="The URL to the commit. This URL will typically point to a commit in a version control system.",
2206
+ title="URL",
2207
+ ),
2208
+ ] = None
2209
+ author: Annotated[
2210
+ Optional[IdentifiableAction],
2211
+ Field(description="The author who created the changes in the commit", title="Author"),
2212
+ ] = None
2213
+ committer: Annotated[
2214
+ Optional[IdentifiableAction],
2215
+ Field(description="The person who committed or pushed the commit", title="Committer"),
2216
+ ] = None
2217
+ message: Annotated[
2218
+ Optional[str], Field(description="The text description of the contents of the commit", title="Message")
2219
+ ] = None
2220
+
2221
+
2222
+ class Patch(CycloneDXBaseModel):
2223
+ """
2224
+ Specifies an individual patch
1920
2225
  """
1921
2226
 
1922
2227
  class Config:
@@ -2050,6 +2355,39 @@ class ExternalReference(CycloneDXBaseModel):
2050
2355
  ] = None
2051
2356
 
2052
2357
 
2358
+ class ComponentEvidence(CycloneDXBaseModel):
2359
+ """
2360
+ Provides the ability to document evidence collected through various forms of extraction or analysis.
2361
+ """
2362
+
2363
+ class Config:
2364
+ extra = Extra.forbid
2365
+
2366
+ identity: Annotated[
2367
+ Optional[Identity], Field(description="Evidence that substantiates the identity of a component.")
2368
+ ] = None
2369
+ occurrences: Annotated[
2370
+ Optional[List[Occurrence]],
2371
+ Field(
2372
+ description="Evidence of individual instances of a component spread across multiple locations.",
2373
+ title="Occurrences",
2374
+ ),
2375
+ ] = None
2376
+ callstack: Annotated[
2377
+ Optional[Callstack], Field(description="Evidence of the components use through the callstack.")
2378
+ ] = None
2379
+ licenses: Annotated[
2380
+ Optional[Union[List[LicenseChoice1], LicenseChoice2]],
2381
+ Field(
2382
+ description=(
2383
+ "EITHER (list of SPDX licenses and/or named licenses) OR (tuple of one SPDX License Expression)"
2384
+ ),
2385
+ title="Component License(s)",
2386
+ ),
2387
+ ] = None
2388
+ copyright: Annotated[Optional[List[Copyright]], Field(title="Copyright")] = None
2389
+
2390
+
2053
2391
  class Rating(CycloneDXBaseModel):
2054
2392
  """
2055
2393
  Defines the severity or risk ratings of a vulnerability.
@@ -2073,35 +2411,95 @@ class Rating(CycloneDXBaseModel):
2073
2411
  vector: Annotated[
2074
2412
  Optional[str],
2075
2413
  Field(
2076
- description="Textual representation of the metric values used to score the vulnerability", title="Vector"
2414
+ description="Textual representation of the metric values used to score the vulnerability", title="Vector"
2415
+ ),
2416
+ ] = None
2417
+ justification: Annotated[
2418
+ Optional[str],
2419
+ Field(description="An optional reason for rating the vulnerability as it was", title="Justification"),
2420
+ ] = None
2421
+
2422
+
2423
+ class Credits(CycloneDXBaseModel):
2424
+ """
2425
+ Individuals or organizations credited with the discovery of the vulnerability.
2426
+ """
2427
+
2428
+ class Config:
2429
+ extra = Extra.forbid
2430
+
2431
+ organizations: Annotated[
2432
+ Optional[List[OrganizationalEntity]],
2433
+ Field(description="The organizations credited with vulnerability discovery.", title="Organizations"),
2434
+ ] = None
2435
+ individuals: Annotated[
2436
+ Optional[List[OrganizationalContact]],
2437
+ Field(
2438
+ description=(
2439
+ "The individuals, not associated with organizations, that are credited with vulnerability discovery."
2440
+ ),
2441
+ title="Individuals",
2442
+ ),
2443
+ ] = None
2444
+
2445
+
2446
+ class Versions(CycloneDXBaseModel):
2447
+ class Config:
2448
+ extra = Extra.forbid
2449
+
2450
+ version: Annotated[
2451
+ str, Field(description="A single version of a component or service.", max_length=1024, min_length=1)
2452
+ ]
2453
+ range: Annotated[
2454
+ Optional[str],
2455
+ Field(
2456
+ description=(
2457
+ "A version range specified in Package URL Version Range syntax (vers) which is defined at"
2458
+ " https://github.com/package-url/purl-spec/VERSION-RANGE-SPEC.rst"
2459
+ ),
2460
+ max_length=1024,
2461
+ min_length=1,
2077
2462
  ),
2078
2463
  ] = None
2079
- justification: Annotated[
2080
- Optional[str],
2081
- Field(description="An optional reason for rating the vulnerability as it was", title="Justification"),
2082
- ] = None
2464
+ status: Annotated[
2465
+ Optional[AffectedStatus], Field(description="The vulnerability status for the version or range of versions.")
2466
+ ] = AffectedStatus.affected
2083
2467
 
2084
2468
 
2085
- class Credits(CycloneDXBaseModel):
2086
- """
2087
- Individuals or organizations credited with the discovery of the vulnerability.
2088
- """
2089
-
2469
+ class Versions1(CycloneDXBaseModel):
2090
2470
  class Config:
2091
2471
  extra = Extra.forbid
2092
2472
 
2093
- organizations: Annotated[
2094
- Optional[List[OrganizationalEntity]],
2095
- Field(description="The organizations credited with vulnerability discovery.", title="Organizations"),
2473
+ version: Annotated[
2474
+ Optional[str], Field(description="A single version of a component or service.", max_length=1024, min_length=1)
2096
2475
  ] = None
2097
- individuals: Annotated[
2098
- Optional[List[OrganizationalContact]],
2476
+ range: Annotated[
2477
+ str,
2099
2478
  Field(
2100
2479
  description=(
2101
- "The individuals, not associated with organizations, that are credited with vulnerability discovery."
2480
+ "A version range specified in Package URL Version Range syntax (vers) which is defined at"
2481
+ " https://github.com/package-url/purl-spec/VERSION-RANGE-SPEC.rst"
2102
2482
  ),
2103
- title="Individuals",
2483
+ max_length=1024,
2484
+ min_length=1,
2104
2485
  ),
2486
+ ]
2487
+ status: Annotated[
2488
+ Optional[AffectedStatus], Field(description="The vulnerability status for the version or range of versions.")
2489
+ ] = AffectedStatus.affected
2490
+
2491
+
2492
+ class Affect(CycloneDXBaseModel):
2493
+ class Config:
2494
+ extra = Extra.forbid
2495
+
2496
+ ref: Annotated[
2497
+ Union[RefLinkType, BomLinkElementType],
2498
+ Field(description="References a component or service by the objects bom-ref", title="Reference"),
2499
+ ]
2500
+ versions: Annotated[
2501
+ Optional[List[Union[Versions, Versions1]]],
2502
+ Field(description="Zero or more individual versions or range of versions.", title="Versions"),
2105
2503
  ] = None
2106
2504
 
2107
2505
 
@@ -2155,14 +2553,22 @@ class Considerations(CycloneDXBaseModel):
2155
2553
  ] = None
2156
2554
 
2157
2555
 
2158
- class DataGovernanceResponsibleParty(CycloneDXBaseModel):
2556
+ class DataGovernanceResponsibleParty1(CycloneDXBaseModel):
2159
2557
  class Config:
2160
2558
  extra = Extra.forbid
2161
2559
 
2162
- organization: Annotated[Optional[OrganizationalEntity], Field(title="Organization")] = None
2560
+ organization: Annotated[OrganizationalEntity, Field(title="Organization")]
2163
2561
  contact: Annotated[Optional[OrganizationalContact], Field(title="Individual")] = None
2164
2562
 
2165
2563
 
2564
+ class DataGovernanceResponsibleParty2(CycloneDXBaseModel):
2565
+ class Config:
2566
+ extra = Extra.forbid
2567
+
2568
+ organization: Annotated[Optional[OrganizationalEntity], Field(title="Organization")] = None
2569
+ contact: Annotated[OrganizationalContact, Field(title="Individual")]
2570
+
2571
+
2166
2572
  class GraphicsCollection(CycloneDXBaseModel):
2167
2573
  """
2168
2574
  A collection of graphics that represent various measurements.
@@ -2192,7 +2598,7 @@ class Step(CycloneDXBaseModel):
2192
2598
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2193
2599
 
2194
2600
 
2195
- class ResourceReferenceChoice(CycloneDXBaseModel):
2601
+ class ResourceReferenceChoice1(CycloneDXBaseModel):
2196
2602
  """
2197
2603
  A reference to a locally defined resource (e.g., a bom-ref) or an externally accessible resource.
2198
2604
  """
@@ -2201,20 +2607,38 @@ class ResourceReferenceChoice(CycloneDXBaseModel):
2201
2607
  extra = Extra.forbid
2202
2608
 
2203
2609
  ref: Annotated[
2204
- Optional[Union[RefLinkType, BomLinkElementType]],
2610
+ Union[RefLinkType, BomLinkElementType],
2205
2611
  Field(description="References an object by its bom-ref attribute", title="BOM Reference"),
2206
- ] = None
2612
+ ]
2207
2613
  externalReference: Annotated[
2208
2614
  Optional[ExternalReference],
2209
2615
  Field(description="Reference to an externally accessible resource.", title="External reference"),
2210
2616
  ] = None
2211
2617
 
2212
2618
 
2619
+ class ResourceReferenceChoice2(CycloneDXBaseModel):
2620
+ """
2621
+ A reference to a locally defined resource (e.g., a bom-ref) or an externally accessible resource.
2622
+ """
2623
+
2624
+ class Config:
2625
+ extra = Extra.forbid
2626
+
2627
+ ref: Annotated[
2628
+ Optional[Union[RefLinkType, BomLinkElementType]],
2629
+ Field(description="References an object by its bom-ref attribute", title="BOM Reference"),
2630
+ ] = None
2631
+ externalReference: Annotated[
2632
+ ExternalReference,
2633
+ Field(description="Reference to an externally accessible resource.", title="External reference"),
2634
+ ]
2635
+
2636
+
2213
2637
  class Signer(CycloneDXBaseModel):
2214
2638
  class Config:
2215
2639
  extra = Extra.forbid
2216
2640
 
2217
- algorithm: Union[AlgorithmEnum, AnyUrl]
2641
+ algorithm: Union[Algorithm, AnyUrl]
2218
2642
  keyId: Annotated[
2219
2643
  Optional[str],
2220
2644
  Field(description="Optional. Application specific string identifying the signature key.", title="Key ID"),
@@ -2311,21 +2735,21 @@ class DataGovernance(CycloneDXBaseModel):
2311
2735
  extra = Extra.forbid
2312
2736
 
2313
2737
  custodians: Annotated[
2314
- Optional[List[DataGovernanceResponsibleParty]],
2738
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2315
2739
  Field(
2316
2740
  description="Data custodians are responsible for the safe custody, transport, and storage of data.",
2317
2741
  title="Data Custodians",
2318
2742
  ),
2319
2743
  ] = None
2320
2744
  stewards: Annotated[
2321
- Optional[List[DataGovernanceResponsibleParty]],
2745
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2322
2746
  Field(
2323
2747
  description="Data stewards are responsible for data content, context, and associated business rules.",
2324
2748
  title="Data Stewards",
2325
2749
  ),
2326
2750
  ] = None
2327
2751
  owners: Annotated[
2328
- Optional[List[DataGovernanceResponsibleParty]],
2752
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2329
2753
  Field(description="Data owners are concerned with risk and appropriate access to data.", title="Data Owners"),
2330
2754
  ] = None
2331
2755
 
@@ -2372,7 +2796,7 @@ class Workspace(CycloneDXBaseModel):
2372
2796
  Optional[str], Field(description="A description of the resource instance.", title="Description")
2373
2797
  ] = None
2374
2798
  resourceReferences: Annotated[
2375
- Optional[List[ResourceReferenceChoice]],
2799
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
2376
2800
  Field(
2377
2801
  description="References to component or service resources that are used to realize the resource instance.",
2378
2802
  title="Resource references",
@@ -2412,46 +2836,229 @@ class Workspace(CycloneDXBaseModel):
2412
2836
  title="Volume request",
2413
2837
  ),
2414
2838
  ] = None
2415
- volume: Annotated[
2416
- Optional[Volume],
2839
+ volume: Annotated[
2840
+ Optional[Volume],
2841
+ Field(
2842
+ description="Information about the actual volume instance allocated to the workspace.",
2843
+ examples=["see https://kubernetes.io/docs/concepts/storage/persistent-volumes/"],
2844
+ title="Volume",
2845
+ ),
2846
+ ] = None
2847
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2848
+
2849
+
2850
+ class Event(CycloneDXBaseModel):
2851
+ """
2852
+ Represents something that happened that may trigger a response.
2853
+ """
2854
+
2855
+ class Config:
2856
+ extra = Extra.forbid
2857
+
2858
+ uid: Annotated[
2859
+ Optional[str], Field(description="The unique identifier of the event.", title="Unique Identifier (UID)")
2860
+ ] = None
2861
+ description: Annotated[Optional[str], Field(description="A description of the event.", title="Description")] = None
2862
+ timeReceived: Annotated[
2863
+ Optional[datetime],
2864
+ Field(description="The date and time (timestamp) when the event was received.", title="Time Received"),
2865
+ ] = None
2866
+ data: Annotated[Optional[Attachment], Field(description="Encoding of the raw event data.", title="Data")] = None
2867
+ source: Annotated[
2868
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2869
+ Field(description="References the component or service that was the source of the event", title="Source"),
2870
+ ] = None
2871
+ target: Annotated[
2872
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2873
+ Field(description="References the component or service that was the target of the event", title="Target"),
2874
+ ] = None
2875
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2876
+
2877
+
2878
+ class InputType1(CycloneDXBaseModel):
2879
+ """
2880
+ Type that represents various input data types and formats.
2881
+ """
2882
+
2883
+ class Config:
2884
+ extra = Extra.forbid
2885
+
2886
+ source: Annotated[
2887
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2888
+ Field(
2889
+ description=(
2890
+ "A references to the component or service that provided the input to the task (e.g., reference to a"
2891
+ " service with data flow value of `inbound`)"
2892
+ ),
2893
+ examples=["source code repository", "database"],
2894
+ title="Source",
2895
+ ),
2896
+ ] = None
2897
+ target: Annotated[
2898
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2899
+ Field(
2900
+ description=(
2901
+ "A reference to the component or service that received or stored the input if not the task itself"
2902
+ " (e.g., a local, named storage workspace)"
2903
+ ),
2904
+ examples=["workspace", "directory"],
2905
+ title="Target",
2906
+ ),
2907
+ ] = None
2908
+ resource: Annotated[
2909
+ Union[ResourceReferenceChoice1, ResourceReferenceChoice2],
2910
+ Field(
2911
+ description=(
2912
+ "A reference to an independent resource provided as an input to a task by the workflow runtime."
2913
+ ),
2914
+ examples=[
2915
+ "reference to a configuration file in a repository (i.e., a bom-ref)",
2916
+ "reference to a scanning service used in a task (i.e., a bom-ref)",
2917
+ ],
2918
+ title="Resource",
2919
+ ),
2920
+ ]
2921
+ parameters: Annotated[
2922
+ Optional[List[Parameter]],
2923
+ Field(
2924
+ description="Inputs that have the form of parameters with names and values.",
2925
+ title="Parameters",
2926
+ ),
2927
+ ] = None
2928
+ environmentVars: Annotated[
2929
+ Optional[List[Union[Property, str]]],
2930
+ Field(
2931
+ description="Inputs that have the form of parameters with names and values.",
2932
+ title="Environment variables",
2933
+ ),
2934
+ ] = None
2935
+ data: Annotated[Optional[Attachment], Field(description="Inputs that have the form of data.", title="Data")] = None
2936
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2937
+
2938
+
2939
+ class InputType2(CycloneDXBaseModel):
2940
+ """
2941
+ Type that represents various input data types and formats.
2942
+ """
2943
+
2944
+ class Config:
2945
+ extra = Extra.forbid
2946
+
2947
+ source: Annotated[
2948
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2949
+ Field(
2950
+ description=(
2951
+ "A references to the component or service that provided the input to the task (e.g., reference to a"
2952
+ " service with data flow value of `inbound`)"
2953
+ ),
2954
+ examples=["source code repository", "database"],
2955
+ title="Source",
2956
+ ),
2957
+ ] = None
2958
+ target: Annotated[
2959
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2960
+ Field(
2961
+ description=(
2962
+ "A reference to the component or service that received or stored the input if not the task itself"
2963
+ " (e.g., a local, named storage workspace)"
2964
+ ),
2965
+ examples=["workspace", "directory"],
2966
+ title="Target",
2967
+ ),
2968
+ ] = None
2969
+ resource: Annotated[
2970
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2971
+ Field(
2972
+ description=(
2973
+ "A reference to an independent resource provided as an input to a task by the workflow runtime."
2974
+ ),
2975
+ examples=[
2976
+ "reference to a configuration file in a repository (i.e., a bom-ref)",
2977
+ "reference to a scanning service used in a task (i.e., a bom-ref)",
2978
+ ],
2979
+ title="Resource",
2980
+ ),
2981
+ ] = None
2982
+ parameters: Annotated[
2983
+ List[Parameter],
2984
+ Field(
2985
+ description="Inputs that have the form of parameters with names and values.",
2986
+ title="Parameters",
2987
+ ),
2988
+ ]
2989
+ environmentVars: Annotated[
2990
+ Optional[List[Union[Property, str]]],
2991
+ Field(
2992
+ description="Inputs that have the form of parameters with names and values.",
2993
+ title="Environment variables",
2994
+ ),
2995
+ ] = None
2996
+ data: Annotated[Optional[Attachment], Field(description="Inputs that have the form of data.", title="Data")] = None
2997
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2998
+
2999
+
3000
+ class InputType3(CycloneDXBaseModel):
3001
+ """
3002
+ Type that represents various input data types and formats.
3003
+ """
3004
+
3005
+ class Config:
3006
+ extra = Extra.forbid
3007
+
3008
+ source: Annotated[
3009
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3010
+ Field(
3011
+ description=(
3012
+ "A references to the component or service that provided the input to the task (e.g., reference to a"
3013
+ " service with data flow value of `inbound`)"
3014
+ ),
3015
+ examples=["source code repository", "database"],
3016
+ title="Source",
3017
+ ),
3018
+ ] = None
3019
+ target: Annotated[
3020
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3021
+ Field(
3022
+ description=(
3023
+ "A reference to the component or service that received or stored the input if not the task itself"
3024
+ " (e.g., a local, named storage workspace)"
3025
+ ),
3026
+ examples=["workspace", "directory"],
3027
+ title="Target",
3028
+ ),
3029
+ ] = None
3030
+ resource: Annotated[
3031
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3032
+ Field(
3033
+ description=(
3034
+ "A reference to an independent resource provided as an input to a task by the workflow runtime."
3035
+ ),
3036
+ examples=[
3037
+ "reference to a configuration file in a repository (i.e., a bom-ref)",
3038
+ "reference to a scanning service used in a task (i.e., a bom-ref)",
3039
+ ],
3040
+ title="Resource",
3041
+ ),
3042
+ ] = None
3043
+ parameters: Annotated[
3044
+ Optional[List[Parameter]],
3045
+ Field(
3046
+ description="Inputs that have the form of parameters with names and values.",
3047
+ title="Parameters",
3048
+ ),
3049
+ ] = None
3050
+ environmentVars: Annotated[
3051
+ List[Union[Property, str]],
2417
3052
  Field(
2418
- description="Information about the actual volume instance allocated to the workspace.",
2419
- examples=["see https://kubernetes.io/docs/concepts/storage/persistent-volumes/"],
2420
- title="Volume",
3053
+ description="Inputs that have the form of parameters with names and values.",
3054
+ title="Environment variables",
2421
3055
  ),
2422
- ] = None
2423
- properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2424
-
2425
-
2426
- class Event(CycloneDXBaseModel):
2427
- """
2428
- Represents something that happened that may trigger a response.
2429
- """
2430
-
2431
- class Config:
2432
- extra = Extra.forbid
2433
-
2434
- uid: Annotated[
2435
- Optional[str], Field(description="The unique identifier of the event.", title="Unique Identifier (UID)")
2436
- ] = None
2437
- description: Annotated[Optional[str], Field(description="A description of the event.", title="Description")] = None
2438
- timeReceived: Annotated[
2439
- Optional[datetime],
2440
- Field(description="The date and time (timestamp) when the event was received.", title="Time Received"),
2441
- ] = None
2442
- data: Annotated[Optional[Attachment], Field(description="Encoding of the raw event data.", title="Data")] = None
2443
- source: Annotated[
2444
- Optional[ResourceReferenceChoice],
2445
- Field(description="References the component or service that was the source of the event", title="Source"),
2446
- ] = None
2447
- target: Annotated[
2448
- Optional[ResourceReferenceChoice],
2449
- Field(description="References the component or service that was the target of the event", title="Target"),
2450
- ] = None
3056
+ ]
3057
+ data: Annotated[Optional[Attachment], Field(description="Inputs that have the form of data.", title="Data")] = None
2451
3058
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2452
3059
 
2453
3060
 
2454
- class InputType(CycloneDXBaseModel):
3061
+ class InputType4(CycloneDXBaseModel):
2455
3062
  """
2456
3063
  Type that represents various input data types and formats.
2457
3064
  """
@@ -2460,7 +3067,7 @@ class InputType(CycloneDXBaseModel):
2460
3067
  extra = Extra.forbid
2461
3068
 
2462
3069
  source: Annotated[
2463
- Optional[ResourceReferenceChoice],
3070
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2464
3071
  Field(
2465
3072
  description=(
2466
3073
  "A references to the component or service that provided the input to the task (e.g., reference to a"
@@ -2471,7 +3078,7 @@ class InputType(CycloneDXBaseModel):
2471
3078
  ),
2472
3079
  ] = None
2473
3080
  target: Annotated[
2474
- Optional[ResourceReferenceChoice],
3081
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2475
3082
  Field(
2476
3083
  description=(
2477
3084
  "A reference to the component or service that received or stored the input if not the task itself"
@@ -2482,7 +3089,7 @@ class InputType(CycloneDXBaseModel):
2482
3089
  ),
2483
3090
  ] = None
2484
3091
  resource: Annotated[
2485
- Optional[ResourceReferenceChoice],
3092
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2486
3093
  Field(
2487
3094
  description=(
2488
3095
  "A reference to an independent resource provided as an input to a task by the workflow runtime."
@@ -2508,24 +3115,66 @@ class InputType(CycloneDXBaseModel):
2508
3115
  title="Environment variables",
2509
3116
  ),
2510
3117
  ] = None
2511
- data: Annotated[Optional[Attachment], Field(description="Inputs that have the form of data.", title="Data")] = None
3118
+ data: Annotated[Attachment, Field(description="Inputs that have the form of data.", title="Data")]
3119
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
3120
+
3121
+
3122
+ class OutputType1(CycloneDXBaseModel):
3123
+ class Config:
3124
+ extra = Extra.forbid
3125
+
3126
+ type: Annotated[Optional[Type7], Field(description="Describes the type of data output.", title="Type")] = None
3127
+ source: Annotated[
3128
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3129
+ Field(
3130
+ description="Component or service that generated or provided the output from the task (e.g., a build tool)",
3131
+ title="Source",
3132
+ ),
3133
+ ] = None
3134
+ target: Annotated[
3135
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3136
+ Field(
3137
+ description=(
3138
+ "Component or service that received the output from the task (e.g., reference to an artifactory service"
3139
+ " with data flow value of `outbound`)"
3140
+ ),
3141
+ examples=["a log file described as an `externalReference` within its target domain."],
3142
+ title="Target",
3143
+ ),
3144
+ ] = None
3145
+ resource: Annotated[
3146
+ Union[ResourceReferenceChoice1, ResourceReferenceChoice2],
3147
+ Field(
3148
+ description="A reference to an independent resource generated as output by the task.",
3149
+ examples=["configuration file", "source code", "scanning service"],
3150
+ title="Resource",
3151
+ ),
3152
+ ]
3153
+ data: Annotated[Optional[Attachment], Field(description="Outputs that have the form of data.", title="Data")] = None
3154
+ environmentVars: Annotated[
3155
+ Optional[List[Union[Property, str]]],
3156
+ Field(
3157
+ description="Outputs that have the form of environment variables.",
3158
+ title="Environment variables",
3159
+ ),
3160
+ ] = None
2512
3161
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2513
3162
 
2514
3163
 
2515
- class OutputType(CycloneDXBaseModel):
3164
+ class OutputType2(CycloneDXBaseModel):
2516
3165
  class Config:
2517
3166
  extra = Extra.forbid
2518
3167
 
2519
3168
  type: Annotated[Optional[Type7], Field(description="Describes the type of data output.", title="Type")] = None
2520
3169
  source: Annotated[
2521
- Optional[ResourceReferenceChoice],
3170
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2522
3171
  Field(
2523
3172
  description="Component or service that generated or provided the output from the task (e.g., a build tool)",
2524
3173
  title="Source",
2525
3174
  ),
2526
3175
  ] = None
2527
3176
  target: Annotated[
2528
- Optional[ResourceReferenceChoice],
3177
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2529
3178
  Field(
2530
3179
  description=(
2531
3180
  "Component or service that received the output from the task (e.g., reference to an artifactory service"
@@ -2536,7 +3185,7 @@ class OutputType(CycloneDXBaseModel):
2536
3185
  ),
2537
3186
  ] = None
2538
3187
  resource: Annotated[
2539
- Optional[ResourceReferenceChoice],
3188
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2540
3189
  Field(
2541
3190
  description="A reference to an independent resource generated as output by the task.",
2542
3191
  examples=["configuration file", "source code", "scanning service"],
@@ -2544,6 +3193,48 @@ class OutputType(CycloneDXBaseModel):
2544
3193
  ),
2545
3194
  ] = None
2546
3195
  data: Annotated[Optional[Attachment], Field(description="Outputs that have the form of data.", title="Data")] = None
3196
+ environmentVars: Annotated[
3197
+ List[Union[Property, str]],
3198
+ Field(
3199
+ description="Outputs that have the form of environment variables.",
3200
+ title="Environment variables",
3201
+ ),
3202
+ ]
3203
+ properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
3204
+
3205
+
3206
+ class OutputType3(CycloneDXBaseModel):
3207
+ class Config:
3208
+ extra = Extra.forbid
3209
+
3210
+ type: Annotated[Optional[Type7], Field(description="Describes the type of data output.", title="Type")] = None
3211
+ source: Annotated[
3212
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3213
+ Field(
3214
+ description="Component or service that generated or provided the output from the task (e.g., a build tool)",
3215
+ title="Source",
3216
+ ),
3217
+ ] = None
3218
+ target: Annotated[
3219
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3220
+ Field(
3221
+ description=(
3222
+ "Component or service that received the output from the task (e.g., reference to an artifactory service"
3223
+ " with data flow value of `outbound`)"
3224
+ ),
3225
+ examples=["a log file described as an `externalReference` within its target domain."],
3226
+ title="Target",
3227
+ ),
3228
+ ] = None
3229
+ resource: Annotated[
3230
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
3231
+ Field(
3232
+ description="A reference to an independent resource generated as output by the task.",
3233
+ examples=["configuration file", "source code", "scanning service"],
3234
+ title="Resource",
3235
+ ),
3236
+ ] = None
3237
+ data: Annotated[Attachment, Field(description="Outputs that have the form of data.", title="Data")]
2547
3238
  environmentVars: Annotated[
2548
3239
  Optional[List[Union[Property, str]]],
2549
3240
  Field(
@@ -2720,7 +3411,7 @@ class Trigger(CycloneDXBaseModel):
2720
3411
  Optional[str], Field(description="A description of the resource instance.", title="Description")
2721
3412
  ] = None
2722
3413
  resourceReferences: Annotated[
2723
- Optional[List[ResourceReferenceChoice]],
3414
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
2724
3415
  Field(
2725
3416
  description="References to component or service resources that are used to realize the resource instance.",
2726
3417
  title="Resource references",
@@ -2739,7 +3430,7 @@ class Trigger(CycloneDXBaseModel):
2739
3430
  Field(description="The date and time (timestamp) when the trigger was activated.", title="Time activated"),
2740
3431
  ] = None
2741
3432
  inputs: Annotated[
2742
- Optional[List[InputType]],
3433
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
2743
3434
  Field(
2744
3435
  description="Represents resources and data brought into a task at runtime by executor or task commands",
2745
3436
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -2747,7 +3438,7 @@ class Trigger(CycloneDXBaseModel):
2747
3438
  ),
2748
3439
  ] = None
2749
3440
  outputs: Annotated[
2750
- Optional[List[OutputType]],
3441
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
2751
3442
  Field(
2752
3443
  description="Represents resources and data output from a task at runtime by executor or task commands",
2753
3444
  examples=["a log file or metrics data produced by the task"],
@@ -2848,7 +3539,7 @@ class Service(CycloneDXBaseModel):
2848
3539
  ),
2849
3540
  ] = None
2850
3541
  licenses: Annotated[
2851
- Optional[List],
3542
+ Optional[Union[List[LicenseChoice1], LicenseChoice2]],
2852
3543
  Field(
2853
3544
  description=(
2854
3545
  "EITHER (list of SPDX licenses and/or named licenses) OR (tuple of one SPDX License Expression)"
@@ -2994,52 +3685,6 @@ class Compositions(CycloneDXBaseModel):
2994
3685
  ] = None
2995
3686
 
2996
3687
 
2997
- class Annotations(CycloneDXBaseModel):
2998
- """
2999
- A comment, note, explanation, or similar textual content which provides additional context to the object(s) being annotated.
3000
- """
3001
-
3002
- class Config:
3003
- extra = Extra.forbid
3004
-
3005
- bom_ref: Annotated[
3006
- Optional[str],
3007
- Field(
3008
- alias="bom-ref",
3009
- description=(
3010
- "An optional identifier which can be used to reference the annotation elsewhere in the BOM. Every"
3011
- " bom-ref MUST be unique within the BOM."
3012
- ),
3013
- min_length=1,
3014
- title="BOM Reference",
3015
- ),
3016
- ] = None
3017
- subjects: Annotated[
3018
- List[Union[RefLinkType, BomLinkElementType]],
3019
- Field(
3020
- description=(
3021
- "The object in the BOM identified by its bom-ref. This is often a component or service, but may be any"
3022
- " object type supporting bom-refs."
3023
- ),
3024
- title="BOM References",
3025
- ),
3026
- ]
3027
- timestamp: Annotated[
3028
- datetime, Field(description="The date and time (timestamp) when the annotation was created.", title="Timestamp")
3029
- ]
3030
- text: Annotated[str, Field(description="The textual content of the annotation.", title="Text")]
3031
- signature: Annotated[
3032
- Optional[Union[Signature1, Signature2, Signer]],
3033
- Field(
3034
- description=(
3035
- "Enveloped signature in [JSON Signature Format"
3036
- " (JSF)](https://cyberphone.github.io/doc/security/jsf.html)."
3037
- ),
3038
- title="Signature",
3039
- ),
3040
- ] = None
3041
-
3042
-
3043
3688
  class ModelParameters(CycloneDXBaseModel):
3044
3689
  """
3045
3690
  Hyper-parameters for construction of the model.
@@ -3080,7 +3725,7 @@ class ModelParameters(CycloneDXBaseModel):
3080
3725
  ),
3081
3726
  ] = None
3082
3727
  datasets: Annotated[
3083
- Optional[List[Union[ComponentData, Dataset]]],
3728
+ Optional[List[Union[ComponentData, Datasets]]],
3084
3729
  Field(description="The datasets used to train and evaluate the model.", title="Datasets"),
3085
3730
  ] = None
3086
3731
  inputs: Annotated[
@@ -3178,7 +3823,7 @@ class Task(CycloneDXBaseModel):
3178
3823
  Optional[str], Field(description="A description of the resource instance.", title="Description")
3179
3824
  ] = None
3180
3825
  resourceReferences: Annotated[
3181
- Optional[List[ResourceReferenceChoice]],
3826
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
3182
3827
  Field(
3183
3828
  description="References to component or service resources that are used to realize the resource instance.",
3184
3829
  title="Resource references",
@@ -3201,7 +3846,7 @@ class Task(CycloneDXBaseModel):
3201
3846
  ),
3202
3847
  ] = None
3203
3848
  inputs: Annotated[
3204
- Optional[List[InputType]],
3849
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
3205
3850
  Field(
3206
3851
  description="Represents resources and data brought into a task at runtime by executor or task commands",
3207
3852
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -3209,7 +3854,7 @@ class Task(CycloneDXBaseModel):
3209
3854
  ),
3210
3855
  ] = None
3211
3856
  outputs: Annotated[
3212
- Optional[List[OutputType]],
3857
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
3213
3858
  Field(
3214
3859
  description="Represents resources and data output from a task at runtime by executor or task commands",
3215
3860
  examples=["a log file or metrics data produced by the task"],
@@ -3272,7 +3917,7 @@ class Workflow(CycloneDXBaseModel):
3272
3917
  Optional[str], Field(description="A description of the resource instance.", title="Description")
3273
3918
  ] = None
3274
3919
  resourceReferences: Annotated[
3275
- Optional[List[ResourceReferenceChoice]],
3920
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
3276
3921
  Field(
3277
3922
  description="References to component or service resources that are used to realize the resource instance.",
3278
3923
  title="Resource references",
@@ -3309,7 +3954,7 @@ class Workflow(CycloneDXBaseModel):
3309
3954
  ),
3310
3955
  ] = None
3311
3956
  inputs: Annotated[
3312
- Optional[List[InputType]],
3957
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
3313
3958
  Field(
3314
3959
  description="Represents resources and data brought into a task at runtime by executor or task commands",
3315
3960
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -3317,7 +3962,7 @@ class Workflow(CycloneDXBaseModel):
3317
3962
  ),
3318
3963
  ] = None
3319
3964
  outputs: Annotated[
3320
- Optional[List[OutputType]],
3965
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
3321
3966
  Field(
3322
3967
  description="Represents resources and data output from a task at runtime by executor or task commands",
3323
3968
  examples=["a log file or metrics data produced by the task"],
@@ -3503,7 +4148,7 @@ class CyclonedxSoftwareBillOfMaterialsStandard(CycloneDXBaseModel):
3503
4148
  ] = None
3504
4149
 
3505
4150
 
3506
- class ToolModel(CycloneDXBaseModel):
4151
+ class Tools(CycloneDXBaseModel):
3507
4152
  """
3508
4153
  The tool(s) used in the creation of the BOM.
3509
4154
  """
@@ -3539,9 +4184,9 @@ class Metadata(CycloneDXBaseModel):
3539
4184
  Field(description="The date and time (timestamp) when the BOM was created.", title="Timestamp"),
3540
4185
  ] = None
3541
4186
  lifecycles: Annotated[
3542
- Optional[List[Union[Lifecycle, Lifecycle1]]], Field(description="", title="Lifecycles")
4187
+ Optional[List[Union[Lifecycles, Lifecycles1]]], Field(description="", title="Lifecycles")
3543
4188
  ] = None
3544
- tools: Optional[Union[ToolModel, List[Tool]]] = None
4189
+ tools: Optional[Union[Tools, List[Tool]]] = None
3545
4190
  authors: Annotated[
3546
4191
  Optional[List[OrganizationalContact]],
3547
4192
  Field(
@@ -3572,7 +4217,7 @@ class Metadata(CycloneDXBaseModel):
3572
4217
  ),
3573
4218
  ] = None
3574
4219
  licenses: Annotated[
3575
- Optional[List],
4220
+ Optional[Union[List[LicenseChoice1], LicenseChoice2]],
3576
4221
  Field(
3577
4222
  description=(
3578
4223
  "EITHER (list of SPDX licenses and/or named licenses) OR (tuple of one SPDX License Expression)"
@@ -3816,7 +4461,7 @@ class Component(CycloneDXBaseModel):
3816
4461
  ] = Scope.required
3817
4462
  hashes: Annotated[Optional[List[Hash]], Field(title="Component Hashes")] = None
3818
4463
  licenses: Annotated[
3819
- Optional[List],
4464
+ Optional[Union[List[LicenseChoice1], LicenseChoice2]],
3820
4465
  Field(
3821
4466
  description=(
3822
4467
  "EITHER (list of SPDX licenses and/or named licenses) OR (tuple of one SPDX License Expression)"
@@ -3964,7 +4609,7 @@ class Component(CycloneDXBaseModel):
3964
4609
  ] = None
3965
4610
 
3966
4611
 
3967
- class Tool1(CycloneDXBaseModel):
4612
+ class Tools1(CycloneDXBaseModel):
3968
4613
  """
3969
4614
  The tool(s) used to identify, confirm, or score the vulnerability.
3970
4615
  """
@@ -4038,13 +4683,14 @@ class Vulnerability(CycloneDXBaseModel):
4038
4683
  Optional[List[Rating]], Field(description="List of vulnerability ratings", title="Ratings")
4039
4684
  ] = None
4040
4685
  cwes: Annotated[
4041
- Optional[List[Cwe]],
4686
+ Optional[List[int]],
4042
4687
  Field(
4043
4688
  description=(
4044
4689
  "List of Common Weaknesses Enumerations (CWEs) codes that describes this vulnerability. For example 399"
4045
4690
  " (of https://cwe.mitre.org/data/definitions/399.html)"
4046
4691
  ),
4047
4692
  examples=[399],
4693
+ ge=1,
4048
4694
  title="CWEs",
4049
4695
  ),
4050
4696
  ] = None
@@ -4123,7 +4769,7 @@ class Vulnerability(CycloneDXBaseModel):
4123
4769
  title="Credits",
4124
4770
  ),
4125
4771
  ] = None
4126
- tools: Optional[Union[Tool1, List[Tool]]] = None
4772
+ tools: Optional[Union[Tools1, List[Tool]]] = None
4127
4773
  analysis: Annotated[
4128
4774
  Optional[Analysis],
4129
4775
  Field(
@@ -4153,6 +4799,135 @@ class Vulnerability(CycloneDXBaseModel):
4153
4799
  ] = None
4154
4800
 
4155
4801
 
4802
+ class Annotator(CycloneDXBaseModel):
4803
+ """
4804
+ The organization, person, component, or service which created the textual content of the annotation.
4805
+ """
4806
+
4807
+ class Config:
4808
+ extra = Extra.forbid
4809
+
4810
+ organization: Annotated[OrganizationalEntity, Field(description="The organization that created the annotation")]
4811
+ individual: Annotated[
4812
+ Optional[OrganizationalContact], Field(description="The person that created the annotation")
4813
+ ] = None
4814
+ component: Annotated[
4815
+ Optional[Component], Field(description="The tool or component that created the annotation")
4816
+ ] = None
4817
+ service: Annotated[Optional[Service], Field(description="The service that created the annotation")] = None
4818
+
4819
+
4820
+ class Annotator1(CycloneDXBaseModel):
4821
+ """
4822
+ The organization, person, component, or service which created the textual content of the annotation.
4823
+ """
4824
+
4825
+ class Config:
4826
+ extra = Extra.forbid
4827
+
4828
+ organization: Annotated[
4829
+ Optional[OrganizationalEntity], Field(description="The organization that created the annotation")
4830
+ ] = None
4831
+ individual: Annotated[OrganizationalContact, Field(description="The person that created the annotation")]
4832
+ component: Annotated[
4833
+ Optional[Component], Field(description="The tool or component that created the annotation")
4834
+ ] = None
4835
+ service: Annotated[Optional[Service], Field(description="The service that created the annotation")] = None
4836
+
4837
+
4838
+ class Annotator2(CycloneDXBaseModel):
4839
+ """
4840
+ The organization, person, component, or service which created the textual content of the annotation.
4841
+ """
4842
+
4843
+ class Config:
4844
+ extra = Extra.forbid
4845
+
4846
+ organization: Annotated[
4847
+ Optional[OrganizationalEntity], Field(description="The organization that created the annotation")
4848
+ ] = None
4849
+ individual: Annotated[
4850
+ Optional[OrganizationalContact], Field(description="The person that created the annotation")
4851
+ ] = None
4852
+ component: Annotated[Component, Field(description="The tool or component that created the annotation")]
4853
+ service: Annotated[Optional[Service], Field(description="The service that created the annotation")] = None
4854
+
4855
+
4856
+ class Annotator3(CycloneDXBaseModel):
4857
+ """
4858
+ The organization, person, component, or service which created the textual content of the annotation.
4859
+ """
4860
+
4861
+ class Config:
4862
+ extra = Extra.forbid
4863
+
4864
+ organization: Annotated[
4865
+ Optional[OrganizationalEntity], Field(description="The organization that created the annotation")
4866
+ ] = None
4867
+ individual: Annotated[
4868
+ Optional[OrganizationalContact], Field(description="The person that created the annotation")
4869
+ ] = None
4870
+ component: Annotated[
4871
+ Optional[Component], Field(description="The tool or component that created the annotation")
4872
+ ] = None
4873
+ service: Annotated[Service, Field(description="The service that created the annotation")]
4874
+
4875
+
4876
+ class Annotations(CycloneDXBaseModel):
4877
+ """
4878
+ A comment, note, explanation, or similar textual content which provides additional context to the object(s) being annotated.
4879
+ """
4880
+
4881
+ class Config:
4882
+ extra = Extra.forbid
4883
+
4884
+ bom_ref: Annotated[
4885
+ Optional[str],
4886
+ Field(
4887
+ alias="bom-ref",
4888
+ description=(
4889
+ "An optional identifier which can be used to reference the annotation elsewhere in the BOM. Every"
4890
+ " bom-ref MUST be unique within the BOM."
4891
+ ),
4892
+ min_length=1,
4893
+ title="BOM Reference",
4894
+ ),
4895
+ ] = None
4896
+ subjects: Annotated[
4897
+ List[Union[RefLinkType, BomLinkElementType]],
4898
+ Field(
4899
+ description=(
4900
+ "The object in the BOM identified by its bom-ref. This is often a component or service, but may be any"
4901
+ " object type supporting bom-refs."
4902
+ ),
4903
+ title="BOM References",
4904
+ ),
4905
+ ]
4906
+ annotator: Annotated[
4907
+ Union[Annotator, Annotator1, Annotator2, Annotator3],
4908
+ Field(
4909
+ description=(
4910
+ "The organization, person, component, or service which created the textual content of the annotation."
4911
+ ),
4912
+ title="Annotator",
4913
+ ),
4914
+ ]
4915
+ timestamp: Annotated[
4916
+ datetime, Field(description="The date and time (timestamp) when the annotation was created.", title="Timestamp")
4917
+ ]
4918
+ text: Annotated[str, Field(description="The textual content of the annotation.", title="Text")]
4919
+ signature: Annotated[
4920
+ Optional[Union[Signature1, Signature2, Signer]],
4921
+ Field(
4922
+ description=(
4923
+ "Enveloped signature in [JSON Signature Format"
4924
+ " (JSF)](https://cyberphone.github.io/doc/security/jsf.html)."
4925
+ ),
4926
+ title="Signature",
4927
+ ),
4928
+ ] = None
4929
+
4930
+
4156
4931
  class Formula(CycloneDXBaseModel):
4157
4932
  """
4158
4933
  Describes workflows and resources that captures rules and other aspects of how the associated BOM component or service was formed.
@@ -4206,6 +4981,6 @@ class Formula(CycloneDXBaseModel):
4206
4981
 
4207
4982
  Service.update_forward_refs()
4208
4983
  CyclonedxSoftwareBillOfMaterialsStandard.update_forward_refs()
4209
- ToolModel.update_forward_refs()
4984
+ Tools.update_forward_refs()
4210
4985
  Metadata.update_forward_refs()
4211
4986
  Pedigree.update_forward_refs()