1+ from .node import Node
2+ from .edge import Edge
3+
4+ class Path (object ):
5+
6+ def __init__ (self , nodes , edges ):
7+ assert (isinstance (nodes , list ) and isinstance (edges , list ))
8+ self .nodes = nodes
9+ self .edges = edges
10+ self .append_type = Node
11+
12+ @classmethod
13+ def new_empty_path (cls ):
14+ return cls ([], [])
15+
16+ def nodes (self ):
17+ return self .nodes
18+
19+ def edges (self ):
20+ return self .edges
21+
22+ def get_node (self , index ):
23+ return self .nodes [index ]
24+
25+ def get_relationship (self , index ):
26+ return self .edges [index ]
27+
28+ def first_node (self ):
29+ return self .nodes [0 ]
30+
31+ def last_node (self ):
32+ return self .nodes [- 1 ]
33+
34+ def edge_count (self ):
35+ return len (self .edges )
36+
37+ def nodes_count (self ):
38+ return len (self .nodes )
39+
40+ def add_node (self , node ):
41+ assert (type (node ) == self .append_type )
42+ self .nodes .append (node )
43+ self .append_type = Edge
44+ return self
45+
46+ def add_edge (self , edge ):
47+ assert (type (edge ) == self .append_type )
48+ self .edges .append (edge )
49+ self .append_type = Node
50+ return self
51+
52+ def __eq__ (self , other ):
53+ return self .nodes == other .nodes and self .edges == other .edges
54+
55+ def __str__ (self ):
56+ res = "<"
57+ edge_count = self .edge_count ()
58+ for i in range (0 , edge_count ):
59+ node_id = self .get_node (i ).id
60+ res += "(" + str (node_id ) + ")"
61+ edge = self .get_relationship (i )
62+ res += "-[" + str (int (edge .id )) + "]->" if edge .src_node == node_id else "<-[" + str (int (edge .id )) + "]-"
63+ node_id = self .get_node (edge_count ).id
64+ res += "(" + str (node_id ) + ")"
65+ res += ">"
66+ return res
67+
0 commit comments