spdx_tools.spdx.model.relationship_filters

 1# SPDX-FileCopyrightText: 2022 spdx contributors
 2#
 3# SPDX-License-Identifier: Apache-2.0
 4from beartype.typing import List
 5
 6from spdx_tools.spdx.model import Document, Package, Relationship, RelationshipType
 7
 8
 9def find_package_contains_file_relationships(document: Document, package: Package) -> List[Relationship]:
10    file_ids_in_document = [file.spdx_id for file in document.files]
11    package_contains_relationships = filter_by_type_and_origin(
12        document.relationships, RelationshipType.CONTAINS, package.spdx_id
13    )
14    return [
15        relationship
16        for relationship in package_contains_relationships
17        if relationship.related_spdx_element_id in file_ids_in_document
18    ]
19
20
21def find_file_contained_by_package_relationships(document: Document, package: Package) -> List[Relationship]:
22    file_ids_in_document = [file.spdx_id for file in document.files]
23    contained_by_package_relationships = filter_by_type_and_target(
24        document.relationships, RelationshipType.CONTAINED_BY, package.spdx_id
25    )
26    return [
27        relationship
28        for relationship in contained_by_package_relationships
29        if relationship.spdx_element_id in file_ids_in_document
30    ]
31
32
33def filter_by_type_and_target(
34    relationships: List[Relationship], relationship_type: RelationshipType, target_id: str
35) -> List[Relationship]:
36    return [
37        relationship
38        for relationship in relationships
39        if relationship.relationship_type == relationship_type and relationship.related_spdx_element_id == target_id
40    ]
41
42
43def filter_by_type_and_origin(
44    relationships: List[Relationship], relationship_type: RelationshipType, origin_id: str
45) -> List[Relationship]:
46    return [
47        relationship
48        for relationship in relationships
49        if relationship.relationship_type == relationship_type and relationship.spdx_element_id == origin_id
50    ]
def find_package_contains_file_relationships( document: spdx_tools.spdx.model.document.Document, package: spdx_tools.spdx.model.package.Package) -> list[spdx_tools.spdx.model.relationship.Relationship]:
10def find_package_contains_file_relationships(document: Document, package: Package) -> List[Relationship]:
11    file_ids_in_document = [file.spdx_id for file in document.files]
12    package_contains_relationships = filter_by_type_and_origin(
13        document.relationships, RelationshipType.CONTAINS, package.spdx_id
14    )
15    return [
16        relationship
17        for relationship in package_contains_relationships
18        if relationship.related_spdx_element_id in file_ids_in_document
19    ]
def find_file_contained_by_package_relationships( document: spdx_tools.spdx.model.document.Document, package: spdx_tools.spdx.model.package.Package) -> list[spdx_tools.spdx.model.relationship.Relationship]:
22def find_file_contained_by_package_relationships(document: Document, package: Package) -> List[Relationship]:
23    file_ids_in_document = [file.spdx_id for file in document.files]
24    contained_by_package_relationships = filter_by_type_and_target(
25        document.relationships, RelationshipType.CONTAINED_BY, package.spdx_id
26    )
27    return [
28        relationship
29        for relationship in contained_by_package_relationships
30        if relationship.spdx_element_id in file_ids_in_document
31    ]
def filter_by_type_and_target( relationships: list[spdx_tools.spdx.model.relationship.Relationship], relationship_type: spdx_tools.spdx.model.relationship.RelationshipType, target_id: str) -> list[spdx_tools.spdx.model.relationship.Relationship]:
34def filter_by_type_and_target(
35    relationships: List[Relationship], relationship_type: RelationshipType, target_id: str
36) -> List[Relationship]:
37    return [
38        relationship
39        for relationship in relationships
40        if relationship.relationship_type == relationship_type and relationship.related_spdx_element_id == target_id
41    ]
def filter_by_type_and_origin( relationships: list[spdx_tools.spdx.model.relationship.Relationship], relationship_type: spdx_tools.spdx.model.relationship.RelationshipType, origin_id: str) -> list[spdx_tools.spdx.model.relationship.Relationship]:
44def filter_by_type_and_origin(
45    relationships: List[Relationship], relationship_type: RelationshipType, origin_id: str
46) -> List[Relationship]:
47    return [
48        relationship
49        for relationship in relationships
50        if relationship.relationship_type == relationship_type and relationship.spdx_element_id == origin_id
51    ]