Skip to content

Instantly share code, notes, and snippets.

@davebshow
Created May 9, 2017 14:35
Show Gist options
  • Save davebshow/3c6805d3f00843f4facf12efeeb283e3 to your computer and use it in GitHub Desktop.
Save davebshow/3c6805d3f00843f4facf12efeeb283e3 to your computer and use it in GitHub Desktop.
# This is the current API
class SocialTraversalDsl(GraphTraversal):
def knows(self, person_name):
return self.out("knows").hasLabel("person").has("name", person_name)
def youngestFriendsAge(self):
return self.out("knows").hasLabel("person").values("age").min()
class SocialTraversalSourceDsl(GraphTraversalSource):
def __init__(self, *args, **kwargs):
super(SocialTraversalSourceDsl, self).__init__(*args, **kwargs)
self.graph_traversal = SocialTraversalDsl
def persons(self):
traversal = self.get_graph_traversal()
traversal.bytecode.add_step("V")
traversal.bytecode.add_step("hasLabel", "person")
return traversal
# Maybe it would be better if the user needed less knowledge of how the the traversal source works.
# Instead, we could use decorators
# This is the same
class SocialTraversalDsl(GraphTraversal):
def knows(self, person_name):
return self.out("knows").hasLabel("person").has("name", person_name)
def youngestFriendsAge(self):
return self.out("knows").hasLabel("person").values("age").min()
# Use decorators here, something like...
@gremlin_dsl_traversal(SocialTraversalDsl)
class SocialTraversalSourceDsl(GraphTraversalSource):
@traversal
def persons(self):
steps = [("V"), ("hasLabel", "person)]
return steps
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment