8000 [issue-456] fix parsing of externalPackageRef · spdx/tools-python@158a28a · GitHub
[go: up one dir, main page]

Skip to content

Commit 158a28a

Browse files
committed
[issue-456] fix parsing of externalPackageRef
Signed-off-by: Meret Behrens <meret.behrens@tngtech.com>
1 parent ca400a7 commit 158a28a

File tree

3 files changed

+262
-191
lines changed

3 files changed

+262
-191
lines changed

src/spdx/parser/rdf/package_parser.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
# See the License for the specific language governing permissions and
1010
# limitations under the License.
1111
from typing import Optional
12-
13-
from rdflib import URIRef, Graph, RDFS, DOAP
12+
from rdflib import URIRef, Graph, RDFS, DOAP, Literal
1413

1514
from spdx.datetime_conversions import datetime_from_str
1615
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
4746

4847
external_package_refs = []
4948
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))
5150
files_analyzed = bool(graph.value(package_node, SPDX_NAMESPACE.filesAnalyzed, default=True))
5251
license_concluded = parse_literal_or_no_assertion_or_none(
5352
logger, graph, package_node, SPDX_NAMESPACE.licenseConcluded,
@@ -121,18 +120,25 @@ def parse_package_verification_code(package_verification_code_node: URIRef, grap
121120
return package_verification_code
122121

123122

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:
125124
logger = Logger()
126125
ref_locator = parse_literal(logger, graph, external_package_ref_node, SPDX_NAMESPACE.referenceLocator)
127126
ref_category = parse_literal(
128127
logger, graph, external_package_ref_node, SPDX_NAMESPACE.referenceCategory,
129128
parsing_method=lambda x: parse_enum_value(x, ExternalPackageRefCategory, SPDX_NAMESPACE.referenceCategory_, ))
130129
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))
132131
comment = parse_literal(logger, graph, external_package_ref_node, RDFS.comment)
133132

134133
raise_parsing_error_if_logger_has_messages(logger)
135134
external_package_ref = construct_or_raise_parsing_error(ExternalPackageRef,
136135
dict(category=ref_category, reference_type=ref_type,
137136
locator=ref_locator, comment=comment))
138137
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

Comments
 (0)
0