hoppr-cyclonedx-models 0.6.0__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 © 2024 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,15 +25,15 @@ THE SOFTWARE.
25
25
  --------------------------------------------------------------------------------
26
26
  This file was generated by datamodel-codegen:
27
27
  filename: bom-1.5.schema.json
28
- timestamp: 2024-07-15T17:53:40+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
33
33
 
34
34
  from datetime import datetime
35
35
  from enum import Enum
36
- from typing import Any, List, Optional, Union
36
+ from typing import List, Optional, Union
37
37
 
38
38
  from pydantic import AnyUrl, EmailStr, Extra, Field
39
39
  from typing_extensions import Annotated, Literal
@@ -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,78 +324,33 @@ 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
 
389
352
  LicenseChoice2 = Annotated[
390
- List[Any],
353
+ List[LicenseChoice21],
391
354
  Field(
392
355
  description="A tuple of exactly one SPDX License Expression.",
393
356
  max_items=1,
@@ -626,11 +589,12 @@ class Dependency(CycloneDXBaseModel):
626
589
  ),
627
590
  ]
628
591
  dependsOn: Annotated[
629
- Optional[List[RefLinkType]],
592
+ Optional[List[str]],
630
593
  Field(
631
594
  description=(
632
595
  "The bom-ref identifiers of the components or services that are dependencies of this dependency object."
633
596
  ),
597
+ min_length=1,
634
598
  title="Depends On",
635
599
  ),
636
600
  ] = None
@@ -990,19 +954,6 @@ class Advisory(CycloneDXBaseModel):
990
954
  url: Annotated[str, Field(description="Location where the advisory can be obtained.", title="URL")]
991
955
 
992
956
 
993
- Cwe = Annotated[
994
- int,
995
- Field(
996
- description=(
997
- "Integer representation of a Common Weaknesses Enumerations (CWE). For example 399 (of"
998
- " https://cwe.mitre.org/data/definitions/399.html)"
999
- ),
1000
- ge=1,
1001
- title="CWE",
1002
- ),
1003
- ]
1004
-
1005
-
1006
957
  class Severity(Enum):
1007
958
  """
1008
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.
@@ -1234,19 +1185,6 @@ class Analysis(CycloneDXBaseModel):
1234
1185
  ] = None
1235
1186
 
1236
1187
 
1237
- class Affect(CycloneDXBaseModel):
1238
- class Config:
1239
- extra = Extra.forbid
1240
-
1241
- ref: Annotated[
1242
- Union[RefLinkType, BomLinkElementType],
1243
- Field(description="References a component or service by the objects bom-ref", title="Reference"),
1244
- ]
1245
- versions: Annotated[
1246
- Optional[List], Field(description="Zero or more individual versions or range of versions.", title="Versions")
1247
- ] = None
1248
-
1249
-
1250
1188
  class AffectedStatus(Enum):
1251
1189
  """
1252
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.
@@ -1264,24 +1202,6 @@ class AffectedStatus(Enum):
1264
1202
  return next((member for member in cls if member.name in {str(value), str(value).upper()}), None)
1265
1203
 
1266
1204
 
1267
- Version = Annotated[
1268
- str, Field(description="A single version of a component or service.", max_length=1024, min_length=1)
1269
- ]
1270
-
1271
-
1272
- Range = Annotated[
1273
- str,
1274
- Field(
1275
- description=(
1276
- "A version range specified in Package URL Version Range syntax (vers) which is defined at"
1277
- " https://github.com/package-url/purl-spec/VERSION-RANGE-SPEC.rst"
1278
- ),
1279
- max_length=1024,
1280
- min_length=1,
1281
- ),
1282
- ]
1283
-
1284
-
1285
1205
  class Type4(Enum):
1286
1206
  """
1287
1207
  Learning types describing the learning problem or hybrid learning problem.
@@ -1318,7 +1238,7 @@ class Approach(CycloneDXBaseModel):
1318
1238
  ] = None
1319
1239
 
1320
1240
 
1321
- class Dataset(CycloneDXBaseModel):
1241
+ class Datasets(CycloneDXBaseModel):
1322
1242
  class Config:
1323
1243
  extra = Extra.forbid
1324
1244
 
@@ -1655,7 +1575,7 @@ class Parameter(CycloneDXBaseModel):
1655
1575
  dataType: Annotated[Optional[str], Field(description="The data type of the parameter.", title="Data type")] = None
1656
1576
 
1657
1577
 
1658
- class AlgorithmEnum(Enum):
1578
+ class Algorithm(Enum):
1659
1579
  """
