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/08/23 23:05:58 UTC

tinkerpop git commit: fixed up Gremlin-Python -- remote_connection wasn't parsing traversers right, wasn't returning sideEffects correctly, and TraversalOpProcessor wasn't using GraphSON 2.0. Nearly done -- need to figure out how to reconstruct an object

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 433af0edc -> 7bdc0b270


fixed up Gremlin-Python -- remote_connection wasn't parsing traversers right, wasn't returning sideEffects correctly, and TraversalOpProcessor wasn't using GraphSON 2.0. Nearly done -- need to figure out how to reconstruct an object from the sideEffects. Will do that tomorrow.


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

Branch: refs/heads/TINKERPOP-1278
Commit: 7bdc0b270961b4b551b7464556fe69083ef14079
Parents: 433af0e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Aug 23 17:05:54 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Aug 23 17:05:54 2016 -0600

----------------------------------------------------------------------
 .../structure/io/graphson/GraphSONModule.java   |  1 -
 .../python/GraphTraversalSourceGenerator.groovy |  2 +-
 .../python/TraversalSourceGenerator.groovy      |  4 +++
 .../driver/driver_remote_connection.py          | 31 +++++++++++++-------
 .../gremlin_python/process/graph_traversal.py   |  3 --
 .../jython/gremlin_python/process/traversal.py  |  4 +++
 .../op/traversal/TraversalOpProcessor.java      |  5 ++--
 7 files changed, 32 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 4abca44..440904e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -184,7 +184,6 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
             addSerializer(ZoneOffset.class, new JavaTimeSerializersV2d0.ZoneOffsetJacksonSerializer());
 
             // traversal
