|
| 1 | +import logging |
| 2 | +import sys |
1 | 3 | import uuid
|
2 | 4 |
|
3 | 5 | from networkx import DiGraph, shortest_path
|
4 | 6 | from spdx_tools.spdx.model.document import CreationInfo
|
| 7 | +from spdx_tools.spdx.model.document import Document as SpdxDocument |
5 | 8 | from spdx_tools.spdx.model.file import File
|
6 | 9 | from spdx_tools.spdx.model.package import Package
|
7 | 10 | from spdx_tools.spdx.model.snippet import Snippet
|
| 11 | +from spdx_tools.spdx.parser.error import SPDXParsingError |
| 12 | +from spdx_tools.spdx.parser.parse_anything import parse_file |
| 13 | +from spdx_tools.spdx.validation.document_validator import validate_full_spdx_document |
8 | 14 |
|
9 | 15 | from ..opossum.opossum_file import (
|
10 | 16 | ExternalAttributionSource,
|
|
27 | 33 | SPDX_PACKAGE_IDENTIFIER,
|
28 | 34 | SPDX_SNIPPET_IDENTIFIER,
|
29 | 35 | )
|
| 36 | +from .graph_generation import generate_graph_from_spdx |
30 | 37 | from .helper_methods import (
|
31 | 38 | _create_file_path_from_graph_path,
|
32 | 39 | _get_source_for_graph_traversal,
|
33 | 40 | _node_represents_a_spdx_element,
|
34 | 41 | _replace_node_ids_with_labels_and_add_resource_type,
|
35 | 42 | _weakly_connected_component_sub_graphs,
|
36 | 43 | )
|
| 44 | +from .tree_generation import generate_tree_from_graph |
| 45 | + |
| 46 | + |
| 47 | +def convert_spdx_to_opossum_information(filename: str) -> OpossumInformation: |
| 48 | + try: |
| 49 | + document: SpdxDocument = parse_file(filename) |
| 50 | + |
| 51 | + except SPDXParsingError as err: |
| 52 | + log_string = "\n".join( |
| 53 | + ["There have been issues while parsing the provided document:"] |
| 54 | + + [message for message in err.get_messages()] |
| 55 | + ) |
| 56 | + logging.error(log_string) |
| 57 | + sys.exit(1) |
| 58 | + validation_messages = validate_full_spdx_document(document) |
| 59 | + if validation_messages: |
| 60 | + logging.warning( |
| 61 | + "The given SPDX document is not valid, this might cause " |
| 62 | + "issues with the conversion." |
| 63 | + ) |
| 64 | + graph = generate_graph_from_spdx(document) |
| 65 | + tree = generate_tree_from_graph(graph) |
| 66 | + opossum_information = convert_tree_to_opossum_information(tree) |
| 67 | + return opossum_information |
37 | 68 |
|
38 | 69 |
|
39 | 70 | def convert_tree_to_opossum_information(tree: DiGraph) -> OpossumInformation:
|
|
0 commit comments