You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/06/02 20:37:13 UTC

incubator-tinkerpop git commit: PythonGraphTraversal now implements Python __iter__ and thus, once a result set comes back from Gremlin server as an iterator, it will behave just like Gremlin-Java. That is, the traversal is an iterator. Made the nested P

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 fc5e2cbef -> 9ab3e15e8


PythonGraphTraversal now implements Python __iter__ and thus, once a result set comes back from Gremlin server as an iterator, it will behave just like Gremlin-Java. That is, the traversal is an iterator. Made the nested P-test in HasTest even crazier trying to break things.. all is still good in the hood.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/9ab3e15e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/9ab3e15e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/9ab3e15e

Branch: refs/heads/TINKERPOP-1278
Commit: 9ab3e15e8554db0bdfe7126ea96a9f65ba67471b
Parents: fc5e2cb
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 2 14:37:07 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 2 14:37:07 2016 -0600

----------------------------------------------------------------------
 .../traversal/step/filter/GroovyHasTest.groovy  |  4 +-
 .../process/traversal/step/filter/HasTest.java  | 10 ++--
 .../python/GremlinPythonGenerator.groovy        | 13 +++--
 .../variant/python/PythonVariantConverter.java  |  2 +-
 .../python/gremlin-python-3.2.1-SNAPSHOT.py     | 53 ++++++++++----------
 5 files changed, 43 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9ab3e15e/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