-            // TODO: review (added for integration with new GraphSON model for GLV bytecode)
             addSerializer(Traversal.class, new GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
             addSerializer(Bytecode.class, new GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
             Stream.of(VertexProperty.Cardinality.class,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
index 8ba4ee7..74c6d89 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/GraphTraversalSourceGenerator.groovy
@@ -135,7 +135,7 @@ under the License.
 """)
         GraphTraversal.getMethods().
                 findAll { GraphTraversal.class.equals(it.returnType) }.
-                findAll { !it.name.equals("clone") }.
+                findAll { !it.name.equals("clone") && !it.name.equals("iterate") }.
                 collect { SymbolHelper.toPython(it.name) }.
                 unique().
                 sort { a, b -> a <=> b }.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
index 1f25647..3c08eef 100644
--- a/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
+++ b/gremlin-python/src/main/groovy/org/apache/tinkerpop/gremlin/python/TraversalSourceGenerator.groovy
@@ -89,6 +89,10 @@ class Traversal(object):
         return list(iter(self))
     def toSet(self):
         return set(iter(self))
+    def iterate(self):
+        while True:
+            try: self.__next__()
+            except StopIteration: return self
     def nextTraverser(self):
         if self.traversers is None:
             self.traversal_strategies.apply_strategies(self)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
index fa47920..946d2c3 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/driver_remote_connection.py
@@ -33,7 +33,11 @@ class GremlinServerError(Exception):
 
 
 def parse_traverser(result):
-    return Traverser(result["@value"], result["@value"]["bulk"]["@value"])
+    return Traverser(result["@value"]["value"], result["@value"]["bulk"]["@value"])
+
+
+def parse_side_effect(result):
+    return result
 
 
 class DriverRemoteConnection(RemoteConnection):
@@ -84,7 +88,7 @@ class DriverRemoteConnection(RemoteConnection):
     @gen.coroutine
     def submit_gather(self, request_id, key):
         message = self._get_gather_message(request_id, key)
-        side_effects = yield self._execute_message(message, parse_traverser)
+        side_effects = yield self._execute_message(message, parse_side_effect)
         raise gen.Return(side_effects)
 
     @gen.coroutine
@@ -130,10 +134,10 @@ class DriverRemoteConnection(RemoteConnection):
             "op": "keys",
             "processor": "traversal",
             "args": {
-        		"sideEffect": {
-        			"@type": "gremlin:uuid",
-        			"@value": request_id
-        		}
+                "sideEffect": {
+                    "@type": "gremlin:uuid",
+                    "@value": request_id
+                }
             }
         }
         message = self._finalize_message(message)
@@ -148,10 +152,10 @@ class DriverRemoteConnection(RemoteConnection):
             "op": "gather",
             "processor": "traversal",
             "args": {
-        		"sideEffect": {
-        			"@type": "gremlin:uuid",
-        			"@value": request_id
-        		},
+                "sideEffect": {
+                    "@type": "gremlin:uuid",
+                    "@value": request_id
+                },
                 "sideEffectKey": key,
                 "aliases": {"g": self.traversal_source}
             }
@@ -221,7 +225,6 @@ class Response:
 
 
 class SideEffectManager(object):
-
     def __init__(self, remote_connection, request_id):
         self._remote_connection = remote_connection
         self._request_id = request_id
@@ -237,3 +240,9 @@ class SideEffectManager(object):
             lambda: self._remote_connection.submit_gather(self._request_id, key)
         )
         return side_effects
+
+    def __getitem__(self, key):
+        return self.get(key)
+
+    def __repr__(self):
+        return "sideEffects[size:" + str(len(self.keys())) + "]"

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
index c7a63b7..b7d6691 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/graph_traversal.py
@@ -233,9 +233,6 @@ class GraphTraversal(Traversal):
   def inject(self, *args):
     self.bytecode.add_step("inject", *args)
     return self
-  def iterate(self, *args):
-    self.bytecode.add_step("iterate", *args)
-    return self
   def key(self, *args):
     self.bytecode.add_step("key", *args)
     return self

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
index 82ee038..9a8c7c6 100644
--- a/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
+++ b/gremlin-python/src/main/jython/gremlin_python/process/traversal.py
@@ -51,6 +51,10 @@ class Traversal(object):
         return list(iter(self))
     def toSet(self):
         return set(iter(self))
+    def iterate(self):
+        while True:
+            try: self.__next__()
+            except StopIteration: return self
     def nextTraverser(self):
         if self.traversers is None:
             self.traversal_strategies.apply_strategies(self)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7bdc0b27/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
index 74b7b7d..0769f87 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/op/traversal/TraversalOpProcessor.java
@@ -45,6 +45,7 @@ import org.apache.tinkerpop.gremlin.server.util.SideEffectIterator;
 import org.apache.tinkerpop.gremlin.server.util.TraversalIterator;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
+import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
 import org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer;
 import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
@@ -69,7 +70,7 @@ import static com.codahale.metrics.MetricRegistry.name;
  */
 public class TraversalOpProcessor extends AbstractOpProcessor {
     private static final Logger logger = LoggerFactory.getLogger(TraversalOpProcessor.class);
-    private static final ObjectMapper mapper = GraphSONMapper.build().create().createMapper();
+    private static final ObjectMapper mapper = GraphSONMapper.build().version(GraphSONVersion.V2_0).create().createMapper();
     public static final String OP_PROCESSOR_NAME = "traversal";
     public static final Timer traversalOpTimer = MetricManager.INSTANCE.getTimer(name(GremlinServer.class, "op", "traversal"));
 
@@ -323,7 +324,7 @@ public class TraversalOpProcessor extends AbstractOpProcessor {
         // deserialized Bytecode object.
         final Object bytecodeObj = msg.getArgs().get(Tokens.ARGS_GREMLIN);
         final Bytecode bytecode = bytecodeObj instanceof Bytecode ? (Bytecode) bytecodeObj :
-            mapper.readValue(bytecodeObj.toString(), Bytecode.class);
+                mapper.readValue(bytecodeObj.toString(), Bytecode.class);
 
         // earlier validation in selection of this op method should free us to cast this without worry
         final Map<String, String> aliases = (Map<String, String>) msg.optionalArgs(Tokens.ARGS_ALIASES).get();