spdx_tools.spdx3.model.external_reference

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from dataclasses import field
 5from enum import Enum, auto
 6
 7from beartype.typing import List, Optional
 8
 9from spdx_tools.common.typing.dataclass_with_properties import dataclass_with_properties
10from spdx_tools.common.typing.type_checks import check_types_and_set_values
11
12
13class ExternalReferenceType(Enum):
14    ALT_DOWNLOAD_LOCATION = auto()
15    ALT_WEB_PAGE = auto()
16    BINARY_ARTIFACT = auto()
17    BUILD_META = auto()
18    BUILD_SYSTEM = auto()
19    CERTIFICATION_REPORT = auto()
20    CHAT = auto()
21    COMPONENT_ANALYSIS_REPORT = auto()
22    DOCUMENTATION = auto()
23    DYNAMIC_ANALYSIS_REPORT = auto()
24    EOL_NOTICE = auto()
25    FUNDING = auto()
26    ISSUE_TRACKER = auto()
27    LICENSE = auto()
28    MAILING_LIST = auto()
29    METRICS = auto()
30    OTHER = auto()
31    PRODUCT_METADATA = auto()
32    QUALITY_ASSESSMENT_REPORT = auto()
33    RELEASE_HISTORY = auto()
34    RELEASE_NOTES = auto()
35    RISK_ASSESSMENT = auto()
36    RUNTIME_ANALYSIS_REPORT = auto()
37    SECURE_SOFTWARE_ATTESTATION = auto()
38    SECURITY_ADVERSARY_MODEL = auto()
39    SECURITY_ADVISORY = auto()
40    SECURITY_FIX = auto()
41    SECURITY_OTHER = auto()
42    SECURITY_PEN_TEST_REPORT = auto()
43    SECURITY_POLICY = auto()
44    SECURITY_THREAT_MODEL = auto()
45    SOCIAL_MEDIA = auto()
46    SOURCE_ARTIFACT = auto()
47    STATIC_ANALYSIS_REPORT = auto()
48    SUPPORT = auto()
49    VCS = auto()
50    VULNERABILITY_DISCLOSURE_REPORT = auto()
51    VULNERABILITY_EXPLOITABILITY_ASSESSMENT = auto()
52
53
54@dataclass_with_properties
55class ExternalReference:
56    external_reference_type: Optional[ExternalReferenceType] = None
57    locator: List[str] = field(default_factory=list)
58    content_type: Optional[str] = None  # placeholder for MediaType
59    comment: Optional[str] = None
60
61    def __init__(
62        self,
63        external_reference_type: Optional[ExternalReferenceType] = None,
64        locator: List[str] = None,
65        content_type: Optional[str] = None,
66        comment: Optional[str] = None,
67    ):
68        locator = [] if locator is None else locator
69        check_types_and_set_values(self, locals())
class ExternalReferenceType(enum.Enum):
14class ExternalReferenceType(Enum):
15    ALT_DOWNLOAD_LOCATION = auto()
16    ALT_WEB_PAGE = auto()
17    BINARY_ARTIFACT = auto()
18    BUILD_META = auto()
19    BUILD_SYSTEM = auto()
20    CERTIFICATION_REPORT = auto()
21    CHAT = auto()
22    COMPONENT_ANALYSIS_REPORT = auto()
23    DOCUMENTATION = auto()
24    DYNAMIC_ANALYSIS_REPORT = auto()
25    EOL_NOTICE = auto()
26    FUNDING = auto()
27    ISSUE_TRACKER = auto()
28    LICENSE = auto()
29    MAILING_LIST = auto()
30    METRICS = auto()
31    OTHER = auto()
32    PRODUCT_METADATA = auto()
33    QUALITY_ASSESSMENT_REPORT = auto()
34    RELEASE_HISTORY = auto()
35    RELEASE_NOTES = auto()
36    RISK_ASSESSMENT = auto()
37    RUNTIME_ANALYSIS_REPORT = auto()
38    SECURE_SOFTWARE_ATTESTATION = auto()
39    SECURITY_ADVERSARY_MODEL = auto()
40    SECURITY_ADVISORY = auto()
41    SECURITY_FIX = auto()
42    SECURITY_OTHER = auto()
43    SECURITY_PEN_TEST_REPORT = auto()
44    SECURITY_POLICY = auto()
45    SECURITY_THREAT_MODEL = auto()
46    SOCIAL_MEDIA = auto()
47    SOURCE_ARTIFACT = auto()
48    STATIC_ANALYSIS_REPORT = auto()
49    SUPPORT = auto()
50    VCS = auto()
51    VULNERABILITY_DISCLOSURE_REPORT = auto()
52    VULNERABILITY_EXPLOITABILITY_ASSESSMENT = auto()

Create a collection of name/value pairs.

Example enumeration:

>>> class Color(Enum):
...     RED = 1
...     BLUE = 2
...     GREEN = 3

Access them by:

  • attribute access::
>>> Color.RED
<Color.RED: 1>
  • value lookup:
