spdx_tools.spdx3.bump_from_spdx2.actor

 1# SPDX-FileCopyrightText: 2023 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from typing import Optional
 5
 6from beartype.typing import List
 7
 8from spdx_tools.spdx3.model import CreationInfo, ExternalIdentifier, ExternalIdentifierType, Organization, Person, Tool
 9from spdx_tools.spdx3.payload import Payload
10from spdx_tools.spdx.model.actor import Actor as Spdx2_Actor
11from spdx_tools.spdx.model.actor import ActorType
12
13
14def bump_actor(
15    spdx2_actor: Spdx2_Actor, payload: Payload, document_namespace: str, creation_info: Optional[CreationInfo] = None
16) -> str:
17    name: str = spdx2_actor.name
18    email: str = spdx2_actor.email
19    actor_type: ActorType = spdx2_actor.actor_type
20
21    external_identifiers: List[ExternalIdentifier] = []
22    name_without_whitespace = "".join(name.split())
23    if email:
24        external_identifiers.append(ExternalIdentifier(ExternalIdentifierType.EMAIL, email))
25        spdx_id: str = f"{document_namespace}#SPDXRef-Actor-{name_without_whitespace}-{email}"
26    else:
27        spdx_id: str = f"{document_namespace}#SPDXRef-Actor-{name_without_whitespace}"
28
29    if spdx_id in payload.get_full_map():  # the agent/tool already exists, so we don't need to create a new one
30        return spdx_id
31
32    value_dict = {
33        "spdx_id": spdx_id,
34        "creation_info": creation_info,
35        "name": name,
36        "external_identifier": external_identifiers,
37    }
38
39    if actor_type == ActorType.PERSON:
40        agent_or_tool = Person(**value_dict)
41
42    elif actor_type == ActorType.ORGANIZATION:
43        agent_or_tool = Organization(**value_dict)
44
45    elif actor_type == ActorType.TOOL:
46        agent_or_tool = Tool(**value_dict)
47
48    else:
49        raise ValueError(f"no conversion rule defined for ActorType {actor_type}")
50
51    payload.add_element(agent_or_tool)
52
53    return spdx_id
def bump_actor( spdx2_actor: spdx_tools.spdx.model.actor.Actor, payload: spdx_tools.spdx3.payload.Payload, document_namespace: str, creation_info: Optional[spdx_tools.spdx3.model.creation_info.CreationInfo] = None) -> str:
15def bump_actor(
16    spdx2_actor: Spdx2_Actor, payload: Payload, document_namespace: str, creation_info: Optional[CreationInfo] = None
17) -> str:
18    name: str = spdx2_actor.name
19    email: str = spdx2_actor.email
20    actor_type: ActorType = spdx2_actor.actor_type
21
22    external_identifiers: List[ExternalIdentifier] = []
23    name_without_whitespace = "".join(name.split())
24    if email:
25        external_identifiers.append(ExternalIdentifier(ExternalIdentifierType.EMAIL, email))
26        spdx_id: str = f"{document_namespace}#SPDXRef-Actor-{name_without_whitespace}-{email}"
27    else:
28        spdx_id: str = f"{document_namespace}#SPDXRef-Actor-{name_without_whitespace}"
29
30    if spdx_id in payload.get_full_map():  # the agent/tool already exists, so we don't need to create a new one
31        return spdx_id
32
33    value_dict = {
34        "spdx_id": spdx_id,
35        "creation_info": creation_info,
36        "name": name,
37        "external_identifier": external_identifiers,
38    }
39
40    if actor_type == ActorType.PERSON:
41        agent_or_tool = Person(**value_dict)
42
43    elif actor_type == ActorType.ORGANIZATION:
44        agent_or_tool = Organization(**value_dict)
45
46    elif actor_type == ActorType.TOOL:
47        agent_or_tool = Tool(**value_dict)
48
49    else:
50        raise ValueError(f"no conversion rule defined for ActorType {actor_type}")
51
52    payload.add_element(agent_or_tool)
53
54    return spdx_id