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/24 18:41:16 UTC
tinkerpop git commit: Updated init-code-blocks.awk to use a
derserialization of the JSON of Jython so you get the exact look and feel of
the objects. Fixed a bug in P deserialization .. Added more Python GraphSON
deseraialization tests.
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 275ba621e -> 58704a7c5
Updated init-code-blocks.awk to use a derserialization of the JSON of Jython so you get the exact look and feel of the objects. Fixed a bug in P deserialization .. Added more Python GraphSON deseraialization tests.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/58704a7c
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/58704a7c
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/58704a7c
Branch: refs/heads/TINKERPOP-1278
Commit: 58704a7c5a6d334c2397176787fdc9e514502940
Parents: 275ba62
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 24 12:41:00 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 24 12:41:11 2016 -0600
----------------------------------------------------------------------
docs/preprocessor/awk/init-code-blocks.awk | 12 ++++++---
docs/src/reference/gremlin-variants.asciidoc | 14 ++++++++++-
.../GraphSONTraversalSerializersV2d0.java | 26 +++++++++++---------
.../io/graphson/GraphSONWriterTest.java | 25 ++++++++++++++++---
4 files changed, 56 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/58704a7c/docs/preprocessor/awk/init-code-blocks.awk
----------------------------------------------------------------------
diff --git a/docs/preprocessor/awk/init-code-blocks.awk b/docs/preprocessor/awk/init-code-blocks.awk
index e37af2e..2b66eaf 100644
--- a/docs/preprocessor/awk/init-code-blocks.awk
+++ b/docs/preprocessor/awk/init-code-blocks.awk
@@ -61,8 +61,9 @@ BEGIN {
print "jython.eval('from gremlin_python import statics')"
print "jython.eval('from gremlin_python.process.traversal import *')"
print "jython.eval('from gremlin_python.structure.graph import Graph')"
- print "jython.eval('from gremlin_python.process.graphson import GraphSONWriter')"
- # print "jython.eval('from gremlin_python.process.graphson import serializers')"
+ print "jython.eval('from gremlin_python.structure.io.graphson import GraphSONWriter')"
+ print "jython.eval('from gremlin_python.structure.io.graphson import GraphSONReader')"
+ # print "jython.eval('from gremlin_python.structure.io.graphson import serializers')"
# print "jython.eval('from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection')"
print "jython.eval('statics.load_statics(globals())')"
print "jythonBindings = jython.createBindings()"
@@ -77,9 +78,12 @@ BEGIN {
print "def processTraversal(t, jython, groovy) {"
print " jython.getContext().getBindings(GLOBAL_SCOPE).put('j', jython.eval(t.replace('.toList()','')))"
print " if(jython.eval('isinstance(j, Traversal)')) {"
- print " bytecode = GraphSONReader.build().create().mapper.readValue(jython.eval('GraphSONWriter.writeObject(j)').toString(), Bytecode.class)"
+ print " mapper = GraphSONMapper.build().version(GraphSONVersion.V2_0).create().createMapper()"
+ print " bytecode = mapper.readValue(jython.eval('GraphSONWriter.writeObject(j)').toString(), Bytecode.class)"
print " language = BytecodeHelper.getLambdaLanguage(bytecode).orElse('gremlin-groovy')"
- print " return language.equals('gremlin-groovy') ? groovy.eval(GroovyTranslator.of(\"g\").translate(bytecode) + '.toList()').toString() : jython.eval(JythonTranslator.of(\"h\").translate(bytecode) + '.toList()').toString()"
+ print " result = language.equals('gremlin-groovy') ? groovy.eval(GroovyTranslator.of(\"g\").translate(bytecode) + '.toList()').toString() : jython.eval(JythonTranslator.of(\"h\").translate(bytecode) + '.toList()').toString()"
+ print " jython.getContext().getBindings(GLOBAL_SCOPE).put('json', mapper.writeValueAsString(result))"
+ print " return jython.eval('GraphSONReader.readObject(json)').toString()"
print " } else {"
print " j = jython.getContext().getBindings(GLOBAL_SCOPE).get('j')"
print " return null == j ? 'null' : j.toString()"
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/58704a7c/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 1ed663f..ab4910a 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -54,7 +54,7 @@ prefixes `_` in front of these terms for their use with graph traversal. For ins
To install Gremlin-Python, use Python's link:https://en.wikipedia.org/wiki/Pip_(package_manager)[pip] package manager.
[source,bash]
-pip install gremlin_python
+pip install gremlinpython
Gremlin-Python users will typically make use of the following classes.
@@ -134,6 +134,18 @@ Likewise, if it has lambdas represented in Python, it will use Gremlin-Python (e
IMPORTANT: Gremlin-Python's `Traversal` class supports the standard Gremlin methods such as `next()`, `nextTraverser()`,
`toSet()`, `toList()`, etc. Such "terminal" methods trigger the evaluation of the traversal.
+RemoteConnection Submission
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+There are various ways to submit a traversal to a `RemoteConnection`. Just as in Gremlin-Java, there are various
+"action methods" off of `Traversal`.
+
+* `Traversal.next()`
+* `Traversal.nextTraverser()`
+* `Traversal.toList()`
+* `Traversal.toSet()`
+* `Traversal.iterate()`
+
Gremlin-Python Sugar
~~~~~~~~~~~~~~~~~~~~
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/58704a7c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
index d5c8de0..ff3a69d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
@@ -39,12 +39,10 @@ import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdScalarSerializer;
import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
-import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Optional;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -281,16 +279,20 @@ final class GraphSONTraversalSerializersV2d0 {
} else {
try {
if (value instanceof Collection) {
- final Optional<Method> method = Arrays.stream(P.class.getMethods()).filter(m -> m.getName().equals(predicate)).findAny();
- if (method.isPresent()) {
- if (!Collection.class.isAssignableFrom(method.get().getParameterTypes()[0]))
- return (P) method.get().invoke(null, ((Collection) value).toArray());
- else
- return (P) method.get().invoke(null, value);
- } else
- throw new IllegalStateException("No such P method: " + predicate);
- }
- return (P) P.class.getMethod(predicate, Object.class).invoke(null, value);
+ if (predicate.equals("between"))
+ return P.between(((List) value).get(0), ((List) value).get(1));
+ else if (predicate.equals("inside"))
+ return P.between(((List) value).get(0), ((List) value).get(1));
+ else if (predicate.equals("outside"))
+ return P.outside(((List) value).get(0), ((List) value).get(1));
+ else if (predicate.equals("within"))
+ return P.within((Collection) value);
+ else if (predicate.equals("without"))
+ return P.without((Collection) value);
+ else
+ return (P) P.class.getMethod(predicate, Collection.class).invoke(null, (Collection) value);
+ } else
+ return (P) P.class.getMethod(predicate, Object.class).invoke(null, value);
} catch (final Exception e) {
throw new IllegalStateException(e.getMessage(), e);
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/58704a7c/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
index 51f4c53..1b438b6 100644
--- a/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
+++ b/gremlin-python/src/test/java/org/apache/tinkerpop/gremlin/python/structure/io/graphson/GraphSONWriterTest.java
@@ -20,18 +20,21 @@
package org.apache.tinkerpop.gremlin.python.structure.io.graphson;
import org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
+import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
import org.apache.tinkerpop.gremlin.python.jsr223.JythonScriptEngineSetup;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONMapper;
import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
-import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
import org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper;
import org.junit.Test;
import org.python.jsr223.PyScriptEngine;
-import org.python.jsr223.PyScriptEngineFactory;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
@@ -84,11 +87,25 @@ public class GraphSONWriterTest {
assertEquals("hello", mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Traverser('hello',3L))").toString(), Traverser.class).get());
}
- /*@Test
+ @Test
public void shouldSerializeBytecode() throws Exception {
assertEquals(P.eq(7L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L))").toString(), Object.class));
// TODO: assertEquals(mapper.writeValueAsString(P.between(1, 2).and(P.eq(7L))), jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString().replace(" ",""));
assertEquals(AndP.class, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(P.eq(7L)._and(P.between(1,2)))").toString(), Object.class).getClass());
+ //
+ assertEquals(new Bytecode.Binding<>("a", 5L), mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Binding('a',5L))").toString(), Object.class));
+ //
+ for (final Column t : Column.values()) {
+ assertEquals(t, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Column." + t.name() + ")").toString(), Object.class));
+ }
+ for (final T t : T.values()) {
+ assertEquals(t, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(T." + t.name() + ")").toString(), Object.class));
+ }
+ for (final Pop t : Pop.values()) {
+ assertEquals(t, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Pop." + t.name() + ")").toString(), Object.class));
+ }
+ assertEquals(Scope.global, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Scope._global)").toString(), Object.class));
+ assertEquals(Scope.local, mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(Scope.local)").toString(), Object.class));
}
@Test
@@ -108,6 +125,6 @@ public class GraphSONWriterTest {
assertEquals(
Lambda.biFunction("lambda z,y : z - y + 2", "gremlin-python"),
mapper.readValue(jythonEngine.eval("GraphSONWriter.writeObject(lambda : 'lambda z,y : z - y + 2')").toString(), Object.class));
- }*/
+ }
}