index 8f452d3..a692618 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
@@ -156,8 +156,8 @@ public abstract class GroovyHasTest {
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
-            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').has('age', not(lt(10)).and(lt(29).or(eq(35)))).name")
+        public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name() {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').has('age', not(lte(10).and(not(between(11,20)))).and(lt(29).or(eq(35)))).name")
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9ab3e15e/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
index 2682a71..aaab647 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
@@ -107,7 +107,7 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_V_hasIdX1_2X(final Object v1Id, final Object v2Id);
 
-    public abstract Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name();
+    public abstract Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name();
 
     @Test
     @LoadGraphWith(MODERN)
@@ -408,8 +408,8 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    public void g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
-        final Traversal<Vertex, String> traversal = get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name();
+    public void g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name() {
+        final Traversal<Vertex, String> traversal = get_g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name();
         printTraversalForm(traversal);
         checkResults(Arrays.asList("peter", "vadas"), traversal);
     }
@@ -549,8 +549,8 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
         }
 
         @Override
-        public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
-            return g.V().hasLabel("person").has("age", P.not(P.lt(10)).and(P.lt(29).or(P.eq(35)))).values("name");
+        public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXlteX10X_andXnotXbetweenX11_20XXXX_andXltX29X_orXeqX35XXXX_name() {
+            return g.V().hasLabel("person").has("age", P.not(P.lte(10).and(P.not(P.between(11, 20)))).and(P.lt(29).or(P.eq(35)))).values("name");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9ab3e15e/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
index 3d3dd74..5f569be 100644
--- a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
+++ b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
@@ -144,6 +144,7 @@ class Helper(object):
                 """class PythonGraphTraversal(object):
   def __init__(self, traversalString):
     self.traversalString = traversalString
+    self.results = None
   def __repr__(self):
     return self.traversalString;
   def __getitem__(self,index):
@@ -155,6 +156,13 @@ class Helper(object):
       raise TypeError("Index must be int or slice")
   def __getattr__(self,key):
     return self.values(key)
+  def __iter__(self):
+        return self
+  def next(self):
+    if(self.results is None):
+      print "sending " + self.traversalString + " to GremlinServer..."
+      self.results = iter([]) # get iterator from driver
+    return self.results.next()
 """)
         GraphTraversal.getMethods()
                 .collect { methodMap[it.name] }
@@ -207,11 +215,6 @@ class Helper(object):
             pythonClass.append("   ${value} = \"VertexProperty.Cardinality.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
-        VertexProperty.Cardinality.values().each { value ->
-            pythonClass.append("   ${value} = Cardinality.${value}\n");
-        }
-        pythonClass.append("\n");
         //////////////
         pythonClass.append("class Column(object):\n");
         Column.values().each { value ->

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9ab3e15e/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
index bceb72e..ca57292 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
@@ -146,7 +146,7 @@ public class PythonVariantConverter implements VariantConverter {
         else if (object instanceof SackFunctions.Barrier)
             return convertStatic("Barrier.") + object.toString();
         else if (object instanceof VertexProperty.Cardinality)
-            return convertStatic("Cardinality.") + object.toString();
+            return "Cardinality." + object.toString();
         else if (object instanceof Direction)
             return convertStatic("Direction.") + object.toString();
         else if (object instanceof Operator)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9ab3e15e/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py b/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
index 8c55dbb..a55431f 100644
--- a/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
+++ b/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
@@ -76,8 +76,6 @@ class PythonGraphTraversalSource(object):
     return PythonGraphTraversalSource(self.traversalSourceString + ".withSack(" + Helper.stringify(*args) + ")")
   def withStrategies(self, *args):
     return PythonGraphTraversalSource(self.traversalSourceString + ".withStrategies(" + Helper.stringify(*args) + ")")
-  def clone(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + ".clone(" + Helper.stringify(*args) + ")")
   def addV(self, *args):
     return PythonGraphTraversal(self.traversalSourceString + ".addV(" + Helper.stringify(*args) + ")")
   def inject(self, *args):
@@ -87,6 +85,7 @@ class PythonGraphTraversalSource(object):
 class PythonGraphTraversal(object):
   def __init__(self, traversalString):
     self.traversalString = traversalString
+    self.results = None
   def __repr__(self):
     return self.traversalString;
   def __getitem__(self,index):
@@ -98,6 +97,13 @@ class PythonGraphTraversal(object):
       raise TypeError("Index must be int or slice")
   def __getattr__(self,key):
     return self.values(key)
+  def __iter__(self):
+        return self
+  def next(self):
+    if(self.results is None):
+      print "sending " + self.traversalString + " to GremlinServer..."
+      self.results = iter([]) # get iterator from driver
+    return self.results.next()
   def asAdmin(self, *args):
     self.traversalString = self.traversalString + ".asAdmin(" + Helper.stringify(*args) + ")"
     return self
@@ -131,15 +137,15 @@ class PythonGraphTraversal(object):
   def coalesce(self, *args):
     self.traversalString = self.traversalString + ".coalesce(" + Helper.stringify(*args) + ")"
     return self
+  def hasValue(self, *args):
+    self.traversalString = self.traversalString + ".hasValue(" + Helper.stringify(*args) + ")"
+    return self
   def optional(self, *args):
     self.traversalString = self.traversalString + ".optional(" + Helper.stringify(*args) + ")"
     return self
   def hasLabel(self, *args):
     self.traversalString = self.traversalString + ".hasLabel(" + Helper.stringify(*args) + ")"
     return self
-  def hasValue(self, *args):
-    self.traversalString = self.traversalString + ".hasValue(" + Helper.stringify(*args) + ")"
-    return self
   def toE(self, *args):
     self.traversalString = self.traversalString + ".toE(" + Helper.stringify(*args) + ")"
     return self
@@ -251,12 +257,12 @@ class PythonGraphTraversal(object):
   def _or(self, *args):
     self.traversalString = self.traversalString + ".or(" + Helper.stringify(*args) + ")"
     return self
-  def constant(self, *args):
-    self.traversalString = self.traversalString + ".constant(" + Helper.stringify(*args) + ")"
-    return self
   def outE(self, *args):
     self.traversalString = self.traversalString + ".outE(" + Helper.stringify(*args) + ")"
     return self
+  def constant(self, *args):
+    self.traversalString = self.traversalString + ".constant(" + Helper.stringify(*args) + ")"
+    return self
   def project(self, *args):
     self.traversalString = self.traversalString + ".project(" + Helper.stringify(*args) + ")"
     return self
@@ -299,12 +305,12 @@ class PythonGraphTraversal(object):
   def otherV(self, *args):
     self.traversalString = self.traversalString + ".otherV(" + Helper.stringify(*args) + ")"
     return self
-  def coin(self, *args):
-    self.traversalString = self.traversalString + ".coin(" + Helper.stringify(*args) + ")"
-    return self
   def option(self, *args):
     self.traversalString = self.traversalString + ".option(" + Helper.stringify(*args) + ")"
     return self
+  def coin(self, *args):
+    self.traversalString = self.traversalString + ".coin(" + Helper.stringify(*args) + ")"
+    return self
   def drop(self, *args):
     self.traversalString = self.traversalString + ".drop(" + Helper.stringify(*args) + ")"
     return self
@@ -426,15 +432,15 @@ class __(object):
   def coalesce(*args):
     return PythonGraphTraversal("__").coalesce(*args)
   @staticmethod
+  def hasValue(*args):
+    return PythonGraphTraversal("__").hasValue(*args)
+  @staticmethod
   def optional(*args):
     return PythonGraphTraversal("__").optional(*args)
   @staticmethod
   def hasLabel(*args):
     return PythonGraphTraversal("__").hasLabel(*args)
   @staticmethod
-  def hasValue(*args):
-    return PythonGraphTraversal("__").hasValue(*args)
-  @staticmethod
   def toE(*args):
     return PythonGraphTraversal("__").toE(*args)
   @staticmethod
@@ -537,12 +543,12 @@ class __(object):
   def _or(*args):
     return PythonGraphTraversal("__")._or(*args)
   @staticmethod
-  def constant(*args):
-    return PythonGraphTraversal("__").constant(*args)
-  @staticmethod
   def outE(*args):
     return PythonGraphTraversal("__").outE(*args)
   @staticmethod
+  def constant(*args):
+    return PythonGraphTraversal("__").constant(*args)
+  @staticmethod
   def project(*args):
     return PythonGraphTraversal("__").project(*args)
   @staticmethod
@@ -699,12 +705,12 @@ if(sys.argv[0]):
       return __.order(*args)
    def coalesce(*args):
       return __.coalesce(*args)
+   def hasValue(*args):
+      return __.hasValue(*args)
    def optional(*args):
       return __.optional(*args)
    def hasLabel(*args):
       return __.hasLabel(*args)
-   def hasValue(*args):
-      return __.hasValue(*args)
    def toE(*args):
       return __.toE(*args)
    def fold(*args):
@@ -773,10 +779,10 @@ if(sys.argv[0]):
       return __.addOutE(*args)
    def _or(*args):
       return __._or(*args)
-   def constant(*args):
-      return __.constant(*args)
    def outE(*args):
       return __.outE(*args)
+   def constant(*args):
+      return __.constant(*args)
    def project(*args):
       return __.project(*args)
    def barrier(*args):
@@ -874,11 +880,6 @@ class Cardinality(object):
    list = "VertexProperty.Cardinality.list"
    set = "VertexProperty.Cardinality.set"
 
-if(sys.argv[0]):
-   single = Cardinality.single
-   list = Cardinality.list
-   set = Cardinality.set
-
 class Column(object):
    keys = "Column.keys"
    values = "Column.values"