From c7abcc53bf918a039b8a8bc1c1bbbc2ea4c0d995 Mon Sep 17 00:00:00 2001 From: Mingen Pan Date: Tue, 19 Nov 2019 21:32:22 -0500 Subject: [PATCH 1/4] id should be int not float as indicated by the above comment --- redisgraph/query_result.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/redisgraph/query_result.py b/redisgraph/query_result.py index 2c8b479..8036a1d 100644 --- a/redisgraph/query_result.py +++ b/redisgraph/query_result.py @@ -119,10 +119,10 @@ def parse_edge(self, cell): # dest node ID offset (integer), # [[name, value, value type] X N] - edge_id = float(cell[0]) + edge_id = int(cell[0]) relation = self.graph.get_relation(cell[1]) - src_node_id = float(cell[2]) - dest_node_id = float(cell[3]) + src_node_id = int(cell[2]) + dest_node_id = int(cell[3]) properties = self.parse_entity_properties(cell[4]) return Edge(src_node_id, relation, dest_node_id, edge_id=edge_id, properties=properties) From eac9c441a21e390b7c8ec86b0d24f79ab2929f1a Mon Sep 17 00:00:00 2001 From: Mingen Pan Date: Wed, 20 Nov 2019 11:48:59 -0500 Subject: [PATCH 2/4] edge can be converted to string even the src_node and dest_node are assigned with id --- redisgraph/edge.py | 12 ++++++++++-- test.py | 26 ++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/redisgraph/edge.py b/redisgraph/edge.py index 2f4d9d2..c15cadd 100644 --- a/redisgraph/edge.py +++ b/redisgraph/edge.py @@ -1,3 +1,5 @@ +from redisgraph import Node + from .util import * class Edge(object): @@ -26,7 +28,10 @@ def toString(self): def __str__(self): # Source node. - res = '(' + self.src_node.alias + ')' + if isinstance(self.src_node, Node): + res = '(' + self.src_node.alias + ')' + else: + res = '()' # Edge res += "-[" @@ -38,7 +43,10 @@ def __str__(self): res += ']->' # Dest node. - res += '(' + self.dest_node.alias + ')' + if isinstance(self.dest_node, Node): + res += '(' + self.dest_node.alias + ')' + else: + res += '()' return res diff --git a/test.py b/test.py index 0d73ae9..b52674d 100644 --- a/test.py +++ b/test.py @@ -107,5 +107,31 @@ def test_param(self): # All done, remove graph. redis_graph.delete() + def test_printing_query_result(self): + redis_graph = Graph('printing', self.r) + + john = Node(label='person', properties={'name': 'John Doe', 'age': 33, 'gender': 'male', 'status': 'single'}) + redis_graph.add_node(john) + japan = Node(label='country', properties={'name': 'Japan'}) + + redis_graph.add_node(japan) + edge = Edge(john, 'visited', japan, properties={'purpose': 'pleasure'}) + redis_graph.add_edge(edge) + + redis_graph.commit() + + query = """MATCH (p:person)-[v:visited {purpose:"pleasure"}]->(c:country) + RETURN p, v, c""" + + result = redis_graph.query(query) + + person = result.result_set[0][0] + visit = result.result_set[0][1] + country = result.result_set[0][2] + + self.assertEqual(str(person), """(:person{name:"John Doe",age:33,gender:"male",status:"single"})""") + self.assertEqual(str(visit), """()-[:visited{purpose:"pleasure"}]->()""") + self.assertEqual(str(country), """(:country{name:"Japan"})""") + if __name__ == '__main__': unittest.main() From 95a444a50bec6734f97d8c114733058fb861b66e Mon Sep 17 00:00:00 2001 From: Mingen Pan Date: Wed, 20 Nov 2019 11:50:10 -0500 Subject: [PATCH 3/4] edge can be converted to string even the src_node and dest_node are assigned with id --- test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test.py b/test.py index b52674d..322f9a2 100644 --- a/test.py +++ b/test.py @@ -107,7 +107,7 @@ def test_param(self): # All done, remove graph. redis_graph.delete() - def test_printing_query_result(self): + def test_stringify_query_result(self): redis_graph = Graph('printing', self.r) john = Node(label='person', properties={'name': 'John Doe', 'age': 33, 'gender': 'male', 'status': 'single'}) From 65b8e3ccbf7eea8816a843d50f8e3a36f89fa404 Mon Sep 17 00:00:00 2001 From: Mingen Pan Date: Wed, 20 Nov 2019 15:48:32 -0500 Subject: [PATCH 4/4] __str__ of Edge will include str(src_node) and str(dest_node) --- redisgraph/edge.py | 4 ++-- test.py | 41 +++++++++++++++++++++++++---------------- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/redisgraph/edge.py b/redisgraph/edge.py index c15cadd..c0c011d 100644 --- a/redisgraph/edge.py +++ b/redisgraph/edge.py @@ -29,7 +29,7 @@ def toString(self): def __str__(self): # Source node. if isinstance(self.src_node, Node): - res = '(' + self.src_node.alias + ')' + res = str(self.src_node) else: res = '()' @@ -44,7 +44,7 @@ def __str__(self): # Dest node. if isinstance(self.dest_node, Node): - res += '(' + self.dest_node.alias + ')' + res += str(self.dest_node) else: res += '()' diff --git a/test.py b/test.py index 322f9a2..745a69e 100644 --- a/test.py +++ b/test.py @@ -9,26 +9,26 @@ def setUp(self): def test_graph_creation(self): redis_graph = Graph('social', self.r) - + john = Node(label='person', properties={'name': 'John Doe', 'age': 33, 'gender': 'male', 'status': 'single'}) redis_graph.add_node(john) japan = Node(label='country', properties={'name': 'Japan'}) - + redis_graph.add_node(japan) edge = Edge(john, 'visited', japan, properties={'purpose': 'pleasure'}) redis_graph.add_edge(edge) - + redis_graph.commit() - + query = """MATCH (p:person)-[v:visited {purpose:"pleasure"}]->(c:country) RETURN p, v, c""" - + result = redis_graph.query(query) - + person = result.result_set[0][0] visit = result.result_set[0][1] country = result.result_set[0][2] - + self.assertEqual(person, john) self.assertEqual(visit.properties, edge.properties) self.assertEqual(country, japan) @@ -37,7 +37,7 @@ def test_graph_creation(self): result = redis_graph.query(query) self.assertEqual([1, 2.3, "4", True, False, None], result.result_set[0][0]) - # All done, remove graph. + # All done, remove graph. redis_graph.delete() def test_array_functions(self): @@ -61,11 +61,9 @@ def test_array_functions(self): self.assertEqual([a, b], result.result_set[0][0]) - # All done, remove graph. redis_graph.delete() - def test_path(self): redis_graph = Graph('social', self.r) @@ -108,23 +106,31 @@ def test_param(self): redis_graph.delete() def test_stringify_query_result(self): - redis_graph = Graph('printing', self.r) + redis_graph = Graph('stringify', self.r) - john = Node(label='person', properties={'name': 'John Doe', 'age': 33, 'gender': 'male', 'status': 'single'}) + john = Node(alias='a', label='person', + properties={'name': 'John Doe', 'age': 33, 'gender': 'male', 'status': 'single'}) redis_graph.add_node(john) - japan = Node(label='country', properties={'name': 'Japan'}) + japan = Node(alias='b', label='country', properties={'name': 'Japan'}) redis_graph.add_node(japan) edge = Edge(john, 'visited', japan, properties={'purpose': 'pleasure'}) redis_graph.add_edge(edge) + self.assertEqual(str(john), + """(a:person{name:"John Doe",age:33,gender:"male",status:"single"})""") + self.assertEqual(str(edge), + """(a:person{name:"John Doe",age:33,gender:"male",status:"single"})""" + + """-[:visited{purpose:"pleasure"}]->""" + + """(b:country{name:"Japan"})""") + self.assertEqual(str(japan), """(b:country{name:"Japan"})""") + redis_graph.commit() query = """MATCH (p:person)-[v:visited {purpose:"pleasure"}]->(c:country) - RETURN p, v, c""" + RETURN p, v, c""" result = redis_graph.query(query) - person = result.result_set[0][0] visit = result.result_set[0][1] country = result.result_set[0][2] @@ -133,5 +139,8 @@ def test_stringify_query_result(self): self.assertEqual(str(visit), """()-[:visited{purpose:"pleasure"}]->()""") self.assertEqual(str(country), """(:country{name:"Japan"})""") + redis_graph.delete() + + if __name__ == '__main__': - unittest.main() + unittest.main()