1660
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".
1661
1581
  """
@@ -1785,165 +1705,565 @@ class Hash(CycloneDXBaseModel):
1785
1705
  ]
1786
1706
 
1787
1707
 
1788
- class License(CycloneDXBaseModel):
1708
+ class Licensor(CycloneDXBaseModel):
1709
+ """
1710
+ The individual or organization that grants a license to another individual or organization
1711
+ """
1712
+
1789
1713
  class Config:
1790
1714
  extra = Extra.forbid
1791
1715
 
1792
- bom_ref: Annotated[
1793
- Optional[str],
1794
- Field(
1795
- alias="bom-ref",
1796
- description=(
1797
- "An optional identifier which can be used to reference the license elsewhere in the BOM. Every bom-ref"
1798
- " MUST be unique within the BOM."
1799
- ),
1800
- min_length=1,
1801
- title="BOM Reference",
1802
- ),
1803
- ] = None
1804
- id: Annotated[
1805
- Optional[spdx.LicenseID],
1806
- Field(description="A valid SPDX license ID", examples=["Apache-2.0"], title="License ID (SPDX)"),
1807
- ] = None
1808
- name: Annotated[
1809
- 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],
1810
1722
  Field(
1811
- description="If SPDX does not define the license used, this field may be used to provide the license name",
1812
- examples=["Acme Software License"],
1813
- title="License Name",
1723
+ description="The individual, not associated with an organization, that granted the license",
1724
+ title="Licensor (Individual)",
1814
1725
  ),
1815
1726
  ] = None
1816
- text: Annotated[
1817
- Optional[Attachment],
1818
- Field(description="An optional way to include the textual content of a license.", title="License text"),
1819
- ] = None
1820
- url: Annotated[
1821
- Optional[str],
1822
- Field(
1823
- description=(
1824
- "The URL to the license file. If specified, a 'license' externalReference should also be specified for"
1825
- " completeness"
1826
- ),
1827
- examples=["https://www.apache.org/licenses/LICENSE-2.0.txt"],
1828
- title="License URL",
1829
- ),
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)"),
1830
1740
  ] = None
1831
- licensing: Annotated[
1832
- Optional[Licensing],
1741
+ individual: Annotated[
1742
+ OrganizationalContact,
1833
1743
  Field(
1834
- description=(
1835
- "Licensing details describing the licensor/licensee, license type, renewal and expiration dates, and"
1836
- " other important metadata"
1837
- ),
1838
- title="Licensing information",
1744
+ description="The individual, not associated with an organization, that granted the license",
1745
+ title="Licensor (Individual)",
1839
1746
  ),
1840
- ] = None
1841
- properties: Annotated[
1842
- Optional[List[Property]],
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],
1843
1764
  Field(
1844
- description=(
1845
- "Provides the ability to document properties in a name-value store. This provides flexibility to"
1846
- " include data not officially supported in the standard without having to use additional namespaces or"
1847
- " create extensions. Unlike key-value stores, properties support duplicate names, each potentially"
1848
- " having different values. Property names of interest to the general public are encouraged to be"
1849
- " registered in the [CycloneDX Property"
1850
- " Taxonomy](https://github.com/CycloneDX/cyclonedx-property-taxonomy). Formal registration is OPTIONAL."
1851
- ),
1852
- title="Properties",
1765
+ description="The individual, not associated with an organization, that was granted the license",
1766
+ title="Licensee (Individual)",
1853
1767
  ),
1854
1768
  ] = None
1855
1769
 
1856
1770
 
1857
- class LicenseChoice1(CycloneDXBaseModel):
1771
+ class Licensee1(CycloneDXBaseModel):
1772
+ """
1773
+ The individual or organization for which a license was granted to
1774
+ """
1775
+
1858
1776
  class Config:
1859
1777
  extra = Extra.forbid
1860
1778
 
1861
- license: License
1779
+ organization: Annotated[
1780
+ Optional[OrganizationalEntity],
1781
+ Field(description="The organization that was granted the license", title="Licensee (Organization)"),
1782
+ ] = None
1783
+ individual: Annotated[
1784
+ OrganizationalContact,
1785
+ Field(
1786
+ description="The individual, not associated with an organization, that was granted the license",
1787
+ title="Licensee (Individual)",
1788
+ ),
1789
+ ]
1862
1790
 
1863
1791
 
1864
- class Commit(CycloneDXBaseModel):
1792
+ class Purchaser(CycloneDXBaseModel):
1865
1793
  """