>>> Color(1)
<Color.RED: 1>
  • name lookup:
>>> Color['RED']
<Color.RED: 1>

Enumerations can be iterated over, and know how many members they have:

>>> len(Color)
3
>>> list(Color)
[<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Methods can be added to enumerations, and members can have their own attributes -- see the documentation for details.

ALT_DOWNLOAD_LOCATION = <ExternalReferenceType.ALT_DOWNLOAD_LOCATION: 1>
BINARY_ARTIFACT = <ExternalReferenceType.BINARY_ARTIFACT: 3>
CERTIFICATION_REPORT = <ExternalReferenceType.CERTIFICATION_REPORT: 6>
COMPONENT_ANALYSIS_REPORT = <ExternalReferenceType.COMPONENT_ANALYSIS_REPORT: 8>
DYNAMIC_ANALYSIS_REPORT = <ExternalReferenceType.DYNAMIC_ANALYSIS_REPORT: 10>
ISSUE_TRACKER = <ExternalReferenceType.ISSUE_TRACKER: 13>
MAILING_LIST = <ExternalReferenceType.MAILING_LIST: 15>
PRODUCT_METADATA = <ExternalReferenceType.PRODUCT_METADATA: 18>
QUALITY_ASSESSMENT_REPORT = <ExternalReferenceType.QUALITY_ASSESSMENT_REPORT: 19>
RELEASE_HISTORY = <ExternalReferenceType.RELEASE_HISTORY: 20>
RELEASE_NOTES = <ExternalReferenceType.RELEASE_NOTES: 21>
RISK_ASSESSMENT = <ExternalReferenceType.RISK_ASSESSMENT: 22>
RUNTIME_ANALYSIS_REPORT = <ExternalReferenceType.RUNTIME_ANALYSIS_REPORT: 23>
SECURE_SOFTWARE_ATTESTATION = <ExternalReferenceType.SECURE_SOFTWARE_ATTESTATION: 24>
SECURITY_ADVERSARY_MODEL = <ExternalReferenceType.SECURITY_ADVERSARY_MODEL: 25>
SECURITY_ADVISORY = <ExternalReferenceType.SECURITY_ADVISORY: 26>
SECURITY_FIX = <ExternalReferenceType.SECURITY_FIX: 27>
SECURITY_OTHER = <ExternalReferenceType.SECURITY_OTHER: 28>
SECURITY_PEN_TEST_REPORT = <ExternalReferenceType.SECURITY_PEN_TEST_REPORT: 29>
SECURITY_POLICY = <ExternalReferenceType.SECURITY_POLICY: 30>
SECURITY_THREAT_MODEL = <ExternalReferenceType.SECURITY_THREAT_MODEL: 31>
SOCIAL_MEDIA = <ExternalReferenceType.SOCIAL_MEDIA: 32>
SOURCE_ARTIFACT = <ExternalReferenceType.SOURCE_ARTIFACT: 33>
STATIC_ANALYSIS_REPORT = <ExternalReferenceType.STATIC_ANALYSIS_REPORT: 34>
VULNERABILITY_DISCLOSURE_REPORT = <ExternalReferenceType.VULNERABILITY_DISCLOSURE_REPORT: 37>
VULNERABILITY_EXPLOITABILITY_ASSESSMENT = <ExternalReferenceType.VULNERABILITY_EXPLOITABILITY_ASSESSMENT: 38>
Inherited Members
enum.Enum
name
value
@dataclass_with_properties
class ExternalReference:
55@dataclass_with_properties
56class ExternalReference:
57    external_reference_type: Optional[ExternalReferenceType] = None
58    locator: List[str] = field(default_factory=list)
59    content_type: Optional[str] = None  # placeholder for MediaType
60    comment: Optional[str] = None
61
62    def __init__(
63        self,
64        external_reference_type: Optional[ExternalReferenceType] = None,
65        locator: List[str] = None,
66        content_type: Optional[str] = None,
67        comment: Optional[str] = None,
68    ):
69        locator = [] if locator is None else locator
70        check_types_and_set_values(self, locals())
ExternalReference( external_reference_type: Optional[ExternalReferenceType] = None, locator: list[str] = None, content_type: Optional[str] = None, comment: Optional[str] = None)
62    def __init__(
63        self,
64        external_reference_type: Optional[ExternalReferenceType] = None,
65        locator: List[str] = None,
66        content_type: Optional[str] = None,
67        comment: Optional[str] = None,
68    ):
69        locator = [] if locator is None else locator
70        check_types_and_set_values(self, locals())
external_reference_type: Optional[ExternalReferenceType]
47    def get_field(self) -> field_type:
48        return getattr(self, f"_{field_name}")
locator: list[str]
47    def get_field(self) -> field_type:
48        return getattr(self, f"_{field_name}")
content_type: Optional[str]
47    def get_field(self) -> field_type:
48        return getattr(self, f"_{field_name}")
comment: Optional[str]
47    def get_field(self) -> field_type:
48        return getattr(self, f"_{field_name}")