TINKERPOP-786 WIP for anonymous traversals in python DSLs Not sure if this will be the right way to do this, but it works and tests pass. We'll see what happens once this gets review.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/a3d42d5f Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/a3d42d5f Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/a3d42d5f Branch: refs/heads/tp32-glv Commit: a3d42d5f37ff90d758947f19b9568cd2a3d92f1b Parents: 911d17f Author: Stephen Mallette <[email protected]> Authored: Wed May 10 16:47:27 2017 -0400 Committer: Stephen Mallette <[email protected]> Committed: Tue May 16 11:02:31 2017 -0400 ---------------------------------------------------------------------- .../src/main/jython/tests/process/test_dsl.py | 30 ++++++++++++++++---- 1 file changed, 24 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a3d42d5f/gremlin-python/src/main/jython/tests/process/test_dsl.py ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/jython/tests/process/test_dsl.py b/gremlin-python/src/main/jython/tests/process/test_dsl.py index ece81dc..92196fe 100644 --- a/gremlin-python/src/main/jython/tests/process/test_dsl.py +++ b/gremlin-python/src/main/jython/tests/process/test_dsl.py @@ -18,14 +18,15 @@ under the License. ''' import pytest +from gremlin_python.process.traversal import (Bytecode, P) from gremlin_python.process.graph_traversal import ( - GraphTraversalSource, GraphTraversal) + GraphTraversalSource, GraphTraversal, __) from gremlin_python.structure.graph import Graph __author__ = 'David M. Brown ([email protected])' -class SocialTraversalDsl(GraphTraversal): +class SocialTraversal(GraphTraversal): def knows(self, person_name): return self.out("knows").hasLabel("person").has("name", person_name) @@ -33,12 +34,28 @@ class SocialTraversalDsl(GraphTraversal): def youngestFriendsAge(self): return self.out("knows").hasLabel("person").values("age").min() + def createdAtLeast(self, number): + return self.outE("created").count().is_(P.gte(number)) -class SocialTraversalSourceDsl(GraphTraversalSource): +class ___(__): + @staticmethod + def knows(*args): + return SocialTraversal(None, None, Bytecode()).knows(*args) + + @staticmethod + def youngestFriendsAge(*args): + return SocialTraversal(None, None, Bytecode()).youngestFriendsAge(*args) + + @staticmethod + def createdAtLeast(*args): + return SocialTraversal(None, None, Bytecode()).createdAtLeast(*args) + + +class SocialTraversalSource(GraphTraversalSource): def __init__(self, *args, **kwargs): - super(SocialTraversalSourceDsl, self).__init__(*args, **kwargs) - self.graph_traversal = SocialTraversalDsl + super(SocialTraversalSource, self).__init__(*args, **kwargs) + self.graph_traversal = SocialTraversal def persons(self): traversal = self.get_graph_traversal() @@ -48,7 +65,8 @@ class SocialTraversalSourceDsl(GraphTraversalSource): def test_dsl(remote_connection): - social = Graph().traversal(SocialTraversalSourceDsl).withRemote(remote_connection) + social = Graph().traversal(SocialTraversalSource).withRemote(remote_connection) assert social.V().has("name", "marko").knows("josh").next() assert social.V().has("name", "marko").youngestFriendsAge().next() == 27 assert social.persons().count().next() == 4 + assert social.persons().filter(___.createdAtLeast(2)).count().next() == 1
