From c071f355636055fcde8f57a84c601bfa8fedd489 Mon Sep 17 00:00:00 2001 From: Cyber MacGeddon Date: Tue, 27 Jan 2026 10:17:54 +0000 Subject: [PATCH] Fixing tests --- .../test_neo4j_user_collection_isolation.py | 42 +++++++++---------- .../test_triples_falkordb_storage.py | 38 ++++++++--------- .../test_triples_memgraph_storage.py | 32 +++++++------- .../storage/triples/falkordb/write.py | 31 +++++++++++--- .../storage/triples/memgraph/write.py | 1 + .../trustgraph/storage/triples/neo4j/write.py | 31 +++++++++++--- 6 files changed, 107 insertions(+), 68 deletions(-) diff --git a/tests/unit/test_storage/test_neo4j_user_collection_isolation.py b/tests/unit/test_storage/test_neo4j_user_collection_isolation.py index bc8bb03f..dce170a7 100644 --- a/tests/unit/test_storage/test_neo4j_user_collection_isolation.py +++ b/tests/unit/test_storage/test_neo4j_user_collection_isolation.py @@ -7,7 +7,7 @@ from unittest.mock import MagicMock, patch, call from trustgraph.storage.triples.neo4j.write import Processor as StorageProcessor from trustgraph.query.triples.neo4j.service import Processor as QueryProcessor -from trustgraph.schema import Triples, Triple, Value, Metadata +from trustgraph.schema import Triples, Triple, Term, Metadata, IRI, LITERAL from trustgraph.schema import TriplesQueryRequest @@ -60,9 +60,9 @@ class TestNeo4jUserCollectionIsolation: ) triple = Triple( - s=Value(value="http://example.com/subject", is_uri=True), - p=Value(value="http://example.com/predicate", is_uri=True), - o=Value(value="literal_value", is_uri=False) + s=Term(type=IRI, iri="http://example.com/subject"), + p=Term(type=IRI, iri="http://example.com/predicate"), + o=Term(type=LITERAL, value="literal_value") ) message = Triples( @@ -128,9 +128,9 @@ class TestNeo4jUserCollectionIsolation: metadata = Metadata(id="test-id") triple = Triple( - s=Value(value="http://example.com/subject", is_uri=True), - p=Value(value="http://example.com/predicate", is_uri=True), - o=Value(value="http://example.com/object", is_uri=True) + s=Term(type=IRI, iri="http://example.com/subject"), + p=Term(type=IRI, iri="http://example.com/predicate"), + o=Term(type=IRI, iri="http://example.com/object") ) message = Triples( @@ -170,8 +170,8 @@ class TestNeo4jUserCollectionIsolation: query = TriplesQueryRequest( user="test_user", collection="test_collection", - s=Value(value="http://example.com/subject", is_uri=True), - p=Value(value="http://example.com/predicate", is_uri=True), + s=Term(type=IRI, iri="http://example.com/subject"), + p=Term(type=IRI, iri="http://example.com/predicate"), o=None ) @@ -254,9 +254,9 @@ class TestNeo4jUserCollectionIsolation: metadata=Metadata(user="user1", collection="coll1"), triples=[ Triple( - s=Value(value="http://example.com/user1/subject", is_uri=True), - p=Value(value="http://example.com/predicate", is_uri=True), - o=Value(value="user1_data", is_uri=False) + s=Term(type=IRI, iri="http://example.com/user1/subject"), + p=Term(type=IRI, iri="http://example.com/predicate"), + o=Term(type=LITERAL, value="user1_data") ) ] ) @@ -265,9 +265,9 @@ class TestNeo4jUserCollectionIsolation: metadata=Metadata(user="user2", collection="coll2"), triples=[ Triple( - s=Value(value="http://example.com/user2/subject", is_uri=True), - p=Value(value="http://example.com/predicate", is_uri=True), - o=Value(value="user2_data", is_uri=False) + s=Term(type=IRI, iri="http://example.com/user2/subject"), + p=Term(type=IRI, iri="http://example.com/predicate"), + o=Term(type=LITERAL, value="user2_data") ) ] ) @@ -429,9 +429,9 @@ class TestNeo4jUserCollectionRegression: metadata=Metadata(user="user1", collection="coll1"), triples=[ Triple( - s=Value(value=shared_uri, is_uri=True), - p=Value(value="http://example.com/p", is_uri=True), - o=Value(value="user1_value", is_uri=False) + s=Term(type=IRI, iri=shared_uri), + p=Term(type=IRI, iri="http://example.com/p"), + o=Term(type=LITERAL, value="user1_value") ) ] ) @@ -440,9 +440,9 @@ class TestNeo4jUserCollectionRegression: metadata=Metadata(user="user2", collection="coll2"), triples=[ Triple( - s=Value(value=shared_uri, is_uri=True), - p=Value(value="http://example.com/p", is_uri=True), - o=Value(value="user2_value", is_uri=False) + s=Term(type=IRI, iri=shared_uri), + p=Term(type=IRI, iri="http://example.com/p"), + o=Term(type=LITERAL, value="user2_value") ) ] ) diff --git a/tests/unit/test_storage/test_triples_falkordb_storage.py b/tests/unit/test_storage/test_triples_falkordb_storage.py index 02d9cdd0..05dcb2e5 100644 --- a/tests/unit/test_storage/test_triples_falkordb_storage.py +++ b/tests/unit/test_storage/test_triples_falkordb_storage.py @@ -6,7 +6,7 @@ import pytest from unittest.mock import MagicMock, patch from trustgraph.storage.triples.falkordb.write import Processor -from trustgraph.schema import Value, Triple +from trustgraph.schema import Term, Triple, IRI, LITERAL class TestFalkorDBStorageProcessor: @@ -22,9 +22,9 @@ class TestFalkorDBStorageProcessor: # Create a test triple triple = Triple( - s=Value(value='http://example.com/subject', is_uri=True), - p=Value(value='http://example.com/predicate', is_uri=True), - o=Value(value='literal object', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject'), + p=Term(type=IRI, iri='http://example.com/predicate'), + o=Term(type=LITERAL, value='literal object') ) message.triples = [triple] @@ -183,9 +183,9 @@ class TestFalkorDBStorageProcessor: message.metadata.collection = 'test_collection' triple = Triple( - s=Value(value='http://example.com/subject', is_uri=True), - p=Value(value='http://example.com/predicate', is_uri=True), - o=Value(value='http://example.com/object', is_uri=True) + s=Term(type=IRI, iri='http://example.com/subject'), + p=Term(type=IRI, iri='http://example.com/predicate'), + o=Term(type=IRI, iri='http://example.com/object') ) message.triples = [triple] @@ -269,14 +269,14 @@ class TestFalkorDBStorageProcessor: message.metadata.collection = 'test_collection' triple1 = Triple( - s=Value(value='http://example.com/subject1', is_uri=True), - p=Value(value='http://example.com/predicate1', is_uri=True), - o=Value(value='literal object1', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject1'), + p=Term(type=IRI, iri='http://example.com/predicate1'), + o=Term(type=LITERAL, value='literal object1') ) triple2 = Triple( - s=Value(value='http://example.com/subject2', is_uri=True), - p=Value(value='http://example.com/predicate2', is_uri=True), - o=Value(value='http://example.com/object2', is_uri=True) + s=Term(type=IRI, iri='http://example.com/subject2'), + p=Term(type=IRI, iri='http://example.com/predicate2'), + o=Term(type=IRI, iri='http://example.com/object2') ) message.triples = [triple1, triple2] @@ -337,14 +337,14 @@ class TestFalkorDBStorageProcessor: message.metadata.collection = 'test_collection' triple1 = Triple( - s=Value(value='http://example.com/subject1', is_uri=True), - p=Value(value='http://example.com/predicate1', is_uri=True), - o=Value(value='literal object', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject1'), + p=Term(type=IRI, iri='http://example.com/predicate1'), + o=Term(type=LITERAL, value='literal object') ) triple2 = Triple( - s=Value(value='http://example.com/subject2', is_uri=True), - p=Value(value='http://example.com/predicate2', is_uri=True), - o=Value(value='http://example.com/object2', is_uri=True) + s=Term(type=IRI, iri='http://example.com/subject2'), + p=Term(type=IRI, iri='http://example.com/predicate2'), + o=Term(type=IRI, iri='http://example.com/object2') ) message.triples = [triple1, triple2] diff --git a/tests/unit/test_storage/test_triples_memgraph_storage.py b/tests/unit/test_storage/test_triples_memgraph_storage.py index b38f0759..162586d5 100644 --- a/tests/unit/test_storage/test_triples_memgraph_storage.py +++ b/tests/unit/test_storage/test_triples_memgraph_storage.py @@ -6,7 +6,7 @@ import pytest from unittest.mock import MagicMock, patch from trustgraph.storage.triples.memgraph.write import Processor -from trustgraph.schema import Value, Triple +from trustgraph.schema import Term, Triple, IRI, LITERAL class TestMemgraphStorageProcessor: @@ -22,9 +22,9 @@ class TestMemgraphStorageProcessor: # Create a test triple triple = Triple( - s=Value(value='http://example.com/subject', is_uri=True), - p=Value(value='http://example.com/predicate', is_uri=True), - o=Value(value='literal object', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject'), + p=Term(type=IRI, iri='http://example.com/predicate'), + o=Term(type=LITERAL, value='literal object') ) message.triples = [triple] @@ -231,9 +231,9 @@ class TestMemgraphStorageProcessor: mock_tx = MagicMock() triple = Triple( - s=Value(value='http://example.com/subject', is_uri=True), - p=Value(value='http://example.com/predicate', is_uri=True), - o=Value(value='http://example.com/object', is_uri=True) + s=Term(type=IRI, iri='http://example.com/subject'), + p=Term(type=IRI, iri='http://example.com/predicate'), + o=Term(type=IRI, iri='http://example.com/object') ) processor.create_triple(mock_tx, triple, "test_user", "test_collection") @@ -265,9 +265,9 @@ class TestMemgraphStorageProcessor: mock_tx = MagicMock() triple = Triple( - s=Value(value='http://example.com/subject', is_uri=True), - p=Value(value='http://example.com/predicate', is_uri=True), - o=Value(value='literal object', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject'), + p=Term(type=IRI, iri='http://example.com/predicate'), + o=Term(type=LITERAL, value='literal object') ) processor.create_triple(mock_tx, triple, "test_user", "test_collection") @@ -347,14 +347,14 @@ class TestMemgraphStorageProcessor: message.metadata.collection = 'test_collection' triple1 = Triple( - s=Value(value='http://example.com/subject1', is_uri=True), - p=Value(value='http://example.com/predicate1', is_uri=True), - o=Value(value='literal object1', is_uri=False) + s=Term(type=IRI, iri='http://example.com/subject1'), + p=Term(type=IRI, iri='http://example.com/predicate1'), + o=Term(type=LITERAL, value='literal object1') ) triple2 = Triple( - s=Value(value='http://example.com/subject2', is_uri=True), - p=Value(value='http://example.com/predicate2', is_uri=True), - o=Value(value='http://example.com/object2', is_uri=True) + s=Term(type=IRI, iri='http://example.com/subject2'), + p=Term(type=IRI, iri='http://example.com/predicate2'), + o=Term(type=IRI, iri='http://example.com/object2') ) message.triples = [triple1, triple2] diff --git a/trustgraph-flow/trustgraph/storage/triples/falkordb/write.py b/trustgraph-flow/trustgraph/storage/triples/falkordb/write.py index f08eeb91..210ea53d 100755 --- a/trustgraph-flow/trustgraph/storage/triples/falkordb/write.py +++ b/trustgraph-flow/trustgraph/storage/triples/falkordb/write.py @@ -15,12 +15,27 @@ from falkordb import FalkorDB from .... base import TriplesStoreService, CollectionConfigHandler from .... base import AsyncProcessor, Consumer, Producer from .... base import ConsumerMetrics, ProducerMetrics +from .... schema import IRI, LITERAL # Module logger logger = logging.getLogger(__name__) default_ident = "triples-write" + +def get_term_value(term): + """Extract the string value from a Term""" + if term is None: + return None + if term.type == IRI: + return term.iri + elif term.type == LITERAL: + return term.value + else: + # For blank nodes or other types, use id or value + return term.id or term.value + + default_graph_url = 'falkor://falkordb:6379' default_database = 'falkordb' @@ -164,14 +179,18 @@ class Processor(CollectionConfigHandler, TriplesStoreService): for t in message.triples: - self.create_node(t.s.value, user, collection) + s_val = get_term_value(t.s) + p_val = get_term_value(t.p) + o_val = get_term_value(t.o) - if t.o.is_uri: - self.create_node(t.o.value, user, collection) - self.relate_node(t.s.value, t.p.value, t.o.value, user, collection) + self.create_node(s_val, user, collection) + + if t.o.type == IRI: + self.create_node(o_val, user, collection) + self.relate_node(s_val, p_val, o_val, user, collection) else: - self.create_literal(t.o.value, user, collection) - self.relate_literal(t.s.value, t.p.value, t.o.value, user, collection) + self.create_literal(o_val, user, collection) + self.relate_literal(s_val, p_val, o_val, user, collection) @staticmethod def add_args(parser): diff --git a/trustgraph-flow/trustgraph/storage/triples/memgraph/write.py b/trustgraph-flow/trustgraph/storage/triples/memgraph/write.py index 8105b14e..71bad7e0 100755 --- a/trustgraph-flow/trustgraph/storage/triples/memgraph/write.py +++ b/trustgraph-flow/trustgraph/storage/triples/memgraph/write.py @@ -15,6 +15,7 @@ from neo4j import GraphDatabase from .... base import TriplesStoreService, CollectionConfigHandler from .... base import AsyncProcessor, Consumer, Producer from .... base import ConsumerMetrics, ProducerMetrics +from .... schema import IRI, LITERAL # Module logger logger = logging.getLogger(__name__) diff --git a/trustgraph-flow/trustgraph/storage/triples/neo4j/write.py b/trustgraph-flow/trustgraph/storage/triples/neo4j/write.py index e33b26ca..4a85a273 100755 --- a/trustgraph-flow/trustgraph/storage/triples/neo4j/write.py +++ b/trustgraph-flow/trustgraph/storage/triples/neo4j/write.py @@ -14,12 +14,27 @@ from neo4j import GraphDatabase from .... base import TriplesStoreService, CollectionConfigHandler from .... base import AsyncProcessor, Consumer, Producer from .... base import ConsumerMetrics, ProducerMetrics +from .... schema import IRI, LITERAL # Module logger logger = logging.getLogger(__name__) default_ident = "triples-write" + +def get_term_value(term): + """Extract the string value from a Term""" + if term is None: + return None + if term.type == IRI: + return term.iri + elif term.type == LITERAL: + return term.value + else: + # For blank nodes or other types, use id or value + return term.id or term.value + + default_graph_host = 'bolt://neo4j:7687' default_username = 'neo4j' default_password = 'password' @@ -212,14 +227,18 @@ class Processor(CollectionConfigHandler, TriplesStoreService): for t in message.triples: - self.create_node(t.s.value, user, collection) + s_val = get_term_value(t.s) + p_val = get_term_value(t.p) + o_val = get_term_value(t.o) - if t.o.is_uri: - self.create_node(t.o.value, user, collection) - self.relate_node(t.s.value, t.p.value, t.o.value, user, collection) + self.create_node(s_val, user, collection) + + if t.o.type == IRI: + self.create_node(o_val, user, collection) + self.relate_node(s_val, p_val, o_val, user, collection) else: - self.create_literal(t.o.value, user, collection) - self.relate_literal(t.s.value, t.p.value, t.o.value, user, collection) + self.create_literal(o_val, user, collection) + self.relate_literal(s_val, p_val, o_val, user, collection) @staticmethod def add_args(parser):