Add Python class for mgp_edge

Reviewers: teon.banek, ipaljak, mferencevic

Reviewed By: teon.banek

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D2679
This commit is contained in:
Teon Banek
2020-02-25 10:24:16 +01:00
parent 34db077cbd
commit e7f363ecbe
6 changed files with 369 additions and 189 deletions

View File

@@ -538,6 +538,9 @@ struct mgp_edge *mgp_edge_copy(const struct mgp_edge *e,
/// Free the memory used by a mgp_edge.
void mgp_edge_destroy(struct mgp_edge *e);
/// Return non-zero if given edges are equal, otherwise 0.
int mgp_edge_equal(const struct mgp_edge *e1, const struct mgp_edge *e2);
/// Return the type of the given edge.
struct mgp_edge_type mgp_edge_get_type(const struct mgp_edge *e);

View File

@@ -63,6 +63,9 @@ Property = namedtuple('Property', ('name', 'value'))
class Properties:
'''A collection of properties either on a Vertex or an Edge.'''
def __init__(self, obj):
raise NotImplementedError()
def get(self, property_name: str, default=None) -> object:
'''Get the value of a property with the given name or return default.
@@ -111,10 +114,14 @@ class Properties:
class EdgeType:
'''Type of an Edge.'''
__slots__ = ('_name',)
def __init__(self, name):
self._name = name
@property
def name(self) -> str:
pass
return self._name
class InvalidEdgeError(Exception):
@@ -129,30 +136,50 @@ class Edge:
a query. You should not globally store an instance of an Edge. Using an
invalid Edge instance will raise InvalidEdgeError.
'''
__slots__ = ('_edge',)
def __init__(self, edge):
if not isinstance(edge, _mgp.Edge):
raise TypeError("Expected '_mgp.Edge', got '{}'".fmt(type(edge)))
self._edge = edge
def is_valid(self) -> bool:
'''Return True if `self` is in valid context and may be used.'''
return self._edge.is_valid()
@property
def type(self) -> EdgeType:
'''Raise InvalidEdgeError.'''
pass
if not self.is_valid():
raise InvalidEdgeError()
return EdgeType(self._edge.get_type_name())
@property
def from_vertex(self): # -> Vertex:
'''Raise InvalidEdgeError.'''
pass
if not self.is_valid():
raise InvalidEdgeError()
return Vertex(self._edge.from_vertex())
@property
def to_vertex(self): # -> Vertex:
'''Raise InvalidEdgeError.'''
pass
if not self.is_valid():
raise InvalidEdgeError()
return Vertex(self._edge.to_vertex())
@property
def properties(self) -> Properties:
'''Raise InvalidEdgeError.'''
pass
if not self.is_valid():
raise InvalidEdgeError()
return Properties(self._edge)
def __eq__(self, other) -> bool:
'''Raise InvalidEdgeError.'''
pass
if not self.is_valid():
raise InvalidEdgeError()
return self._edge == other._edge
VertexId = typing.NewType('VertexId', int)