You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/08/15 18:05:56 UTC
tinkerpop git commit: Intermediate commit for getting websockets
running under python RemoteGraph
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 5049caaea -> 7056b5ea9
Intermediate commit for getting websockets running under python RemoteGraph
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/7056b5ea
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/7056b5ea
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/7056b5ea
Branch: refs/heads/TINKERPOP-1278
Commit: 7056b5ea982b04555079fc1b958bfc5c8e99fe90
Parents: 5049caa
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Mon Aug 15 14:05:22 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Mon Aug 15 14:05:22 2016 -0400
----------------------------------------------------------------------
.../DefaultRemoteTraverserSerializers.java | 23 ++++++++++++++++++++
.../structure/io/graphson/GraphSONModule.java | 3 +++
.../io/graphson/GraphSONMapperTest.java | 8 +++++++
gremlin-python/pom.xml | 1 +
.../driver/websocket_remote_connection.py | 9 ++++----
gremlin-python/src/main/jython/setup.py | 3 ++-
.../python/driver/RESTRemoteConnectionTest.java | 15 ++++++-------
.../python/jsr223/JythonScriptEngineSetup.java | 2 +-
8 files changed, 50 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
index 292bfc5..c5fd33e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/remote/traversal/DefaultRemoteTraverserSerializers.java
@@ -18,10 +18,16 @@
*/
package org.apache.tinkerpop.gremlin.process.remote.traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.InputShim;
import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.KryoShim;
import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.OutputShim;
import org.apache.tinkerpop.gremlin.structure.io.gryo.kryoshim.SerializerShim;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
@@ -46,4 +52,21 @@ public final class DefaultRemoteTraverserSerializers {
return new DefaultRemoteTraverser<>(o, input.readLong());
}
}
+
+ public final static class GraphSONSerializer extends StdSerializer<Traverser> {
+
+ public GraphSONSerializer() {
+ super(Traverser.class);
+ }
+
+ @Override
+ public void serialize(final Traverser traverserInstance, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ jsonGenerator.writeObjectField("bulk", traverserInstance.bulk());
+ jsonGenerator.writeObjectField("value", traverserInstance.get());
+ jsonGenerator.writeEndObject();
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/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 a4850f7..bf8c513 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
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.structure.io.graphson;
+import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverserSerializers;
import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
import org.apache.tinkerpop.gremlin.process.traversal.Operator;
import org.apache.tinkerpop.gremlin.process.traversal.Order;
@@ -27,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.SackFunctions;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
@@ -141,6 +143,7 @@ abstract class GraphSONModule extends SimpleModule {
addSerializer(P.class, new GraphSONTraversalSerializers.PJacksonSerializer());
addSerializer(Lambda.class, new GraphSONTraversalSerializers.LambdaJacksonSerializer());
addSerializer(Bytecode.Binding.class, new GraphSONTraversalSerializers.BindingJacksonSerializer());
+ addSerializer(Traverser.class, new DefaultRemoteTraverserSerializers.GraphSONSerializer());
// -- deserializers for traversal
addDeserializer(Bytecode.class, new GraphSONTraversalSerializers.BytecodeJacksonDeserializer());
addDeserializer(Enum.class, new GraphSONTraversalSerializers.EnumJacksonDeserializer());
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
index 41e24c6..02c4b56 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapperTest.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.structure.io.graphson;
+import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
import org.junit.Test;
@@ -139,4 +140,11 @@ public class GraphSONMapperTest {
final String json = mapper.writeValueAsString(o);
assertEquals("\"" + o.toString() + "\"", json);
}
+
+ @Test
+ public void shouldHandleDefaultRemoteTraverser() throws Exception {
+ final DefaultRemoteTraverser<String> traverser = new DefaultRemoteTraverser<>("test", 100);
+ final String json = mapper.writeValueAsString(traverser);
+ // TODO: ASSERTION~~
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-python/pom.xml
----------------------------------------------------------------------
diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml
index 7e6030c..a16c0b9 100644
--- a/gremlin-python/pom.xml
+++ b/gremlin-python/pom.xml
@@ -166,6 +166,7 @@
<libraries>
<param>aenum</param>
<param>requests</param>
+ <param>tornado</param>
</libraries>
</configuration>
</execution>
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-python/src/main/jython/gremlin_python/driver/websocket_remote_connection.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/gremlin_python/driver/websocket_remote_connection.py b/gremlin-python/src/main/jython/gremlin_python/driver/websocket_remote_connection.py
index 52a9a88..1ccd38d 100644
--- a/gremlin-python/src/main/jython/gremlin_python/driver/websocket_remote_connection.py
+++ b/gremlin-python/src/main/jython/gremlin_python/driver/websocket_remote_connection.py
@@ -26,6 +26,7 @@ from tornado import websocket
from ..process.traversal import Traverser
from .remote_connection import RemoteConnection
from .remote_connection import RemoteResponse
+from ..process.graphson import GraphSONWriter
class GremlinServerError(Exception):
@@ -48,8 +49,8 @@ class WebSocketRemoteConnection(RemoteConnection):
def submit(self,
target_language,
bytecode,
- op="eval",
- processor="",
+ op="bytecode",
+ processor="traversal",
session=None):
traversers = self._loop.run_sync(lambda: self._submit(
target_language, bytecode, op, processor, session))
@@ -107,7 +108,7 @@ class WebSocketRemoteConnection(RemoteConnection):
"op": op,
"processor": processor,
"args": {
- "gremlin": gremlin,
+ "gremlin": GraphSONWriter.writeObject(gremlin),
"bindings": bindings,
"language": lang,
"aliases": {'g': self.traversal_source}
@@ -178,7 +179,7 @@ class Response:
elif status_code in [200, 206]:
traversers = []
for result in data:
- traversers.append(Traverser(result, 1))
+ traversers.append(Traverser(result['value'], result['bulk']))
if status_code == 200:
self._closed = True
else:
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-python/src/main/jython/setup.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/setup.py b/gremlin-python/src/main/jython/setup.py
index 4d9b8a8..4d474ab 100644
--- a/gremlin-python/src/main/jython/setup.py
+++ b/gremlin-python/src/main/jython/setup.py
@@ -53,6 +53,7 @@ setup(
long_description=open("README").read(),
install_requires=[
'aenum',
- 'requests'
+ 'requests',
+ 'tornado'
]
)
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/RESTRemoteConnectionTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/RESTRemoteConnectionTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/RESTRemoteConnectionTest.java
index 0468e90..0796401 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/RESTRemoteConnectionTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/driver/RESTRemoteConnectionTest.java
@@ -24,7 +24,6 @@ import org.apache.tinkerpop.gremlin.server.GremlinServer;
import org.apache.tinkerpop.gremlin.server.Settings;
import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import javax.script.ScriptContext;
@@ -50,9 +49,9 @@ public class RESTRemoteConnectionTest {
try {
JythonScriptEngineSetup.setup();
jython.getContext().getBindings(ScriptContext.ENGINE_SCOPE)
- .put("g", jython.eval("RemoteGraph(RESTRemoteConnection('http://localhost:8182','g')).traversal()"));
+ .put("g", jython.eval("RemoteGraph(WebSocketRemoteConnection('http://localhost:8182','g')).traversal()"));
jython.getContext().getBindings(ScriptContext.ENGINE_SCOPE)
- .put("j", jython.eval("RemoteGraph(RESTRemoteConnection('http://localhost:8182','g')).traversal()"));
+ .put("j", jython.eval("RemoteGraph(WebSocketRemoteConnection('http://localhost:8182','g')).traversal()"));
new GremlinServer(Settings.read(RESTRemoteConnectionTest.class.getResourceAsStream("gremlin-server-rest-modern.yaml"))).start().join();
} catch (final Exception ex) {
ex.printStackTrace();
@@ -60,7 +59,7 @@ public class RESTRemoteConnectionTest {
}
@Test
- @Ignore
+ @org.junit.Ignore
public void testGraphTraversalNext() throws Exception {
for (final String alias : this.aliases) {
final String result = (String) jython.eval(alias + ".V().repeat(__.out()).times(2).name.next()");
@@ -69,7 +68,7 @@ public class RESTRemoteConnectionTest {
}
@Test
- @Ignore
+ @org.junit.Ignore
public void testGraphTraversalToList() throws Exception {
for (final String alias : this.aliases) {
final List<String> results = (List) jython.eval(alias + ".V().repeat(__.out()).times(2).name.toList()");
@@ -80,7 +79,7 @@ public class RESTRemoteConnectionTest {
}
@Test
- @Ignore
+ @org.junit.Ignore
public void testGraphTraversalToSet() throws Exception {
for (final String alias : this.aliases) {
final Set<String> results = (Set) jython.eval(alias + ".V().repeat(__.both()).times(4).hasLabel('software').name.toSet()");
@@ -91,7 +90,7 @@ public class RESTRemoteConnectionTest {
}
@Test
- @Ignore
+ @org.junit.Ignore
public void testGraphTraversalNextAmount() throws Exception {
for (final String alias : this.aliases) {
List<String> results = (List) jython.eval(alias + ".V().repeat(__.out()).times(2).name.next(2)");
@@ -107,7 +106,7 @@ public class RESTRemoteConnectionTest {
}
@Test
- @Ignore
+ @org.junit.Ignore
public void testRemoteConnectionBindings() throws Exception {
for (final String alias : this.aliases) {
final String traversalScript = jython.eval(alias + ".V().out(('a','knows'),'created')").toString();
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/7056b5ea/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
index 7992da4..2a61666 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/jsr223/JythonScriptEngineSetup.java
@@ -39,7 +39,7 @@ public class JythonScriptEngineSetup {
jythonEngine.eval("from gremlin_python.process.traversal import *");
jythonEngine.eval("from gremlin_python.process.graph_traversal import *");
jythonEngine.eval("from gremlin_python.process.graph_traversal import __");
- jythonEngine.eval("from gremlin_python.driver.rest_remote_connection import RESTRemoteConnection");
+ jythonEngine.eval("from gremlin_python.driver.websocket_remote_connection import WebSocketRemoteConnection");
jythonEngine.eval("from gremlin_python.process.traversal import Bytecode");
jythonEngine.eval("from gremlin_python.structure.remote_graph import RemoteGraph");
jythonEngine.eval("from gremlin_python.process.graphson import GraphSONWriter");