From cb4a7bba0f61a4e900a731130e7710f8a973ddf3 Mon Sep 17 00:00:00 2001 From: Jonathan Sambrook Date: Tue, 13 Jan 2026 10:32:25 +0000 Subject: [PATCH] Optimise tagvalue parser's relationship check --- src/spdx_tools/spdx/parser/tagvalue/parser.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/spdx_tools/spdx/parser/tagvalue/parser.py b/src/spdx_tools/spdx/parser/tagvalue/parser.py index 50096bda2..1d440d14f 100644 --- a/src/spdx_tools/spdx/parser/tagvalue/parser.py +++ b/src/spdx_tools/spdx/parser/tagvalue/parser.py @@ -92,6 +92,7 @@ def __init__(self, **kwargs): self.lex = SPDXLexer() self.lex.build(reflags=re.UNICODE) self.yacc = yacc.yacc(module=self, **kwargs) + self._relationship_hashes = set() @grammar_rule("start : start attrib ") def p_start_start_attrib(self, p): @@ -603,6 +604,8 @@ def check_for_preceding_package_and_build_contains_relationship(self): ) return package_spdx_id = self.elements_built["packages"][-1].spdx_id - relationship = Relationship(package_spdx_id, RelationshipType.CONTAINS, file_spdx_id) - if relationship not in self.elements_built.setdefault("relationships", []): + h = package_spdx_id + "CONTAINS" + file_spdx_id + if h not in self._relationship_hashes: + self._relationship_hashes.add(h) + relationship = Relationship(package_spdx_id, RelationshipType.CONTAINS, file_spdx_id) self.elements_built["relationships"].append(relationship)