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/02 15:24:19 UTC
incubator-tinkerpop git commit: Wrote a complex P.and().or(not(lt()))
test for HasTest. Realized the GremlinPython crapped out on it. Fixed
GremlinPython. Also,
added PythonProcessComputerTest to verify that the computer tests work with
Gremlin-Python. F
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1278 99834114d -> 4b355c15d
Wrote a complex P.and().or(not(lt())) test for HasTest. Realized the GremlinPython crapped out on it. Fixed GremlinPython. Also, added PythonProcessComputerTest to verify that the computer tests work with Gremlin-Python. Found an issue related to properties having the same name as steps and fixed that in the PythonVariantConverter. All in all, more good stuff.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4b355c15
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4b355c15
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4b355c15
Branch: refs/heads/TINKERPOP-1278
Commit: 4b355c15dac69b11918a0ac8a82ad4cafe385acc
Parents: 9983411
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 2 09:24:10 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 2 09:24:10 2016 -0600
----------------------------------------------------------------------
.../gremlin/process/traversal/util/AndP.java | 4 +--
.../gremlin/process/traversal/util/OrP.java | 3 +-
.../gremlin/structure/util/StringFactory.java | 5 +++
.../traversal/step/filter/GroovyHasTest.groovy | 5 +++
.../process/traversal/step/filter/HasTest.java | 15 ++++++++
.../python/GremlinPythonGenerator.groovy | 6 ++--
.../process/variant/VariantGraphProvider.java | 6 ++++
.../variant/python/PythonComputerProvider.java | 36 ++++++++++++++++++++
.../python/PythonProcessComputerTest.java | 34 ++++++++++++++++++
.../python/PythonProcessStandardTest.java | 8 -----
.../variant/python/PythonVariantConverter.java | 26 ++++++++++++--
.../python/gremlin-python-3.2.1-SNAPSHOT.py | 23 +++++++------
12 files changed, 142 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/AndP.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/AndP.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/AndP.java
index db75641..8a7784f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/AndP.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/AndP.java
@@ -19,9 +19,9 @@
package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.io.Serializable;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.BiPredicate;
@@ -61,7 +61,7 @@ public final class AndP<V> extends ConnectiveP<V> {
@Override
public String toString() {
- return "and(" + this.predicates + ")";
+ return "and(" + StringFactory.removeEndBrackets(this.predicates) + ")";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/OrP.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/OrP.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/OrP.java
index e1ce7a2..8bc4387 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/OrP.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/OrP.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.io.Serializable;
import java.util.ArrayList;
@@ -61,7 +62,7 @@ public final class OrP<V> extends ConnectiveP<V> {
@Override
public String toString() {
- return "or(" + this.predicates + ")";
+ return "or(" + StringFactory.removeEndBrackets(this.predicates) + ")";
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/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 b803d6e..9c4b583 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
@@ -240,4 +240,9 @@ public final class StringFactory {
return STORAGE + L_BRACKET + internalString + R_BRACKET;
}
+ public static String removeEndBrackets(final Collection collection) {
+ final String string = collection.toString();
+ return string.substring(1,string.length()-1);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
index b9ccfd0..8f452d3 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
@@ -154,5 +154,10 @@ public abstract class GroovyHasTest {
public Traversal<Vertex, Vertex> get_g_V_hasIdX1_2X(final Object v1Id, final Object v2Id) {
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasId(v1Id, v2Id)", "v1Id", v1Id, "v2Id", v2Id)
}
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').has('age', not(lt(10)).and(lt(29).or(eq(35)))).name")
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
index 96ca39f..2682a71 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
@@ -107,6 +107,8 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Vertex> get_g_V_hasIdX1_2X(final Object v1Id, final Object v2Id);
+ public abstract Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name();
+
@Test
@LoadGraphWith(MODERN)
public void g_V_outXcreatedX_hasXname__mapXlengthX_isXgtX3XXX_name() {
@@ -404,6 +406,14 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
}
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
+ final Traversal<Vertex, String> traversal = get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("peter", "vadas"), traversal);
+ }
+
private void assert_g_EX11X(final Object edgeId, final Traversal<Edge, Edge> traversal) {
printTraversalForm(traversal);
assertTrue(traversal.hasNext());
@@ -537,5 +547,10 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
public Traversal<Vertex, Vertex> get_g_V_hasIdX1_2X(final Object v1Id, final Object v2Id) {
return g.V().hasId(v1Id, v2Id);
}
+
+ @Override
+ public Traversal<Vertex, String> get_g_V_hasLabelXpersonX_hasXage_notXltX10XX_andXltX29X_orXeqX35XXXX_name() {
+ return g.V().hasLabel("person").has("age", P.not(P.lt(10)).and(P.lt(29).or(P.eq(35)))).values("name");
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
index df3af56..fac5ec3 100644
--- a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
+++ b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
@@ -147,22 +147,20 @@ class Helper(object):
""")
P.getMethods()
.findAll { P.class.isAssignableFrom(it.returnType) }
- .findAll { !it.name.equals("or") && !it.name.equals("and") && !it.name.equals("not") }
+ .findAll { !it.name.equals("or") && !it.name.equals("and") }
.collect { methodMap[it.name] }
.toSet()
.each { method ->
pythonClass.append(
""" @staticmethod
def ${method}(*args):
- return P("P.${method}(" + Helper.stringify(*args) + ")")
+ return P("P.${invertedMethodMap[method]}(" + Helper.stringify(*args) + ")")
""")
};
pythonClass.append(""" def _and(self, arg):
return P(self.pString + ".and(" + Helper.stringify(arg) + ")")
def _or(self, arg):
return P(self.pString + ".or(" + Helper.stringify(arg) + ")")
- def _not(self, arg):
- return P(self.pString + ".not(" + Helper.stringify(arg) + ")")
""")
pythonClass.append("\n\n")
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/VariantGraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/VariantGraphProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/VariantGraphProvider.java
index 376cbc4..dc999cd 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/VariantGraphProvider.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/VariantGraphProvider.java
@@ -23,7 +23,9 @@ import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.AbstractGraphProvider;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest;
@@ -57,9 +59,13 @@ public abstract class VariantGraphProvider extends AbstractGraphProvider {
"testProfileStrategyCallbackSideEffect",
"g_withSideEffectXa_g_VX2XX_VX1X_out_whereXneqXaXX",
"g_withSackXBigInteger_TEN_powX1000X_assignX_V_localXoutXknowsX_barrierXnormSackXX_inXknowsX_barrier_sack",
+ "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX",
+ "shouldSupportJobChaining",
InjectTest.Traversals.class.getCanonicalName(),
+ ProgramTest.Traversals.class.getCanonicalName(),
CoreTraversalTest.class.getCanonicalName(),
TraversalInterruptionTest.class.getCanonicalName(),
+ TraversalInterruptionComputerTest.class.getCanonicalName(),
ElementIdStrategyProcessTest.class.getCanonicalName(),
EventStrategyProcessTest.class.getCanonicalName(),
ReadOnlyStrategyProcessTest.class.getCanonicalName(),
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonComputerProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonComputerProvider.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonComputerProvider.java
new file mode 100644
index 0000000..a9e9a2d
--- /dev/null
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonComputerProvider.java
@@ -0,0 +1,36 @@
+/*
+ * 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.process.variant.python;
+
+import org.apache.tinkerpop.gremlin.GraphProvider;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+@GraphProvider.Descriptor(computer = TinkerGraphComputer.class)
+public class PythonComputerProvider extends PythonProvider {
+
+ public GraphTraversalSource traversal(final Graph graph) {
+ return super.traversal(graph).withComputer();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessComputerTest.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessComputerTest.java
new file mode 100644
index 0000000..1d3bef8
--- /dev/null
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessComputerTest.java
@@ -0,0 +1,34 @@
+/*
+ * 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.process.variant.python;
+
+import org.apache.tinkerpop.gremlin.GraphProviderClass;
+import org.apache.tinkerpop.gremlin.process.ProcessComputerSuite;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.junit.runner.RunWith;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+@RunWith(ProcessComputerSuite.class)
+@GraphProviderClass(provider = PythonComputerProvider.class, graph = TinkerGraph.class)
+public class PythonProcessComputerTest {
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessStandardTest.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessStandardTest.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessStandardTest.java
index 787409b..b6cce22 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessStandardTest.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonProcessStandardTest.java
@@ -31,12 +31,4 @@ import org.junit.runner.RunWith;
@GraphProviderClass(provider = PythonProvider.class, graph = TinkerGraph.class)
public class PythonProcessStandardTest {
- /*@org.junit.Test
- public void test() throws Exception {
- GremlinPythonGenerator.create("/tmp");
- ScriptEngine engine = new ScriptEngineManager().getEngineByName("jython");
- System.out.println(engine.eval("execfile(\"/tmp/gremlin-python-3.2.1-SNAPSHOT.py\")"));
- System.out.println(engine.eval("g = PythonGraphTraversalSource(\"ws://localhost:8182/\", \"g\")"));
- System.out.println(engine.eval("g.V()[1]"));
- }*/
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
index b5810ac..ca40919 100644
--- a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
+++ b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
@@ -25,8 +25,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.P;
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.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
+import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
import org.apache.tinkerpop.gremlin.process.variant.VariantConverter;
import org.apache.tinkerpop.gremlin.process.variant.VariantGraphTraversal;
import org.apache.tinkerpop.gremlin.structure.Column;
@@ -45,11 +49,13 @@ import javax.script.ScriptEngine;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
import java.io.File;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
@@ -69,11 +75,12 @@ public class PythonVariantConverter implements VariantConverter {
}
}
+ private static final Set<String> STEP_NAMES = Stream.of(GraphTraversal.class.getMethods()).filter(method -> Traversal.class.isAssignableFrom(method.getReturnType())).map(Method::getName).collect(Collectors.toSet());
private static final Set<String> PREFIX_NAMES = new HashSet<>(Arrays.asList("as", "in", "and", "or", "is", "not", "from"));
@Override
public String generateGremlinGroovy(final StringBuilder currentTraversal) throws ScriptException {
- if (currentTraversal.toString().contains("$") || currentTraversal.toString().contains("@"))
+ if (currentTraversal.toString().contains("$"))
throw new VerificationException("Lambdas are currently not supported: " + currentTraversal.toString(), EmptyTraversal.instance());
final Bindings jythonBindings = new SimpleBindings();
@@ -97,7 +104,7 @@ public class PythonVariantConverter implements VariantConverter {
currentTraversal.append("[").append(objects[0]).append(":").append(objects[1]).append("]");
else if (stepName.equals("limit") && 1 == objects.length)
currentTraversal.append("[0:").append(objects[0]).append("]");
- else if (stepName.equals("values") && 1 == objects.length && !currentTraversal.toString().equals("__"))
+ else if (stepName.equals("values") && 1 == objects.length && !currentTraversal.toString().equals("__") && !STEP_NAMES.contains(objects[0].toString()))
currentTraversal.append(".").append(objects[0]);
else {
String temp = "." + convertStepName(stepName) + "(";
@@ -134,7 +141,7 @@ public class PythonVariantConverter implements VariantConverter {
else if (object instanceof Column)
return "Column." + object.toString();
else if (object instanceof P)
- return "P." + ((P) object).getBiPredicate() + "(" + (((P) object).getValue() instanceof String ? "'" + ((P) object).getValue() + "'" : convertToString(((P) object).getValue())) + ")";
+ return convertPToString((P) object, new StringBuilder()).toString();
else if (object instanceof T)
return "T." + object.toString();
else if (object instanceof Order)
@@ -158,4 +165,17 @@ public class PythonVariantConverter implements VariantConverter {
return stepName;
}
+ private static StringBuilder convertPToString(final P p, final StringBuilder current) {
+ if (p instanceof ConnectiveP) {
+ final List<P<?>> list = ((ConnectiveP) p).getPredicates();
+ for (int i = 0; i < list.size(); i++) {
+ convertPToString(list.get(i), current);
+ if (i < list.size() - 1)
+ current.append(p instanceof OrP ? "._or(" : "._and(");
+ }
+ current.append(")");
+ } else
+ current.append("P.").append(p.getBiPredicate().toString()).append("(").append(convertToString(p.getValue())).append(")");
+ return current;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4b355c15/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py b/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
index fcad0fe..2d33788 100644
--- a/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
+++ b/gremlin-variant/variants/python/gremlin-python-3.2.1-SNAPSHOT.py
@@ -122,15 +122,18 @@ class P(object):
def without(*args):
return P("P.without(" + Helper.stringify(*args) + ")")
@staticmethod
- def negate(*args):
- return P("P.negate(" + Helper.stringify(*args) + ")")
- @staticmethod
def outside(*args):
return P("P.outside(" + Helper.stringify(*args) + ")")
@staticmethod
+ def negate(*args):
+ return P("P.negate(" + Helper.stringify(*args) + ")")
+ @staticmethod
def clone(*args):
return P("P.clone(" + Helper.stringify(*args) + ")")
@staticmethod
+ def _not(*args):
+ return P("P.not(" + Helper.stringify(*args) + ")")
+ @staticmethod
def gte(*args):
return P("P.gte(" + Helper.stringify(*args) + ")")
@staticmethod
@@ -146,8 +149,6 @@ class P(object):
return P(self.pString + ".and(" + Helper.stringify(arg) + ")")
def _or(self, arg):
return P(self.pString + ".or(" + Helper.stringify(arg) + ")")
- def _not(self, arg):
- return P(self.pString + ".not(" + Helper.stringify(arg) + ")")
class Pop(object):
@@ -250,12 +251,12 @@ class PythonGraphTraversal(object):
def coalesce(self, *args):
self.traversalString = self.traversalString + ".coalesce(" + Helper.stringify(*args) + ")"
return self
- def optional(self, *args):
- self.traversalString = self.traversalString + ".optional(" + Helper.stringify(*args) + ")"
- return self
def hasLabel(self, *args):
self.traversalString = self.traversalString + ".hasLabel(" + Helper.stringify(*args) + ")"
return self
+ def optional(self, *args):
+ self.traversalString = self.traversalString + ".optional(" + Helper.stringify(*args) + ")"
+ return self
def hasValue(self, *args):
self.traversalString = self.traversalString + ".hasValue(" + Helper.stringify(*args) + ")"
return self
@@ -545,12 +546,12 @@ class __(object):
def coalesce(*args):
return PythonGraphTraversal("__").coalesce(*args)
@staticmethod
- def optional(*args):
- return PythonGraphTraversal("__").optional(*args)
- @staticmethod
def hasLabel(*args):
return PythonGraphTraversal("__").hasLabel(*args)
@staticmethod
+ def optional(*args):
+ return PythonGraphTraversal("__").optional(*args)
+ @staticmethod
def hasValue(*args):
return PythonGraphTraversal("__").hasValue(*args)
@staticmethod