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/17 14:23:37 UTC

[1/5] tinkerpop git commit: cpython gitignore

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 3dc16ac53 -> ac08ae678


cpython gitignore


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/210d1a87
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/210d1a87
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/210d1a87

Branch: refs/heads/TINKERPOP-1278
Commit: 210d1a87fc0532b77ccf67bed57e149982b1e08a
Parents: f5925e7
Author: Leifur Halldor Asgeirsson <la...@zerofail.com>
Authored: Thu Jun 16 10:13:10 2016 -0400
Committer: Leifur Halldor Asgeirsson <la...@zerofail.com>
Committed: Thu Jun 16 13:01:37 2016 -0400

----------------------------------------------------------------------
 gremlin-variant/src/main/jython/gremlin_python/.gitignore | 2 ++
 1 file changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/210d1a87/gremlin-variant/src/main/jython/gremlin_python/.gitignore
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/.gitignore b/gremlin-variant/src/main/jython/gremlin_python/.gitignore
new file mode 100644
index 0000000..2a33696
--- /dev/null
+++ b/gremlin-variant/src/main/jython/gremlin_python/.gitignore
@@ -0,0 +1,2 @@
+__pycache__/
+*.py[cdo]


[3/5] tinkerpop git commit: bindings are now 2-tuples: ('symbol', value)

Posted by ok...@apache.org.
bindings are now 2-tuples: ('symbol', value)


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/aeefd010
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/aeefd010
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/aeefd010

Branch: refs/heads/TINKERPOP-1278
Commit: aeefd010ad6589741ecb201fe70ac4b558d5829b
Parents: 2ea48c4
Author: Leifur Halldor Asgeirsson <la...@zerofail.com>
Authored: Thu Jun 16 17:36:37 2016 -0400
Committer: Leifur Halldor Asgeirsson <la...@zerofail.com>
Committed: Thu Jun 16 17:36:37 2016 -0400

----------------------------------------------------------------------
 .../python/GremlinPythonGenerator.groovy        |  10 +-
 .../jython/gremlin_python/gremlin_python.py     | 406 +++++++++----------
 .../jython/gremlin_python/groovy_translator.py  |   4 +-
 3 files changed, 210 insertions(+), 210 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/aeefd010/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
