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/20 15:25:14 UTC
tinkerpop git commit: Added GroovyTranslatorTest to
GroovyEnvironmentSuite to test particulars of GroovyTranslator not tested by
StructureProcessSiute and ComputeProcesSuite. Added
JythonScriptEngineSetup.load() for a static location for loading globals
Repository: tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 f9e4a820a -> f5a28e804
Added GroovyTranslatorTest to GroovyEnvironmentSuite to test particulars of GroovyTranslator not tested by StructureProcessSiute and ComputeProcesSuite. Added JythonScriptEngineSetup.load() for a static location for loading globals into Jython. Translator interface now has getHostLanguage() and getExecutionLanguage() ... these are the two concepts of a Translator and now they are exposed and explicit. Also, added StringFactory.translatorString(Translator) so all translators have the same toString() look and feel.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/f5a28e80
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/f5a28e80
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/f5a28e80
Branch: refs/heads/TINKERPOP-1278
Commit: f5a28e804eb3436080ac6ceb9a6fd65616dbccbc
Parents: f9e4a82
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon Jun 20 09:25:00 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon Jun 20 09:25:00 2016 -0600
----------------------------------------------------------------------
.../strategy/creation/TranslationStrategy.java | 2 +-
.../process/traversal/util/Translator.java | 7 +--
.../gremlin/structure/util/StringFactory.java | 7 ++-
.../gremlin/groovy/GroovyEnvironmentSuite.java | 1 +
.../gremlin/groovy/GroovyTranslatorTest.java | 61 ++++++++++++++++++++
.../gremlin/groovy/GroovyTranslator.java | 26 +++++++--
.../gremlin/python/PythonTranslator.java | 26 +++++++--
.../gremlin/python/JythonScriptEngineSetup.java | 60 +++++++++++++++++++
.../gremlin/python/PythonBypassTranslator.java | 8 ++-
.../gremlin/python/PythonProvider.java | 23 +-------
.../gremlin/python/PythonTranslatorTest.java | 47 +++++++++++++++
11 files changed, 231 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
index a752963..465bf5d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategy.java
@@ -64,7 +64,7 @@ public class TranslationStrategy extends AbstractTraversalStrategy<TraversalStra
return;
try {
final String traversalScriptString = this.translator.getTraversalScript();
- ScriptEngine engine = ScriptEngineCache.get(this.translator.getScriptEngine());
+ ScriptEngine engine = ScriptEngineCache.get(this.translator.getExecutionLanguage());
this.destroyAnonymousTraversalFunction();
final Bindings bindings = new SimpleBindings();
bindings.put(this.translator.getAlias(), this.traversalSource);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
index e9c62af..62bf718 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/Translator.java
@@ -21,16 +21,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
-import org.apache.tinkerpop.gremlin.structure.Graph;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
public interface Translator extends Cloneable {
- public String getScriptEngine();
-
public String getAlias();
public void addStep(final Traversal.Admin<?, ?> traversal, final String stepName, final Object... arguments);
@@ -49,4 +45,7 @@ public interface Translator extends Cloneable {
public Translator clone();
+ public String getHostLanguage();
+
+ public String getExecutionLanguage();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
index 9c4b583..902d8e6 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -177,6 +178,10 @@ public final class StringFactory {
return traversalStrategy.getClass().getSimpleName();
}
+ public static String translatorString(final Translator translator) {
+ return "translator[" + translator.getAlias() + ":" + translator.getHostLanguage() + "->" + translator.getExecutionLanguage() + "]";
+ }
+
public static String vertexProgramString(final VertexProgram vertexProgram, final String internalString) {
return vertexProgram.getClass().getSimpleName() + L_BRACKET + internalString + R_BRACKET;
}
@@ -242,7 +247,7 @@ public final class StringFactory {
public static String removeEndBrackets(final Collection collection) {
final String string = collection.toString();
- return string.substring(1,string.length()-1);
+ return string.substring(1, string.length() - 1);
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
index 44b5bcd..05699c1 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyEnvironmentSuite.java
@@ -61,6 +61,7 @@ public class GroovyEnvironmentSuite extends AbstractGremlinSuite {
GremlinGroovyScriptEngineTinkerPopSandboxTest.class,
GremlinGroovyScriptEngineFileSandboxTest.class,
GremlinExecutorOverGraphTest.class,
+ GroovyTranslatorTest.class,
SugarLoaderTest.class,
};
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
new file mode 100644
index 0000000..d7ff1a0
--- /dev/null
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslatorTest.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.groovy;
+
+import org.apache.tinkerpop.gremlin.AbstractGremlinTest;
+import org.apache.tinkerpop.gremlin.LoadGraphWith;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class GroovyTranslatorTest extends AbstractGremlinTest {
+
+ @Test
+ @LoadGraphWith(LoadGraphWith.GraphData.MODERN)
+ public void shouldSupportStringSupplierLambdas() throws Exception {
+ final GraphTraversalSource g = graph.traversal().withTranslator(GroovyTranslator.of("g"));
+ GraphTraversal.Admin<Vertex, Integer> t = (GraphTraversal.Admin) g.V().hasLabel("person").out().map(x -> "it.get().value('name').length()").asAdmin();
+ List<Integer> lengths = t.toList();
+ assertEquals(6, lengths.size());
+ assertTrue(lengths.contains(3));
+ assertTrue(lengths.contains(4));
+ assertTrue(lengths.contains(5));
+ assertTrue(lengths.contains(6));
+ assertEquals(24, g.V().hasLabel("person").out().map(x -> "it.get().value('name').length()").sum().next().intValue());
+
+ /*t = g.V().hasLabel("person").out().filter(x -> "{ x.sideEffects('lengthSum', x.get().value('name').length()").asAdmin();
+ lengths = t.toList();
+ assertEquals(6, lengths.size());
+ assertTrue(lengths.contains(3));
+ assertTrue(lengths.contains(4));
+ assertTrue(lengths.contains(5));
+ assertTrue(lengths.contains(6));
+ assertEquals(24, g.V().hasLabel("person").out().map(x -> "it.get().value('name').length()").sum().next().intValue());*/
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
index 75d22a3..b17692e 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/GroovyTranslator.java
@@ -32,9 +32,11 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Function;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -54,11 +56,21 @@ public final class GroovyTranslator implements Translator {
}
@Override
- public String getScriptEngine() {
+ public String getHostLanguage() {
+ return "gremlin-java";
+ }
+
+ @Override
+ public String getExecutionLanguage() {
return "gremlin-groovy";
}
@Override
+ public String toString() {
+ return StringFactory.translatorString(this);
+ }
+
+ @Override
public String getAlias() {
return this.alias;
}
@@ -133,14 +145,20 @@ public final class GroovyTranslator implements Translator {
return ((Enum) object).getDeclaringClass().getSimpleName() + "." + object.toString();
else if (object instanceof Element)
return convertToString(((Element) object).id()); // hack
- else if (object instanceof Traversal) {
+ else if (object instanceof Computer) { // TODO: blow out
+ return "";
+ } else if (object instanceof Function) {
+ try {
+ return "{" + ((Function) object).apply(null).toString() + "}";
+ } catch (final Exception e) {
+ return object.toString(); // TODO: hack for testing
+ }
+ } else if (object instanceof Traversal) {
final TranslationStrategy strategy = (TranslationStrategy) ((Traversal.Admin) object).getStrategies().toList()
.stream()
.filter(s -> s instanceof TranslationStrategy)
.findFirst().get();
return strategy.getTranslator().getTraversalScript();
- } else if (object instanceof Computer) { // todo: blow out
- return "";
} else
return null == object ? "null" : object.toString();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
index b220d80..734396a 100644
--- a/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
+++ b/gremlin-variant/src/main/java/org/apache/tinkerpop/gremlin/python/PythonTranslator.java
@@ -35,6 +35,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TranslatorHelper;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.iterator.ArrayIterator;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -44,6 +45,7 @@ import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -83,7 +85,12 @@ public class PythonTranslator implements Translator {
}
@Override
- public String getScriptEngine() {
+ public String getHostLanguage() {
+ return "gremlin-java";
+ }
+
+ @Override
+ public String getExecutionLanguage() {
return "jython";
}
@@ -140,6 +147,11 @@ public class PythonTranslator implements Translator {
}
}
+ @Override
+ public String toString() {
+ return StringFactory.translatorString(this);
+ }
+
///////
private String convertToString(final Object object) {
@@ -153,6 +165,8 @@ public class PythonTranslator implements Translator {
return list.toString();
} else if (object instanceof Long)
return object + "L";
+ else if (object instanceof Boolean)
+ return object.equals(Boolean.TRUE) ? "True" : "False";
else if (object instanceof Class)
return ((Class) object).getCanonicalName();
else if (object instanceof VertexProperty.Cardinality)
@@ -173,9 +187,13 @@ public class PythonTranslator implements Translator {
return strategy.getTranslator().getTraversalScript();
} else if (object instanceof Computer) {
return "";
- } else if (object instanceof Boolean)
- return object.equals(Boolean.TRUE) ? "True" : "False";
- else
+ } else if (object instanceof Function) {
+ try {
+ return "lambda: \"" + ((Function) object).apply(null).toString() + "\"";
+ } catch (final Exception e) {
+ return object.toString(); // TODO: hack for testing
+ }
+ } else
return null == object ? "" : object.toString();
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/JythonScriptEngineSetup.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/JythonScriptEngineSetup.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/JythonScriptEngineSetup.java
new file mode 100644
index 0000000..c0cf6fd
--- /dev/null
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/JythonScriptEngineSetup.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.python;
+
+import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import java.io.File;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class JythonScriptEngineSetup {
+
+ private JythonScriptEngineSetup() {
+ }
+
+ public static void setup() {
+ try {
+ final String rootPackageName = (new File("gremlin-variant").exists() ? "gremlin-variant/" : "") + "src/main/jython/";
+ final String gremlinPythonPackageName = rootPackageName + "/gremlin_python";
+ final String gremlinDriverPackageName = rootPackageName + "/gremlin_driver";
+ final String gremlinPythonModuleName = gremlinPythonPackageName + "/gremlin_python.py";
+ GremlinPythonGenerator.create(gremlinPythonModuleName);
+ final ScriptEngine jythonEngine = ScriptEngineCache.get("jython");
+ jythonEngine.eval("import sys");
+ jythonEngine.eval("sys.path.append('" + gremlinPythonPackageName + "')");
+ jythonEngine.eval("sys.path.append('" + gremlinDriverPackageName + "')");
+ final String pythonPath = null == System.getenv("JYTHONPATH") ? System.getenv("PYTHONPATH") : System.getenv("JYTHONPATH");
+ if (null != pythonPath) {
+ for (final String path : pythonPath.split(":")) {
+ jythonEngine.eval("sys.path.append('" + path + "')");
+ }
+ }
+ jythonEngine.eval("from gremlin_python import *");
+ jythonEngine.eval("from gremlin_python import __");
+ jythonEngine.eval("from groovy_translator import GroovyTranslator");
+ } catch (final ScriptException e) {
+ throw new IllegalStateException(e.getMessage(), e);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonBypassTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonBypassTranslator.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonBypassTranslator.java
index d8c0d7f..8eb2d23 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonBypassTranslator.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonBypassTranslator.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.python;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.Translator;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.util.ScriptEngineCache;
import javax.script.Bindings;
@@ -55,7 +56,7 @@ class PythonBypassTranslator extends PythonTranslator {
}
@Override
- public String getScriptEngine() {
+ public String getExecutionLanguage() {
return "gremlin-groovy";
}
@@ -75,4 +76,9 @@ class PythonBypassTranslator extends PythonTranslator {
} else
return traversal;
}
+
+ @Override
+ public String toString() {
+ return StringFactory.translatorString(this);
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
index 91a4d54..10b9bdc 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonProvider.java
@@ -37,28 +37,7 @@ public class PythonProvider extends VariantGraphProvider {
private static final boolean IMPORT_STATICS = new Random().nextBoolean();
static {
- try {
- final String rootPackageName = (new File("gremlin-variant").exists() ? "gremlin-variant/" : "") + "src/main/jython/";
- final String gremlinPythonPackageName = rootPackageName + "/gremlin_python";
- final String gremlinDriverPackageName = rootPackageName + "/gremlin_driver";
- final String gremlinPythonModuleName = gremlinPythonPackageName + "/gremlin_python.py";
- GremlinPythonGenerator.create(gremlinPythonModuleName);
- final ScriptEngine jythonEngine = ScriptEngineCache.get("jython");
- jythonEngine.eval("import sys");
- jythonEngine.eval("sys.path.append('" + gremlinPythonPackageName + "')");
- jythonEngine.eval("sys.path.append('" + gremlinDriverPackageName + "')");
- final String pythonPath = null == System.getenv("JYTHONPATH") ? System.getenv("PYTHONPATH") : System.getenv("JYTHONPATH");
- if (null != pythonPath) {
- for (final String path : pythonPath.split(":")) {
- jythonEngine.eval("sys.path.append('" + path + "')");
- }
- }
- jythonEngine.eval("from gremlin_python import *");
- jythonEngine.eval("from gremlin_python import __");
- jythonEngine.eval("from groovy_translator import GroovyTranslator");
- } catch (final ScriptException e) {
- throw new IllegalStateException(e.getMessage(), e);
- }
+ JythonScriptEngineSetup.setup();
}
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f5a28e80/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonTranslatorTest.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonTranslatorTest.java
new file mode 100644
index 0000000..6102dd8
--- /dev/null
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/python/PythonTranslatorTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.python;
+
+import org.apache.tinkerpop.gremlin.groovy.GroovyTranslator;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategy;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.junit.Test;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public class PythonTranslatorTest {
+
+ static {
+ JythonScriptEngineSetup.setup();
+ }
+
+ @Test
+ public void shouldSupportStringSupplierLambdas() throws Exception {
+ final GraphTraversalSource g = TinkerFactory.createModern().traversal().withTranslator(GroovyTranslator.of("g"));
+ GraphTraversal.Admin<Vertex, Number> t = (GraphTraversal.Admin) g.V().hasLabel("person").out().map(x -> "it.get().value('name').length()").asAdmin();
+ System.out.println(t.getStrategies().getStrategy(TranslationStrategy.class).get().getTranslator().getTraversalScript());
+ System.out.print(t.toList());
+ }
+
+}