Skip to content

Commit 529502e

Browse files
committed
add support for path type
1 parent 7a70219 commit 529502e

File tree

4 files changed

+59
-0
lines changed

4 files changed

+59
-0
lines changed

redisgraph/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
from .node import Node
22
from .edge import Edge
33
from .graph import Graph
4+
from .path import Path

redisgraph/path.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
2+
class Path(object):
3+
4+
def __init__(self, nodes, relationships):
5+
self.nodes = nodes
6+
self.relationships = relationships
7+
8+
def nodes(self):
9+
return self.nodes
10+
11+
def relationships(self):
12+
return self.relationships
13+
14+
def get_node(self, index):
15+
return self.nodes[index]
16+
17+
def get_relationship(self, index):
18+
return self.relationships[index]
19+
20+
def first_node(self):
21+
return self.nodes[0]
22+
23+
def last_node(self):
24+
return self.nodes[-1]
25+
26+
def __eq__(self, other):
27+
return self.nodes == other.nodes and self.relationships == other.relationships

redisgraph/query_result.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .node import Node
22
from .edge import Edge
3+
from .path import Path
34
from prettytable import PrettyTable
45
from redis import ResponseError
56

@@ -21,6 +22,7 @@ class ResultSetScalarTypes(object):
2122
VALUE_ARRAY = 6
2223
VALUE_EDGE = 7
2324
VALUE_NODE = 8
25+
VALUE_PATH = 9
2426

2527
class QueryResult(object):
2628
LABELS_ADDED = 'Labels added'
@@ -124,6 +126,12 @@ def parse_edge(self, cell):
124126
properties = self.parse_entity_properties(cell[4])
125127
return Edge(src_node_id, relation, dest_node_id, edge_id=edge_id, properties=properties)
126128

129+
130+
def parse_path(self, cell):
131+
nodes = self.parse_scalar(cell[0])
132+
relationships = self.parse_scalar(cell[1])
133+
return Path(nodes, relationships)
134+
127135
def parse_scalar(self, cell):
128136
scalar_type = int(cell[0])
129137
value = cell[1]
@@ -162,6 +170,9 @@ def parse_scalar(self, cell):
162170
elif scalar_type == ResultSetScalarTypes.VALUE_EDGE:
163171
scalar = self.parse_edge(value)
164172

173+
elif scalar_type == ResultSetScalarTypes.VALUE_PATH:
174+
scalar = self.parse_path(value)
175+
165176
elif scalar_type == ResultSetScalarTypes.VALUE_UNKNOWN:
166177
print("Unknown scalar type\n")
167178

test.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,25 @@ def test_array_functions(self):
6565
# All done, remove graph.
6666
redis_graph.delete()
6767

68+
69+
def test_path(self):
70+
redis_graph = Graph('social', self.r)
71+
72+
query = """CREATE (a:L1)-[:R1 {value:1}]->(b:L1)-[:R1 {value:2}]->(c:L1)"""
73+
redis_graph.query(query)
74+
query = "MATCH p=(:L1)-[:R1]->(:L1) RETURN p"
75+
node0 = Node(node_id=0, label="L1")
76+
edge01 = Edge(0, "R1", 1, edge_id=0, properties={'value': 1})
77+
node1 = Node(node_id=1, label="L1")
78+
edge12 = Edge(1, "R1", 2, edge_id=1, properties={'value': 2})
79+
node2 = Node(node_id=2, label="L1")
80+
81+
path01 = Path([node0, node1], [edge01])
82+
path12 = Path([node1, node2], [edge12])
83+
expected_results = [[path01], [path12]]
84+
result = redis_graph.query(query)
85+
self.assertEqual(expected_results, result.result_set)
86+
87+
6888
if __name__ == '__main__':
6989
unittest.main()

0 commit comments

Comments
 (0)