index 37b72f1..29c5a33 100644
--- a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
+++ b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
@@ -177,8 +177,8 @@ builtInRange = range
                         """  def ${method}(self, *args):
     self.translator.addStep(self, "${method}", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
@@ -239,9 +239,9 @@ builtInRange = range
       self.parts = [self._process_arg(arg) for arg in args]
 
    def _process_arg(self, arg):
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-         self.bindings.update(arg)
-         return Raw(next(iter(arg.keys())))
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+         self.bindings[arg[0]] = arg[1]
+         return Raw(arg[0])
       else:
          return Raw(arg)
 """)

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/aeefd010/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
index 6978ada..4a58dc5 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
@@ -120,800 +120,800 @@ class PythonGraphTraversal(object):
   def V(self, *args):
     self.translator.addStep(self, "V", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _and(self, *args):
     self.translator.addStep(self, "_and", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _as(self, *args):
     self.translator.addStep(self, "_as", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _from(self, *args):
     self.translator.addStep(self, "_from", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _in(self, *args):
     self.translator.addStep(self, "_in", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _is(self, *args):
     self.translator.addStep(self, "_is", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _not(self, *args):
     self.translator.addStep(self, "_not", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def _or(self, *args):
     self.translator.addStep(self, "_or", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def addE(self, *args):
     self.translator.addStep(self, "addE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def addInE(self, *args):
     self.translator.addStep(self, "addInE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def addOutE(self, *args):
     self.translator.addStep(self, "addOutE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def addV(self, *args):
     self.translator.addStep(self, "addV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def aggregate(self, *args):
     self.translator.addStep(self, "aggregate", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def asAdmin(self, *args):
     self.translator.addStep(self, "asAdmin", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def barrier(self, *args):
     self.translator.addStep(self, "barrier", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def both(self, *args):
     self.translator.addStep(self, "both", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def bothE(self, *args):
     self.translator.addStep(self, "bothE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def bothV(self, *args):
     self.translator.addStep(self, "bothV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def branch(self, *args):
     self.translator.addStep(self, "branch", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def by(self, *args):
     self.translator.addStep(self, "by", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def cap(self, *args):
     self.translator.addStep(self, "cap", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def choose(self, *args):
     self.translator.addStep(self, "choose", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def coalesce(self, *args):
     self.translator.addStep(self, "coalesce", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def coin(self, *args):
     self.translator.addStep(self, "coin", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def constant(self, *args):
     self.translator.addStep(self, "constant", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def count(self, *args):
     self.translator.addStep(self, "count", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def cyclicPath(self, *args):
     self.translator.addStep(self, "cyclicPath", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def dedup(self, *args):
     self.translator.addStep(self, "dedup", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def drop(self, *args):
     self.translator.addStep(self, "drop", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def emit(self, *args):
     self.translator.addStep(self, "emit", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def filter(self, *args):
     self.translator.addStep(self, "filter", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def flatMap(self, *args):
     self.translator.addStep(self, "flatMap", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def fold(self, *args):
     self.translator.addStep(self, "fold", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def group(self, *args):
     self.translator.addStep(self, "group", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def groupCount(self, *args):
     self.translator.addStep(self, "groupCount", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def groupV3d0(self, *args):
     self.translator.addStep(self, "groupV3d0", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def has(self, *args):
     self.translator.addStep(self, "has", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def hasId(self, *args):
     self.translator.addStep(self, "hasId", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def hasKey(self, *args):
     self.translator.addStep(self, "hasKey", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def hasLabel(self, *args):
     self.translator.addStep(self, "hasLabel", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def hasNot(self, *args):
     self.translator.addStep(self, "hasNot", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def hasValue(self, *args):
     self.translator.addStep(self, "hasValue", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def id(self, *args):
     self.translator.addStep(self, "id", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def identity(self, *args):
     self.translator.addStep(self, "identity", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def inE(self, *args):
     self.translator.addStep(self, "inE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def inV(self, *args):
     self.translator.addStep(self, "inV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def inject(self, *args):
     self.translator.addStep(self, "inject", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def iterate(self, *args):
     self.translator.addStep(self, "iterate", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def key(self, *args):
     self.translator.addStep(self, "key", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def label(self, *args):
     self.translator.addStep(self, "label", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def limit(self, *args):
     self.translator.addStep(self, "limit", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def local(self, *args):
     self.translator.addStep(self, "local", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def loops(self, *args):
     self.translator.addStep(self, "loops", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def map(self, *args):
     self.translator.addStep(self, "map", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def mapKeys(self, *args):
     self.translator.addStep(self, "mapKeys", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def mapValues(self, *args):
     self.translator.addStep(self, "mapValues", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def match(self, *args):
     self.translator.addStep(self, "match", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def max(self, *args):
     self.translator.addStep(self, "max", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def mean(self, *args):
     self.translator.addStep(self, "mean", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def min(self, *args):
     self.translator.addStep(self, "min", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def option(self, *args):
     self.translator.addStep(self, "option", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def optional(self, *args):
     self.translator.addStep(self, "optional", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def order(self, *args):
     self.translator.addStep(self, "order", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def otherV(self, *args):
     self.translator.addStep(self, "otherV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def out(self, *args):
     self.translator.addStep(self, "out", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def outE(self, *args):
     self.translator.addStep(self, "outE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def outV(self, *args):
     self.translator.addStep(self, "outV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def pageRank(self, *args):
     self.translator.addStep(self, "pageRank", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def path(self, *args):
     self.translator.addStep(self, "path", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def peerPressure(self, *args):
     self.translator.addStep(self, "peerPressure", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def profile(self, *args):
     self.translator.addStep(self, "profile", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def program(self, *args):
     self.translator.addStep(self, "program", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def project(self, *args):
     self.translator.addStep(self, "project", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def properties(self, *args):
     self.translator.addStep(self, "properties", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def property(self, *args):
     self.translator.addStep(self, "property", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def propertyMap(self, *args):
     self.translator.addStep(self, "propertyMap", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def range(self, *args):
     self.translator.addStep(self, "range", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def repeat(self, *args):
     self.translator.addStep(self, "repeat", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def sack(self, *args):
     self.translator.addStep(self, "sack", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def sample(self, *args):
     self.translator.addStep(self, "sample", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def select(self, *args):
     self.translator.addStep(self, "select", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def sideEffect(self, *args):
     self.translator.addStep(self, "sideEffect", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def simplePath(self, *args):
     self.translator.addStep(self, "simplePath", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def store(self, *args):
     self.translator.addStep(self, "store", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def subgraph(self, *args):
     self.translator.addStep(self, "subgraph", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def sum(self, *args):
     self.translator.addStep(self, "sum", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def tail(self, *args):
     self.translator.addStep(self, "tail", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def timeLimit(self, *args):
     self.translator.addStep(self, "timeLimit", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def times(self, *args):
     self.translator.addStep(self, "times", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def to(self, *args):
     self.translator.addStep(self, "to", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def toE(self, *args):
     self.translator.addStep(self, "toE", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def toV(self, *args):
     self.translator.addStep(self, "toV", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def tree(self, *args):
     self.translator.addStep(self, "tree", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def unfold(self, *args):
     self.translator.addStep(self, "unfold", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def union(self, *args):
     self.translator.addStep(self, "union", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def until(self, *args):
     self.translator.addStep(self, "until", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def value(self, *args):
     self.translator.addStep(self, "value", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def valueMap(self, *args):
     self.translator.addStep(self, "valueMap", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def values(self, *args):
     self.translator.addStep(self, "values", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
   def where(self, *args):
     self.translator.addStep(self, "where", *args)
     for arg in args:
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-        self.bindings.update(arg)
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+        self.bindings[arg[0]] = arg[1]
       elif isinstance(arg, RawExpression):
         self.bindings.update(arg.bindings)
     return self
@@ -1640,9 +1640,9 @@ class RawExpression(object):
       self.parts = [self._process_arg(arg) for arg in args]
 
    def _process_arg(self, arg):
-      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
-         self.bindings.update(arg)
-         return Raw(next(iter(arg.keys())))
+      if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):
+         self.bindings[arg[0]] = arg[1]
+         return Raw(arg[0])
       else:
          return Raw(arg)
 

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/aeefd010/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py b/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
index ae1462d..2e30841 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
@@ -104,8 +104,8 @@ class GroovyTranslator(Translator):
                 return lambdaString
             else:
                 return "{" + lambdaString + "}"
-        elif isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0], str):  # bindings
-            return arg.keys()[0]
+        elif isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str):  # bindings
+            return arg[0]
         elif isinstance(arg, RawExpression):
             return "".join(GroovyTranslator.stringOrObject(i) for i in arg.parts)
         elif isinstance(arg, Raw):


[5/5] tinkerpop git commit: Merge branch 'raw_expr' of https://github.com/leifurhauks/incubator-tinkerpop into TINKERPOP-1278

Posted by ok...@apache.org.
Merge branch 'raw_expr' of https://github.com/leifurhauks/incubator-tinkerpop into TINKERPOP-1278


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ac08ae67
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ac08ae67
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ac08ae67

Branch: refs/heads/TINKERPOP-1278
Commit: ac08ae6786c5b905c9b221678eaf653c80d409af
Parents: 3dc16ac 65ca75d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri Jun 17 08:19:38 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri Jun 17 08:19:38 2016 -0600

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc    |  34 +
 .../python/GremlinPythonGenerator.groovy        |  31 +-
 .../src/main/jython/gremlin_python/.gitignore   |   2 +
 .../jython/gremlin_python/gremlin_python.py     | 619 +++++++++++++------
 .../jython/gremlin_python/groovy_translator.py  |  10 +-
 5 files changed, 492 insertions(+), 204 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ac08ae67/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ac08ae67/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
----------------------------------------------------------------------


[4/5] tinkerpop git commit: docs: usage example for gremlin_python.RawExpression

Posted by ok...@apache.org.
docs: usage example for gremlin_python.RawExpression


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/65ca75d0
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/65ca75d0
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/65ca75d0

Branch: refs/heads/TINKERPOP-1278
Commit: 65ca75d008f25902b4a1376ad77d186cce5126dd
Parents: aeefd01
Author: Leifur Halldor Asgeirsson <la...@zerofail.com>
Authored: Thu Jun 16 17:37:49 2016 -0400
Committer: Leifur Halldor Asgeirsson <la...@zerofail.com>
Committed: Thu Jun 16 17:37:49 2016 -0400

----------------------------------------------------------------------
 docs/src/reference/gremlin-variants.asciidoc | 34 +++++++++++++++++++++++
 1 file changed, 34 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/65ca75d0/docs/src/reference/gremlin-variants.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/reference/gremlin-variants.asciidoc b/docs/src/reference/gremlin-variants.asciidoc
index 2ea9afd..04ee72f 100644
--- a/docs/src/reference/gremlin-variants.asciidoc
+++ b/docs/src/reference/gremlin-variants.asciidoc
@@ -157,3 +157,37 @@ g.V().both()[1]
 g.V().both().name
 ----
 
+Inserting arbitrary expressions with Gremlin-Python
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To make use of APIs provided by your graph system vendor that aren't part of
+the gremlin traversal API, you can use `RawExpression`. `RawExpression` allows
+you to construct arbitrary expressions that collect bindings. When you pass
+strings and bindings to the `RawExpression` constructor, the arguments will
+be concatenated in the script that is sent to gremlin-server.
+
+The following example uses `RawExpression` to call the `Geoshape.point` static
+constructor method on the `Geoshape` class provided by TitanDB.
+
+[source,python]
+g.V().has('location', RawExpression('Geoshape.point(', ('x', 45), ', ', ('y', -45), ')'))
+# sends the following script to gremlin-server:
+# g.V().has("location", Geoshape.point(x, y))
+#
+# with the following bindings: {'x': 45, 'y': -45}
+
+To help readability, especially if you will be using the expression more than
+once, it is recommended to use this in conjunction with a helper class as in
+the following example:
+
+[source,python]
+class Geoshape(object):
+    @staticmethod
+    def point(latitude, longitude):
+        return RawExpression('Geoshape.point(', latitude, ', ', longitude, ')')
+
+The previous traversal can now be written much more simply:
+
+[source,python]
+g.V().has('location', Geoshape.point(('x', 45), ('y', -45)))
+


[2/5] tinkerpop git commit: add RawExpression to gremlin_python

Posted by ok...@apache.org.
add RawExpression to gremlin_python

As described on dev@tinkerpop.apache.org thread gremlin_python GLV


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2ea48c4b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2ea48c4b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2ea48c4b

Branch: refs/heads/TINKERPOP-1278
Commit: 2ea48c4b586c1d21c4b730838f696ef299fbd49f
Parents: 210d1a8
Author: Leifur Halldor Asgeirsson <la...@zerofail.com>
Authored: Thu Jun 16 11:59:58 2016 -0400
Committer: Leifur Halldor Asgeirsson <la...@zerofail.com>
Committed: Thu Jun 16 16:23:46 2016 -0400

----------------------------------------------------------------------
 .../python/GremlinPythonGenerator.groovy        |  27 +++
 .../jython/gremlin_python/gremlin_python.py     | 219 +++++++++++++++++++
 .../jython/gremlin_python/groovy_translator.py  |   6 +
 3 files changed, 252 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2ea48c4b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
index 9289d99..37b72f1 100644
--- a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
+++ b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/python/GremlinPythonGenerator.groovy
@@ -179,6 +179,8 @@ builtInRange = range
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
 """)
             }
@@ -230,6 +232,31 @@ builtInRange = range
             pythonClass.append("\n");
         }
         //////////////
+
+        pythonClass.append("""class RawExpression(object):
+   def __init__(self, *args):
+      self.bindings = dict()
+      self.parts = [self._process_arg(arg) for arg in args]
+
+   def _process_arg(self, arg):
+      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
+         self.bindings.update(arg)
+         return Raw(next(iter(arg.keys())))
+      else:
+         return Raw(arg)
+""")
+
+        pythonClass.append("\n")
+        pythonClass.append("""class Raw(object):
+   def __init__(self, value):
+      self.value = value
+
+   def __str__(self):
+      return str(self.value)
+""")
+
+        pythonClass.append("\n")
+
         pythonClass.append("""class P(object):
    def __init__(self, operator, value, other=None):
       self.operator = operator

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2ea48c4b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
index 23d53e6..6978ada 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
@@ -122,600 +122,800 @@ class PythonGraphTraversal(object):
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _and(self, *args):
     self.translator.addStep(self, "_and", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _as(self, *args):
     self.translator.addStep(self, "_as", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _from(self, *args):
     self.translator.addStep(self, "_from", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _in(self, *args):
     self.translator.addStep(self, "_in", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _is(self, *args):
     self.translator.addStep(self, "_is", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _not(self, *args):
     self.translator.addStep(self, "_not", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def _or(self, *args):
     self.translator.addStep(self, "_or", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def addE(self, *args):
     self.translator.addStep(self, "addE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def addInE(self, *args):
     self.translator.addStep(self, "addInE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def addOutE(self, *args):
     self.translator.addStep(self, "addOutE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def addV(self, *args):
     self.translator.addStep(self, "addV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def aggregate(self, *args):
     self.translator.addStep(self, "aggregate", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def asAdmin(self, *args):
     self.translator.addStep(self, "asAdmin", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def barrier(self, *args):
     self.translator.addStep(self, "barrier", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def both(self, *args):
     self.translator.addStep(self, "both", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def bothE(self, *args):
     self.translator.addStep(self, "bothE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def bothV(self, *args):
     self.translator.addStep(self, "bothV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def branch(self, *args):
     self.translator.addStep(self, "branch", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def by(self, *args):
     self.translator.addStep(self, "by", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def cap(self, *args):
     self.translator.addStep(self, "cap", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def choose(self, *args):
     self.translator.addStep(self, "choose", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def coalesce(self, *args):
     self.translator.addStep(self, "coalesce", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def coin(self, *args):
     self.translator.addStep(self, "coin", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def constant(self, *args):
     self.translator.addStep(self, "constant", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def count(self, *args):
     self.translator.addStep(self, "count", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def cyclicPath(self, *args):
     self.translator.addStep(self, "cyclicPath", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def dedup(self, *args):
     self.translator.addStep(self, "dedup", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def drop(self, *args):
     self.translator.addStep(self, "drop", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def emit(self, *args):
     self.translator.addStep(self, "emit", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def filter(self, *args):
     self.translator.addStep(self, "filter", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def flatMap(self, *args):
     self.translator.addStep(self, "flatMap", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def fold(self, *args):
     self.translator.addStep(self, "fold", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def group(self, *args):
     self.translator.addStep(self, "group", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def groupCount(self, *args):
     self.translator.addStep(self, "groupCount", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def groupV3d0(self, *args):
     self.translator.addStep(self, "groupV3d0", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def has(self, *args):
     self.translator.addStep(self, "has", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def hasId(self, *args):
     self.translator.addStep(self, "hasId", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def hasKey(self, *args):
     self.translator.addStep(self, "hasKey", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def hasLabel(self, *args):
     self.translator.addStep(self, "hasLabel", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def hasNot(self, *args):
     self.translator.addStep(self, "hasNot", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def hasValue(self, *args):
     self.translator.addStep(self, "hasValue", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def id(self, *args):
     self.translator.addStep(self, "id", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def identity(self, *args):
     self.translator.addStep(self, "identity", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def inE(self, *args):
     self.translator.addStep(self, "inE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def inV(self, *args):
     self.translator.addStep(self, "inV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def inject(self, *args):
     self.translator.addStep(self, "inject", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def iterate(self, *args):
     self.translator.addStep(self, "iterate", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def key(self, *args):
     self.translator.addStep(self, "key", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def label(self, *args):
     self.translator.addStep(self, "label", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def limit(self, *args):
     self.translator.addStep(self, "limit", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def local(self, *args):
     self.translator.addStep(self, "local", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def loops(self, *args):
     self.translator.addStep(self, "loops", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def map(self, *args):
     self.translator.addStep(self, "map", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def mapKeys(self, *args):
     self.translator.addStep(self, "mapKeys", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def mapValues(self, *args):
     self.translator.addStep(self, "mapValues", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def match(self, *args):
     self.translator.addStep(self, "match", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def max(self, *args):
     self.translator.addStep(self, "max", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def mean(self, *args):
     self.translator.addStep(self, "mean", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def min(self, *args):
     self.translator.addStep(self, "min", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def option(self, *args):
     self.translator.addStep(self, "option", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def optional(self, *args):
     self.translator.addStep(self, "optional", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def order(self, *args):
     self.translator.addStep(self, "order", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def otherV(self, *args):
     self.translator.addStep(self, "otherV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def out(self, *args):
     self.translator.addStep(self, "out", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def outE(self, *args):
     self.translator.addStep(self, "outE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def outV(self, *args):
     self.translator.addStep(self, "outV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def pageRank(self, *args):
     self.translator.addStep(self, "pageRank", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def path(self, *args):
     self.translator.addStep(self, "path", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def peerPressure(self, *args):
     self.translator.addStep(self, "peerPressure", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def profile(self, *args):
     self.translator.addStep(self, "profile", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def program(self, *args):
     self.translator.addStep(self, "program", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def project(self, *args):
     self.translator.addStep(self, "project", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def properties(self, *args):
     self.translator.addStep(self, "properties", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def property(self, *args):
     self.translator.addStep(self, "property", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def propertyMap(self, *args):
     self.translator.addStep(self, "propertyMap", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def range(self, *args):
     self.translator.addStep(self, "range", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def repeat(self, *args):
     self.translator.addStep(self, "repeat", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def sack(self, *args):
     self.translator.addStep(self, "sack", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def sample(self, *args):
     self.translator.addStep(self, "sample", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def select(self, *args):
     self.translator.addStep(self, "select", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def sideEffect(self, *args):
     self.translator.addStep(self, "sideEffect", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def simplePath(self, *args):
     self.translator.addStep(self, "simplePath", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def store(self, *args):
     self.translator.addStep(self, "store", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def subgraph(self, *args):
     self.translator.addStep(self, "subgraph", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def sum(self, *args):
     self.translator.addStep(self, "sum", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def tail(self, *args):
     self.translator.addStep(self, "tail", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def timeLimit(self, *args):
     self.translator.addStep(self, "timeLimit", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def times(self, *args):
     self.translator.addStep(self, "times", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def to(self, *args):
     self.translator.addStep(self, "to", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def toE(self, *args):
     self.translator.addStep(self, "toE", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def toV(self, *args):
     self.translator.addStep(self, "toV", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def tree(self, *args):
     self.translator.addStep(self, "tree", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def unfold(self, *args):
     self.translator.addStep(self, "unfold", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def union(self, *args):
     self.translator.addStep(self, "union", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def until(self, *args):
     self.translator.addStep(self, "until", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def value(self, *args):
     self.translator.addStep(self, "value", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def valueMap(self, *args):
     self.translator.addStep(self, "valueMap", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def values(self, *args):
     self.translator.addStep(self, "values", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
   def where(self, *args):
     self.translator.addStep(self, "where", *args)
     for arg in args:
       if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
         self.bindings.update(arg)
+      elif isinstance(arg, RawExpression):
+        self.bindings.update(arg.bindings)
     return self
 
 
@@ -1434,6 +1634,25 @@ statics['id'] = T.id
 statics['key'] = T.key
 statics['value'] = T.value
 
+class RawExpression(object):
+   def __init__(self, *args):
+      self.bindings = dict()
+      self.parts = [self._process_arg(arg) for arg in args]
+
+   def _process_arg(self, arg):
+      if isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0],str):
+         self.bindings.update(arg)
+         return Raw(next(iter(arg.keys())))
+      else:
+         return Raw(arg)
+
+class Raw(object):
+   def __init__(self, value):
+      self.value = value
+
+   def __str__(self):
+      return str(self.value)
+
 class P(object):
    def __init__(self, operator, value, other=None):
       self.operator = operator

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2ea48c4b/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py b/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
index dc9ac34..ae1462d 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/groovy_translator.py
@@ -21,6 +21,8 @@ import sys
 from aenum import Enum
 
 from gremlin_python import P
+from gremlin_python import Raw
+from gremlin_python import RawExpression
 from translator import Translator
 
 if sys.version_info.major > 2:
@@ -104,6 +106,10 @@ class GroovyTranslator(Translator):
                 return "{" + lambdaString + "}"
         elif isinstance(arg, dict) and 1 == len(arg) and isinstance(arg.keys()[0], str):  # bindings
             return arg.keys()[0]
+        elif isinstance(arg, RawExpression):
+            return "".join(GroovyTranslator.stringOrObject(i) for i in arg.parts)
+        elif isinstance(arg, Raw):
+            return str(arg)
         else:
             return str(arg)