1866
- Specifies an individual commit
1794
+ The individual or organization that purchased the license
1867
1795
  """
1868
1796
 
1869
1797
  class Config:
1870
1798
  extra = Extra.forbid
1871
1799
 
1872
- uid: Annotated[
1873
- Optional[str],
1874
- Field(
1875
- description=(
1876
- "A unique identifier of the commit. This may be version control specific. For example, Subversion uses"
1877
- " revision numbers whereas git uses commit hashes."
1878
- ),
1879
- title="UID",
1880
- ),
1881
- ] = None
1882
- url: Annotated[
1883
- 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],
1884
1806
  Field(
1885
- description="The URL to the commit. This URL will typically point to a commit in a version control system.",
1886
- title="URL",
1807
+ description="The individual, not associated with an organization, that purchased the license",
1808
+ title="Purchaser (Individual)",
1887
1809
  ),
1888
1810
  ] = None
1889
- author: Annotated[
1890
- Optional[IdentifiableAction],
1891
- Field(description="The author who created the changes in the commit", title="Author"),
1892
- ] = None
1893
- committer: Annotated[
1894
- Optional[IdentifiableAction],
1895
- Field(description="The person who committed or pushed the commit", title="Committer"),
1896
- ] = None
1897
- message: Annotated[
1898
- Optional[str], Field(description="The text description of the contents of the commit", title="Message")
1899
- ] = None
1900
1811
 
1901
1812
 
1902
- class Patch(CycloneDXBaseModel):
1813
+ class Purchaser1(CycloneDXBaseModel):
1903
1814
  """
1904
- Specifies an individual patch
1815
+ The individual or organization that purchased the license
1905
1816
  """
1906
1817
 
1907
1818
  class Config:
1908
1819
  extra = Extra.forbid
1909
1820
 
1910
- type: Annotated[
1911
- Type1,
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,
1912
1827
  Field(
1913
- description=(
1914
- "Specifies the purpose for the patch including the resolution of defects, security issues, or new"
1915
- " behavior or functionality.\n\n* __unofficial__ = A patch which is not developed by the creators or"
1916
- " maintainers of the software being patched. Refer to"
1917
- " [https://en.wikipedia.org/wiki/Unofficial_patch](https://en.wikipedia.org/wiki/Unofficial_patch)\n*"
1918
- " __monkey__ = A patch which dynamically modifies runtime behavior. Refer to"
1919
- " [https://en.wikipedia.org/wiki/Monkey_patch](https://en.wikipedia.org/wiki/Monkey_patch)\n*"
1920
- " __backport__ = A patch which takes code from a newer version of software and applies it to older"
1921
- " versions of the same software. Refer to"
1922
- " [https://en.wikipedia.org/wiki/Backporting](https://en.wikipedia.org/wiki/Backporting)\n*"
1923
- " __cherry-pick__ = A patch created by selectively applying commits from other versions or branches of"
1924
- " the same software."
1925
- ),
1926
- title="Type",
1828
+ description="The individual, not associated with an organization, that purchased the license",
1829
+ title="Purchaser (Individual)",
1927
1830
  ),
1928
1831
  ]
1929
- diff: Annotated[
1930
- Optional[Diff],
1931
- Field(
1932
- description=(
1933
- "The patch file (or diff) that show changes. Refer to"
1934
- " [https://en.wikipedia.org/wiki/Diff](https://en.wikipedia.org/wiki/Diff)"
1935
- ),
1936
- title="Diff",
1937
- ),
1938
- ] = None
1939
- resolves: Annotated[
1940
- Optional[List[Issue]], Field(description="A collection of issues the patch resolves", title="Resolves")
1941
- ] = None
1942
1832
 
1943
1833
 
1944
- class ExternalReference(CycloneDXBaseModel):
1834
+ class Licensing(CycloneDXBaseModel):
1945
1835
  """
