Add Python class for mgp_vertex

Reviewers: teon.banek

Reviewed By: teon.banek

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D2688
This commit is contained in:
Ivan Paljak
2020-02-26 13:13:36 +01:00
parent bfbace8168
commit 32e56684db
2 changed files with 154 additions and 44 deletions

View File

@@ -25,34 +25,21 @@ import _mgp
class Label:
'''Label of a Vertex.'''
__slots__ = ('_name',)
def __init__(self, name):
self._name = name;
@property
def name(self) -> str:
pass
class Labels:
'''A collection of labels on a Vertex.'''
def __len__(self) -> int:
'''Raise InvalidVertexError.'''
pass
def __getitem__(self, index: int) -> Label:
'''Raise InvalidVertexError.'''
pass
def __iter__(self) -> typing.Iterable[Label]:
'''Raise InvalidVertexError.'''
pass
def __contains__(self, label: typing.Union[Label, str]) -> bool:
'''Test whether a label exists, either by name or another Label.
Raise InvalidVertexError.
'''
pass
return self._name;
def __eq__(self, other) -> bool:
if isinstance(other, Label):
return self._name == other.name
if isinstance(other, str):
return self._name == other
return NotImplemented
# Named property value of a Vertex or an Edge.
# It would be better to use typing.NamedTuple with typed fields, but that is
@@ -197,38 +184,58 @@ class Vertex:
in a query. You should not globally store an instance of a Vertex. Using an
invalid Vertex instance will raise InvalidVertexError.
'''
__slots__ = ('_vertex',)
def __init__(self, vertex):
raise NotImplementedError()
if not isinstance(vertex, _mgp.Vertex):
raise TypeError("Expected '_mgp.Vertex', got '{}'".fmt(type(vertex)))
self._vertex = vertex
def is_valid(self) -> bool:
'''Return True if `self` is in valid context and may be used'''
return self._vertex.is_valid()
@property
def id(self) -> VertexId:
'''Raise InvalidVertexError.'''
pass
if not self.is_valid():
raise InvalidVertexError()
return self._vertex.get_id()
@property
def labels(self) -> Labels:
def labels(self) -> typing.List[Label]:
'''Raise InvalidVertexError.'''
pass
if not self.is_valid():
raise InvalidVertexError()
return tuple(Label(self._vertex.label_at(i))
for i in range(self._vertex.labels_count()))
@property
def properties(self) -> Properties:
'''Raise InvalidVertexError.'''
pass
if not self.is_valid():
raise InvalidVertexError()
return Properties(self._vertex)
@property
def in_edges(self) -> typing.Iterable[Edge]:
'''Raise InvalidVertexError.'''
pass
if not self.is_valid():
raise InvalidVertexError()
raise NotImplementedError()
@property
def out_edges(self) -> typing.Iterable[Edge]:
'''Raise InvalidVertexError.'''
pass
if not self.is_valid():
raise InvalidVertexError()
raise NotImplementedError()
def __eq__(self, other) -> bool:
'''Raise InvalidVertexError.'''
pass
'''Raise InvalidVertexError'''
if not self.is_valid():
raise InvalidVertexError()
return self._vertex == other._vertex
class Path: