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();