1946
- External references provide a way to document systems, sites, and information that may be relevant, but are not included with the BOM. They may also establish specific relationships within or external to the BOM.
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
2225
+ """
2226
+
2227
+ class Config:
2228
+ extra = Extra.forbid
2229
+
2230
+ type: Annotated[
2231
+ Type1,
2232
+ Field(
2233
+ description=(
2234
+ "Specifies the purpose for the patch including the resolution of defects, security issues, or new"
2235
+ " behavior or functionality.\n\n* __unofficial__ = A patch which is not developed by the creators or"
2236
+ " maintainers of the software being patched. Refer to"
2237
+ " [https://en.wikipedia.org/wiki/Unofficial_patch](https://en.wikipedia.org/wiki/Unofficial_patch)\n*"
2238
+ " __monkey__ = A patch which dynamically modifies runtime behavior. Refer to"
2239
+ " [https://en.wikipedia.org/wiki/Monkey_patch](https://en.wikipedia.org/wiki/Monkey_patch)\n*"
2240
+ " __backport__ = A patch which takes code from a newer version of software and applies it to older"
2241
+ " versions of the same software. Refer to"
2242
+ " [https://en.wikipedia.org/wiki/Backporting](https://en.wikipedia.org/wiki/Backporting)\n*"
2243
+ " __cherry-pick__ = A patch created by selectively applying commits from other versions or branches of"
2244
+ " the same software."
2245
+ ),
2246
+ title="Type",
2247
+ ),
2248
+ ]
2249
+ diff: Annotated[
2250
+ Optional[Diff],
2251
+ Field(
2252
+ description=(
2253
+ "The patch file (or diff) that show changes. Refer to"
2254
+ " [https://en.wikipedia.org/wiki/Diff](https://en.wikipedia.org/wiki/Diff)"
2255
+ ),
2256
+ title="Diff",
2257
+ ),
2258
+ ] = None
2259
+ resolves: Annotated[
2260
+ Optional[List[Issue]], Field(description="A collection of issues the patch resolves", title="Resolves")
2261
+ ] = None
2262
+
2263
+
2264
+ class ExternalReference(CycloneDXBaseModel):
2265
+ """
2266
+ External references provide a way to document systems, sites, and information that may be relevant, but are not included with the BOM. They may also establish specific relationships within or external to the BOM.
1947
2267
  """
1948
2268
 
1949
2269
  class Config:
@@ -2091,35 +2411,95 @@ class Rating(CycloneDXBaseModel):
2091
2411
  vector: Annotated[
2092
2412
  Optional[str],
2093
2413
  Field(
2094
- 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,
2095
2462
  ),
2096
2463
  ] = None
2097
- justification: Annotated[
2098
- Optional[str],
2099
- Field(description="An optional reason for rating the vulnerability as it was", title="Justification"),
2100
- ] = None
2464
+ status: Annotated[
2465
+ Optional[AffectedStatus], Field(description="The vulnerability status for the version or range of versions.")
2466
+ ] = AffectedStatus.affected
2101
2467
 
2102
2468
 
2103
- class Credits(CycloneDXBaseModel):
2104
- """
2105
- Individuals or organizations credited with the discovery of the vulnerability.
2106
- """
2107
-
2469
+ class Versions1(CycloneDXBaseModel):
2108
2470
  class Config:
2109
2471
  extra = Extra.forbid
2110
2472
 
2111
- organizations: Annotated[
2112
- Optional[List[OrganizationalEntity]],
2113
- 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)
2114
2475
  ] = None
2115
- individuals: Annotated[
2116
- Optional[List[OrganizationalContact]],
2476
+ range: Annotated[
2477
+ str,
2117
2478
  Field(
2118
2479
  description=(
2119
- "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"
2120
2482
  ),
2121
- title="Individuals",
2483
+ max_length=1024,
2484
+ min_length=1,
2122
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"),
2123
2503
  ] = None
2124
2504
 
2125
2505
 
@@ -2173,14 +2553,22 @@ class Considerations(CycloneDXBaseModel):
2173
2553
  ] = None
2174
2554
 
2175
2555
 
2176
- class DataGovernanceResponsibleParty(CycloneDXBaseModel):
2556
+ class DataGovernanceResponsibleParty1(CycloneDXBaseModel):
2177
2557
  class Config:
2178
2558
  extra = Extra.forbid
2179
2559
 
2180
- organization: Annotated[Optional[OrganizationalEntity], Field(title="Organization")] = None
2560
+ organization: Annotated[OrganizationalEntity, Field(title="Organization")]
2181
2561
  contact: Annotated[Optional[OrganizationalContact], Field(title="Individual")] = None
2182
2562
 
2183
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
+
2184
2572
  class GraphicsCollection(CycloneDXBaseModel):
2185
2573
  """
2186
2574
  A collection of graphics that represent various measurements.
@@ -2210,7 +2598,7 @@ class Step(CycloneDXBaseModel):
2210
2598
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2211
2599
 
2212
2600
 
2213
- class ResourceReferenceChoice(CycloneDXBaseModel):
2601
+ class ResourceReferenceChoice1(CycloneDXBaseModel):
2214
2602
  """
2215
2603
  A reference to a locally defined resource (e.g., a bom-ref) or an externally accessible resource.
2216
2604
  """
@@ -2219,20 +2607,38 @@ class ResourceReferenceChoice(CycloneDXBaseModel):
2219
2607
  extra = Extra.forbid
2220
2608
 
