|
9 | 9 | # See the License for the specific language governing permissions and
|
10 | 10 | # limitations under the License.
|
11 | 11 | from typing import Optional
|
12 |
| - |
13 |
| -from rdflib import URIRef, Graph, RDFS, DOAP |
| 12 | +from rdflib import URIRef, Graph, RDFS, DOAP, Literal |
14 | 13 |
|
15 | 14 | from spdx.datetime_conversions import datetime_from_str
|
16 | 15 | from spdx.model.package import Package, PackagePurpose, ExternalPackageRef, PackageVerificationCode, \
|
@@ -47,7 +46,7 @@ def parse_package(package_node: URIRef, graph: Graph, doc_namespace: str) -> Pac
|
47 | 46 |
|
48 | 47 | external_package_refs = []
|
49 | 48 | for (_, _, external_package_ref_node) in graph.triples((package_node, SPDX_NAMESPACE.externalRef, None)):
|
50 |
| - external_package_refs.append(parse_external_package_ref(external_package_ref_node, graph)) |
| 49 | + external_package_refs.append(parse_external_package_ref(external_package_ref_node, graph, doc_namespace)) |
51 | 50 | files_analyzed = bool(graph.value(package_node, SPDX_NAMESPACE.filesAnalyzed, default=True))
|
52 | 51 | license_concluded = parse_literal_or_no_assertion_or_none(
|
53 | 52 | logger, graph, package_node, SPDX_NAMESPACE.licenseConcluded,
|
@@ -121,18 +120,25 @@ def parse_package_verification_code(package_verification_code_node: URIRef, grap
|
121 | 120 | return package_verification_code
|
122 | 121 |
|
123 | 122 |
|
124 |
| -def parse_external_package_ref(external_package_ref_node: URIRef, graph: Graph) -> ExternalPackageRef: |
| 123 | +def parse_external_package_ref(external_package_ref_node: URIRef, graph: Graph, doc_namespace) -> ExternalPackageRef: |
125 | 124 | logger = Logger()
|
126 | 125 | ref_locator = parse_literal(logger, graph, external_package_ref_node, SPDX_NAMESPACE.referenceLocator)
|
127 | 126 | ref_category = parse_literal(
|
128 | 127 | logger, graph, external_package_ref_node, SPDX_NAMESPACE.referenceCategory,
|
129 | 128 | parsing_method=lambda x: parse_enum_value(x, ExternalPackageRefCategory, SPDX_NAMESPACE.referenceCategory_, ))
|
130 | 129 | ref_type = parse_literal(logger, graph, external_package_ref_node, SPDX_NAMESPACE.referenceType,
|
131 |
| - parsing_method=lambda x: remove_prefix(x, REFERENCE_NAMESPACE)) |
| 130 | + parsing_method=lambda x: parse_external_package_ref_type(x, doc_namespace)) |
132 | 131 | comment = parse_literal(logger, graph, external_package_ref_node, RDFS.comment)
|
133 | 132 |
|
134 | 133 | raise_parsing_error_if_logger_has_messages(logger)
|
135 | 134 | external_package_ref = construct_or_raise_parsing_error(ExternalPackageRef,
|
136 | 135 | dict(category=ref_category, reference_type=ref_type,
|
137 | 136 | locator=ref_locator, comment=comment))
|
138 | 137 | return external_package_ref
|
| 138 | + |
| 139 | +def parse_external_package_ref_type(external_package_ref_type_literal: Literal, doc_namespace: str) -> str: |
| 140 | + if external_package_ref_type_literal.startswith(doc_namespace): |
| 141 | + return external_package_ref_type_literal[len(doc_namespace)+1:] |
| 142 | + if external_package_ref_type_literal.startswith(REFERENCE_NAMESPACE): |
| 143 | + return external_package_ref_type_literal[len(REFERENCE_NAMESPACE):] |
| 144 | + return external_package_ref_type_literal.toPython() |
0 commit comments