From afe61fc047a536750a8abbb1a60326d310b5ee96 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me> Date: Sun, 27 Mar 2022 21:29:05 +0300 Subject: [PATCH] Added support for JanusGraph. --- CHANGELOG.md | 2 ++ goblin/provider.py | 19 +++++++++++++++++++ goblin/session.py | 8 ++++---- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 136d1ea..047ea2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ## v2.2.4 +* Added support for JanusGraph backend. + ## v2.2.3 * Fixed bug when mapping an edge's properties introduced as a regression in newer gremlinpython versions. diff --git a/goblin/provider.py b/goblin/provider.py index 47cd958..ff1c415 100644 --- a/goblin/provider.py +++ b/goblin/provider.py @@ -15,3 +15,22 @@ class TinkerGraph(Provider): # TODO @staticmethod def get_hashable_id(val): return val + +class JanusGraph(Provider): # TODO + """Default provider""" + + @staticmethod + def get_hashable_id(val): + if not isinstance(val, dict): + return val + type_prop = val.get("@type", None) + if not type_prop == "janusgraph:RelationIdentifier": + return val + val_prop = val.get("@value", None) + if not isinstance(val_prop, dict): + return val + rel_prop = val_prop.get("relationId", None) + if not rel_prop: + return val + return rel_prop + diff --git a/goblin/session.py b/goblin/session.py index 8df2083..7e5cd64 100644 --- a/goblin/session.py +++ b/goblin/session.py @@ -401,7 +401,6 @@ class Session: if id: await self._g.E().has('dirty',id).aggregate('x').fold().V().has('dirty',id).aggregate('x').select('x').unfold().properties('dirty').drop().iterate() async def __rollback_transaction(self, id): - print("id of: %s" % id) if id: await self._g.E().has('dirty',id).aggregate('x').fold().V().has('dirty',id).aggregate('x').select('x').unfold().drop().iterate() async def _update_vertex(self, vertex): @@ -438,10 +437,11 @@ class Session: if elem: if element.__type__ == 'vertex': # Look into this - label = await self._g.V(elem.id).label().next() - props = await self._get_vertex_properties(elem.id, label) + label = await self._g.V(self._get_hashable_id(elem.id)).label().next() + props = await self._get_vertex_properties(self._get_hashable_id(elem.id), label) elif element.__type__ == 'edge': - props = await self._g.E(elem.id).valueMap(True).next() + props = await self._g.E(self._get_hashable_id(elem.id)).valueMap(True).next() + elem = element.__mapping__.mapper_func(elem, props, element) return elem -- GitLab