2221
2609
  ref: Annotated[
2222
- Optional[Union[RefLinkType, BomLinkElementType]],
2610
+ Union[RefLinkType, BomLinkElementType],
2223
2611
  Field(description="References an object by its bom-ref attribute", title="BOM Reference"),
2224
- ] = None
2612
+ ]
2225
2613
  externalReference: Annotated[
2226
2614
  Optional[ExternalReference],
2227
2615
  Field(description="Reference to an externally accessible resource.", title="External reference"),
2228
2616
  ] = None
2229
2617
 
2230
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
+
2231
2637
  class Signer(CycloneDXBaseModel):
2232
2638
  class Config:
2233
2639
  extra = Extra.forbid
2234
2640
 
2235
- algorithm: Union[AlgorithmEnum, AnyUrl]
2641
+ algorithm: Union[Algorithm, AnyUrl]
2236
2642
  keyId: Annotated[
2237
2643
  Optional[str],
2238
2644
  Field(description="Optional. Application specific string identifying the signature key.", title="Key ID"),
@@ -2329,21 +2735,21 @@ class DataGovernance(CycloneDXBaseModel):
2329
2735
  extra = Extra.forbid
2330
2736
 
2331
2737
  custodians: Annotated[
2332
- Optional[List[DataGovernanceResponsibleParty]],
2738
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2333
2739
  Field(
2334
2740
  description="Data custodians are responsible for the safe custody, transport, and storage of data.",
2335
2741
  title="Data Custodians",
2336
2742
  ),
2337
2743
  ] = None
2338
2744
  stewards: Annotated[
2339
- Optional[List[DataGovernanceResponsibleParty]],
2745
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2340
2746
  Field(
2341
2747
  description="Data stewards are responsible for data content, context, and associated business rules.",
2342
2748
  title="Data Stewards",
2343
2749
  ),
2344
2750
  ] = None
2345
2751
  owners: Annotated[
2346
- Optional[List[DataGovernanceResponsibleParty]],
2752
+ Optional[List[Union[DataGovernanceResponsibleParty1, DataGovernanceResponsibleParty2]]],
2347
2753
  Field(description="Data owners are concerned with risk and appropriate access to data.", title="Data Owners"),
2348
2754
  ] = None
2349
2755
 
@@ -2390,7 +2796,7 @@ class Workspace(CycloneDXBaseModel):
2390
2796
  Optional[str], Field(description="A description of the resource instance.", title="Description")
2391
2797
  ] = None
2392
2798
  resourceReferences: Annotated[
2393
- Optional[List[ResourceReferenceChoice]],
2799
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
2394
2800
  Field(
2395
2801
  description="References to component or service resources that are used to realize the resource instance.",
2396
2802
  title="Resource references",
@@ -2430,46 +2836,229 @@ class Workspace(CycloneDXBaseModel):
2430
2836
  title="Volume request",
2431
2837
  ),
2432
2838
  ] = None
2433
- volume: Annotated[
2434
- 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]],
2435
3052
  Field(
2436
- description="Information about the actual volume instance allocated to the workspace.",
2437
- examples=["see https://kubernetes.io/docs/concepts/storage/persistent-volumes/"],
2438
- title="Volume",
3053
+ description="Inputs that have the form of parameters with names and values.",
3054
+ title="Environment variables",
2439
3055
  ),
2440
- ] = None
2441
- properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2442
-
2443
-
2444
- class Event(CycloneDXBaseModel):
2445
- """
2446
- Represents something that happened that may trigger a response.
2447
- """
2448
-
2449
- class Config:
2450
- extra = Extra.forbid
2451
-
2452
- uid: Annotated[
2453
- Optional[str], Field(description="The unique identifier of the event.", title="Unique Identifier (UID)")
2454
- ] = None
2455
- description: Annotated[Optional[str], Field(description="A description of the event.", title="Description")] = None
2456
- timeReceived: Annotated[
2457
- Optional[datetime],
2458
- Field(description="The date and time (timestamp) when the event was received.", title="Time Received"),
2459
- ] = None
2460
- data: Annotated[Optional[Attachment], Field(description="Encoding of the raw event data.", title="Data")] = None
2461
- source: Annotated[
2462
- Optional[ResourceReferenceChoice],
2463
- Field(description="References the component or service that was the source of the event", title="Source"),
2464
- ] = None
2465
- target: Annotated[
2466
- Optional[ResourceReferenceChoice],
2467
- Field(description="References the component or service that was the target of the event", title="Target"),
2468
- ] = None
3056
+ ]
3057
+ data: Annotated[Optional[Attachment], Field(description="Inputs that have the form of data.", title="Data")] = None
2469
3058
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2470
3059
 
2471
3060
 
2472
- class InputType(CycloneDXBaseModel):
3061
+ class InputType4(CycloneDXBaseModel):
2473
3062
  """
2474
3063
  Type that represents various input data types and formats.
2475
3064
  """
@@ -2478,7 +3067,7 @@ class InputType(CycloneDXBaseModel):
2478
3067
  extra = Extra.forbid
2479
3068
 
2480
3069
  source: Annotated[
2481
- Optional[ResourceReferenceChoice],
3070
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2482
3071
  Field(
2483
3072
  description=(
2484
3073
  "A references to the component or service that provided the input to the task (e.g., reference to a"
@@ -2489,7 +3078,7 @@ class InputType(CycloneDXBaseModel):
2489
3078
  ),
2490
3079
  ] = None
2491
3080
  target: Annotated[
2492
- Optional[ResourceReferenceChoice],
3081
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2493
3082
  Field(
2494
3083
  description=(
2495
3084
  "A reference to the component or service that received or stored the input if not the task itself"
@@ -2500,7 +3089,7 @@ class InputType(CycloneDXBaseModel):
2500
3089
  ),
2501
3090
  ] = None
2502
3091
  resource: Annotated[
2503
- Optional[ResourceReferenceChoice],
3092
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2504
3093
  Field(
2505
3094
  description=(
2506
3095
  "A reference to an independent resource provided as an input to a task by the workflow runtime."
@@ -2526,24 +3115,66 @@ class InputType(CycloneDXBaseModel):
2526
3115
  title="Environment variables",
2527
3116
  ),
2528
3117
  ] = None
2529
- 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
2530
3161
  properties: Annotated[Optional[List[Property]], Field(title="Properties")] = None
2531
3162
 
2532
3163
 
2533
- class OutputType(CycloneDXBaseModel):
3164
+ class OutputType2(CycloneDXBaseModel):
2534
3165
  class Config:
2535
3166
  extra = Extra.forbid
2536
3167
 
2537
3168
  type: Annotated[Optional[Type7], Field(description="Describes the type of data output.", title="Type")] = None
2538
3169
  source: Annotated[
2539
- Optional[ResourceReferenceChoice],
3170
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2540
3171
  Field(
2541
3172
  description="Component or service that generated or provided the output from the task (e.g., a build tool)",
2542
3173
  title="Source",
2543
3174
  ),
2544
3175
  ] = None
2545
3176
  target: Annotated[
2546
- Optional[ResourceReferenceChoice],
3177
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2547
3178
  Field(
2548
3179
  description=(
2549
3180
  "Component or service that received the output from the task (e.g., reference to an artifactory service"
@@ -2554,7 +3185,7 @@ class OutputType(CycloneDXBaseModel):
2554
3185
  ),
2555
3186
  ] = None
2556
3187
  resource: Annotated[
2557
- Optional[ResourceReferenceChoice],
3188
+ Optional[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]],
2558
3189
  Field(
2559
3190
  description="A reference to an independent resource generated as output by the task.",
2560
3191
  examples=["configuration file", "source code", "scanning service"],
@@ -2562,6 +3193,48 @@ class OutputType(CycloneDXBaseModel):
2562
3193
  ),
2563
3194
  ] = None
2564
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")]
2565
3238
  environmentVars: Annotated[
2566
3239
  Optional[List[Union[Property, str]]],
2567
3240
  Field(
@@ -2738,7 +3411,7 @@ class Trigger(CycloneDXBaseModel):
2738
3411
  Optional[str], Field(description="A description of the resource instance.", title="Description")
2739
3412
  ] = None
2740
3413
  resourceReferences: Annotated[
2741
- Optional[List[ResourceReferenceChoice]],
3414
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
2742
3415
  Field(
2743
3416
  description="References to component or service resources that are used to realize the resource instance.",
2744
3417
  title="Resource references",
@@ -2757,7 +3430,7 @@ class Trigger(CycloneDXBaseModel):
2757
3430
  Field(description="The date and time (timestamp) when the trigger was activated.", title="Time activated"),
2758
3431
  ] = None
2759
3432
  inputs: Annotated[
2760
- Optional[List[InputType]],
3433
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
2761
3434
  Field(
2762
3435
  description="Represents resources and data brought into a task at runtime by executor or task commands",
2763
3436
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -2765,7 +3438,7 @@ class Trigger(CycloneDXBaseModel):
2765
3438
  ),
2766
3439
  ] = None
2767
3440
  outputs: Annotated[
2768
- Optional[List[OutputType]],
3441
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
2769
3442
  Field(
2770
3443
  description="Represents resources and data output from a task at runtime by executor or task commands",
2771
3444
  examples=["a log file or metrics data produced by the task"],
@@ -3012,52 +3685,6 @@ class Compositions(CycloneDXBaseModel):
3012
3685
  ] = None
3013
3686
 
3014
3687
 
3015
- class Annotations(CycloneDXBaseModel):
3016
- """
3017
- A comment, note, explanation, or similar textual content which provides additional context to the object(s) being annotated.
3018
- """
3019
-
3020
- class Config:
3021
- extra = Extra.forbid
3022
-
3023
- bom_ref: Annotated[
3024
- Optional[str],
3025
- Field(
3026
- alias="bom-ref",
3027
- description=(
3028
- "An optional identifier which can be used to reference the annotation elsewhere in the BOM. Every"
3029
- " bom-ref MUST be unique within the BOM."
3030
- ),
3031
- min_length=1,
3032
- title="BOM Reference",
3033
- ),
3034
- ] = None
3035
- subjects: Annotated[
3036
- List[Union[RefLinkType, BomLinkElementType]],
3037
- Field(
3038
- description=(
3039
- "The object in the BOM identified by its bom-ref. This is often a component or service, but may be any"
3040
- " object type supporting bom-refs."
3041
- ),
3042
- title="BOM References",
3043
- ),
3044
- ]
3045
- timestamp: Annotated[
3046
- datetime, Field(description="The date and time (timestamp) when the annotation was created.", title="Timestamp")
3047
- ]
3048
- text: Annotated[str, Field(description="The textual content of the annotation.", title="Text")]
3049
- signature: Annotated[
3050
- Optional[Union[Signature1, Signature2, Signer]],
3051
- Field(
3052
- description=(
3053
- "Enveloped signature in [JSON Signature Format"
3054
- " (JSF)](https://cyberphone.github.io/doc/security/jsf.html)."
3055
- ),
3056
- title="Signature",
3057
- ),
3058
- ] = None
3059
-
3060
-
3061
3688
  class ModelParameters(CycloneDXBaseModel):
3062
3689
  """
3063
3690
  Hyper-parameters for construction of the model.
@@ -3098,7 +3725,7 @@ class ModelParameters(CycloneDXBaseModel):
3098
3725
  ),
3099
3726
  ] = None
3100
3727
  datasets: Annotated[
3101
- Optional[List[Union[ComponentData, Dataset]]],
3728
+ Optional[List[Union[ComponentData, Datasets]]],
3102
3729
  Field(description="The datasets used to train and evaluate the model.", title="Datasets"),
3103
3730
  ] = None
3104
3731
  inputs: Annotated[
@@ -3196,7 +3823,7 @@ class Task(CycloneDXBaseModel):
3196
3823
  Optional[str], Field(description="A description of the resource instance.", title="Description")
3197
3824
  ] = None
3198
3825
  resourceReferences: Annotated[
3199
- Optional[List[ResourceReferenceChoice]],
3826
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
3200
3827
  Field(
3201
3828
  description="References to component or service resources that are used to realize the resource instance.",
3202
3829
  title="Resource references",
@@ -3219,7 +3846,7 @@ class Task(CycloneDXBaseModel):
3219
3846
  ),
3220
3847
  ] = None
3221
3848
  inputs: Annotated[
3222
- Optional[List[InputType]],
3849
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
3223
3850
  Field(
3224
3851
  description="Represents resources and data brought into a task at runtime by executor or task commands",
3225
3852
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -3227,7 +3854,7 @@ class Task(CycloneDXBaseModel):
3227
3854
  ),
3228
3855
  ] = None
3229
3856
  outputs: Annotated[
3230
- Optional[List[OutputType]],
3857
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
3231
3858
  Field(
3232
3859
  description="Represents resources and data output from a task at runtime by executor or task commands",
3233
3860
  examples=["a log file or metrics data produced by the task"],
@@ -3290,7 +3917,7 @@ class Workflow(CycloneDXBaseModel):
3290
3917
  Optional[str], Field(description="A description of the resource instance.", title="Description")
3291
3918
  ] = None
3292
3919
  resourceReferences: Annotated[
3293
- Optional[List[ResourceReferenceChoice]],
3920
+ Optional[List[Union[ResourceReferenceChoice1, ResourceReferenceChoice2]]],
3294
3921
  Field(
3295
3922
  description="References to component or service resources that are used to realize the resource instance.",
3296
3923
  title="Resource references",
@@ -3327,7 +3954,7 @@ class Workflow(CycloneDXBaseModel):
3327
3954
  ),
3328
3955
  ] = None
3329
3956
  inputs: Annotated[
3330
- Optional[List[InputType]],
3957
+ Optional[List[Union[InputType1, InputType2, InputType3, InputType4]]],
3331
3958
  Field(
3332
3959
  description="Represents resources and data brought into a task at runtime by executor or task commands",
3333
3960
  examples=["a `configuration` file which was declared as a local `component` or `externalReference`"],
@@ -3335,7 +3962,7 @@ class Workflow(CycloneDXBaseModel):
3335
3962
  ),
3336
3963
  ] = None
3337
3964
  outputs: Annotated[
3338
- Optional[List[OutputType]],
3965
+ Optional[List[Union[OutputType1, OutputType2, OutputType3]]],
3339
3966
  Field(
3340
3967
  description="Represents resources and data output from a task at runtime by executor or task commands",
3341
3968
  examples=["a log file or metrics data produced by the task"],
@@ -3521,7 +4148,7 @@ class CyclonedxSoftwareBillOfMaterialsStandard(CycloneDXBaseModel):
3521
4148
  ] = None
3522
4149
 
3523
4150
 
3524
- class ToolModel(CycloneDXBaseModel):
4151
+ class Tools(CycloneDXBaseModel):
3525
4152
  """
3526
4153
  The tool(s) used in the creation of the BOM.
3527
4154
  """
@@ -3557,9 +4184,9 @@ class Metadata(CycloneDXBaseModel):
3557
4184
  Field(description="The date and time (timestamp) when the BOM was created.", title="Timestamp"),
3558
4185
  ] = None
3559
4186
  lifecycles: Annotated[
3560
- Optional[List[Union[Lifecycle, Lifecycle1]]], Field(description="", title="Lifecycles")
4187
+ Optional[List[Union[Lifecycles, Lifecycles1]]], Field(description="", title="Lifecycles")
3561
4188
  ] = None
3562
- tools: Optional[Union[ToolModel, List[Tool]]] = None
4189
+ tools: Optional[Union[Tools, List[Tool]]] = None
3563
4190
  authors: Annotated[
3564
4191
  Optional[List[OrganizationalContact]],
3565
4192
  Field(
@@ -3982,7 +4609,7 @@ class Component(CycloneDXBaseModel):
3982
4609
  ] = None
3983
4610
 
3984
4611
 
3985
- class Tool1(CycloneDXBaseModel):
4612
+ class Tools1(CycloneDXBaseModel):
3986
4613
  """
3987
4614
  The tool(s) used to identify, confirm, or score the vulnerability.
3988
4615
  """
@@ -4056,13 +4683,14 @@ class Vulnerability(CycloneDXBaseModel):
4056
4683
  Optional[List[Rating]], Field(description="List of vulnerability ratings", title="Ratings")
4057
4684
  ] = None
4058
4685
  cwes: Annotated[
4059
- Optional[List[Cwe]],
4686
+ Optional[List[int]],
4060
4687
  Field(
4061
4688
  description=(
4062
4689
  "List of Common Weaknesses Enumerations (CWEs) codes that describes this vulnerability. For example 399"
4063
4690
  " (of https://cwe.mitre.org/data/definitions/399.html)"
4064
4691
  ),
4065
4692
  examples=[399],
4693
+ ge=1,
4066
4694
  title="CWEs",
4067
4695
  ),
4068
4696
  ] = None
@@ -4141,7 +4769,7 @@ class Vulnerability(CycloneDXBaseModel):
4141
4769
  title="Credits",
4142
4770
  ),
4143
4771
  ] = None
4144
- tools: Optional[Union[Tool1, List[Tool]]] = None
4772
+ tools: Optional[Union[Tools1, List[Tool]]] = None
4145
4773
  analysis: Annotated[
4146
4774
  Optional[Analysis],
4147
4775
  Field(
@@ -4171,6 +4799,135 @@ class Vulnerability(CycloneDXBaseModel):
4171
4799
  ] = None
4172
4800
 
4173
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
+
4174
4931
  class Formula(CycloneDXBaseModel):
4175
4932
  """
4176
4933
  Describes workflows and resources that captures rules and other aspects of how the associated BOM component or service was formed.
@@ -4224,6 +4981,6 @@ class Formula(CycloneDXBaseModel):
4224
4981
 
4225
4982
  Service.update_forward_refs()
4226
4983
  CyclonedxSoftwareBillOfMaterialsStandard.update_forward_refs()
4227
- ToolModel.update_forward_refs()
4984
+ Tools.update_forward_refs()
4228
4985
  Metadata.update_forward_refs()
4229
4986
  Pedigree.update_forward_refs()