Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 ed91e8291 -> 2bce67b96


implemented gremlin_rest_driver and now have it working with Gremlin-Python. 
All done.


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

Branch: refs/heads/TINKERPOP-1278
Commit: 2bce67b9633582be38d78df19d64396d3845e441
Parents: ed91e82
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Fri Jun 3 09:16:45 2016 -0600
Committer: Marko A. Rodriguez <okramma...@gmail.com>
Committed: Fri Jun 3 09:16:45 2016 -0600

----------------------------------------------------------------------
 .../python/GremlinPythonGenerator.groovy        |  60 +-
 .../jython/gremlin_driver/gremlin_driver.py     |   2 +
 .../jython/gremlin_python/gremlin_python.py     | 557 +++++++++++++------
 .../gremlin_rest_driver/gremlin_rest_driver.py  |  24 +-
 .../variant/python/PythonVariantConverter.java  |   8 +-
 5 files changed, 439 insertions(+), 212 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2bce67b9/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
 
b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
index fe32b54..5e0652a 100644
--- 
a/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
+++ 
b/gremlin-variant/src/main/groovy/org/apache/tinkerpop/gremlin/process/variant/python/GremlinPythonGenerator.groovy
@@ -77,8 +77,8 @@ under the License.
         final Map<String, String> enumMap = [Cardinality: 
"VertexProperty.Cardinality", Barrier: "SackFunctions.Barrier"]
                 .withDefault { it }
 
-        pythonClass.append("import sys\n")
-        pythonClass.append("from gremlin_driver import RemoteConnection\n")
+        pythonClass.append("from collections import OrderedDict\n\n")
+        pythonClass.append("statics = OrderedDict()\n\n")
         pythonClass.append("""
 class Helper(object):
   @staticmethod
@@ -111,10 +111,14 @@ class Helper(object):
 //////////////////////////
         pythonClass.append(
                 """class PythonGraphTraversalSource(object):
-  def __init__(self, traversalSourceString):
+  def __init__(self, traversalSourceString, remoteConnection):
     self.traversalSourceString = traversalSourceString
+    self.remoteConnection = remoteConnection
   def __repr__(self):
-    return "graphtraversalsource[" + self.traversalSourceString + "]"
+    if self.remoteConnection is None:
+      return "graphtraversalsource[no connection, " + 
self.traversalSourceString + "]"
+    else:
+      return "graphtraversalsource[" + str(self.remoteConnection) + ", " + 
self.traversalSourceString + "]"
 """)
         GraphTraversalSource.getMethods()
                 .collect { it.name }
@@ -130,12 +134,12 @@ class Helper(object):
                 if (Traversal.isAssignableFrom(returnType)) {
                     pythonClass.append(
                             """  def ${method}(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".${method}(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".${method}(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
 """)
                 } else if (TraversalSource.isAssignableFrom(returnType)) {
                     pythonClass.append(
                             """  def ${method}(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".${method}(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".${method}(" + Helper.stringify(*args) + ")", self.remoteConnection)
 """)
                 }
             }
@@ -147,11 +151,11 @@ class Helper(object):
 ////////////////////
         pythonClass.append(
                 """class PythonGraphTraversal(object):
-  def __init__(self, traversalString):
+  def __init__(self, traversalString, remoteConnection=None):
     self.traversalString = traversalString
+    self.remoteConnection = remoteConnection
     self.results = None
     self.lastTraverser = None
-    self.remoteConnection = 
RemoteConnection("http://tinkerpop.apache.org","gremlin-groovy";)
   def __repr__(self):
     return self.traversalString
   def __getitem__(self,index):
@@ -165,6 +169,8 @@ class Helper(object):
     return self.values(key)
   def __iter__(self):
         return self
+  def toList(self):
+    return list(iter(self))
   def next(self):
      if self.results is None:
         self.results = self.remoteConnection.submit(self.traversalString)
@@ -212,14 +218,16 @@ class Helper(object):
         };
         pythonClass.append("\n\n")
 
-        pythonClass.append("if(sys.argv[0]):\n")
         __.class.getMethods()
                 .findAll { 
Traversal.class.isAssignableFrom(it.getReturnType()) }
                 .findAll { !it.name.equals("__") }
                 .collect { methodMap[it.name] }
                 .unique()
                 .sort { a, b -> a <=> b }
-                .forEach { pythonClass.append("   def 
${it}(*args):\n").append("      return __.${it}(*args)\n") }
+                .forEach {
+            pythonClass.append("def ${it}(*args):\n").append("      return 
__.${it}(*args)\n\n")
+            pythonClass.append("statics['${it}'] = ${it}\n")
+        }
         pythonClass.append("\n\n")
 
 ///////////
@@ -236,9 +244,8 @@ class Helper(object):
             pythonClass.append("   ${value} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Column.values().each { value ->
-            pythonClass.append("   ${value} = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
+            pythonClass.append("statics['${value}'] = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -247,9 +254,8 @@ class Helper(object):
             pythonClass.append("   ${value} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Direction.values().each { value ->
-            pythonClass.append("   ${value} = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
+            pythonClass.append("statics['${value}'] = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -258,9 +264,8 @@ class Helper(object):
             pythonClass.append("   ${methodMap[value.name()]} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Operator.values().each { value ->
-            pythonClass.append("   ${methodMap[value.name()]} = 
${value.getDeclaringClass().getSimpleName()}.${methodMap[value.name()]}\n");
+            pythonClass.append("statics['${methodMap[value.name()]}'] = 
${value.getDeclaringClass().getSimpleName()}.${methodMap[value.name()]}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -269,9 +274,8 @@ class Helper(object):
             pythonClass.append("   ${value} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Order.values().each { value ->
-            pythonClass.append("   ${value} = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
+            pythonClass.append("statics['${value}'] = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -301,13 +305,15 @@ class Helper(object):
       return P(self.pString + ".or(" + Helper.stringify(arg) + ")")
 """)
         pythonClass.append("\n")
-        pythonClass.append("if(sys.argv[0]):\n")
         P.class.getMethods()
                 .findAll { P.class.isAssignableFrom(it.getReturnType()) }
                 .collect { methodMap[it.name] }
                 .unique()
                 .sort { a, b -> a <=> b }
-                .forEach { pythonClass.append("   def 
${it}(*args):\n").append("      return P.${it}(*args)\n") }
+                .forEach {
+            pythonClass.append("def ${it}(*args):\n").append("      return 
P.${it}(*args)\n\n")
+            pythonClass.append("statics['${it}'] = ${it}\n")
+        }
         pythonClass.append("\n")
         //////////////
         pythonClass.append("class Pop(object):\n");
@@ -315,9 +321,8 @@ class Helper(object):
             pythonClass.append("   ${value} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Pop.values().each { value ->
-            pythonClass.append("   ${value.name()} = 
${value.getDeclaringClass().getSimpleName()}.${value.name()}\n");
+            pythonClass.append("statics['${value}'] =  
${value.getDeclaringClass().getSimpleName()}.${value.name()}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -325,17 +330,15 @@ class Helper(object):
    normSack = "SackFunctions.Barrier.normSack"
 """);
         pythonClass.append("\n")
-        pythonClass.append("if(sys.argv[0]):\n")
-        pythonClass.append("   normSack = Barrier.normSack\n\n")
+        pythonClass.append("statics['normSack'] = Barrier.normSack\n\n")
         //////////////
         pythonClass.append("class Scope(object):\n");
         Scope.values().each { value ->
             pythonClass.append("   ${methodMap[value.name()]} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         Scope.values().each { value ->
-            pythonClass.append("   ${methodMap[value.name()]} = 
${value.getDeclaringClass().getSimpleName()}.${methodMap[value.name()]}\n");
+            pythonClass.append("statics['${methodMap[value.name()]}'] = 
${value.getDeclaringClass().getSimpleName()}.${methodMap[value.name()]}\n");
         }
         pythonClass.append("\n");
         //////////////
@@ -344,12 +347,13 @@ class Helper(object):
             pythonClass.append("   ${value} = 
\"${value.getDeclaringClass().getSimpleName()}.${value}\"\n");
         }
         pythonClass.append("\n");
-        pythonClass.append("if(sys.argv[0]):\n")
         T.values().each { value ->
-            pythonClass.append("   ${value} = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
+            pythonClass.append("statics['${value}'] = 
${value.getDeclaringClass().getSimpleName()}.${value}\n");
         }
         pythonClass.append("\n");
 
+        pythonClass.append("statics = 
OrderedDict(reversed(list(statics.items())))\n")
+
 // save to a python file
         final File file = new File(gremlinPythonFile);
         file.delete()

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2bce67b9/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py
----------------------------------------------------------------------
diff --git a/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py 
b/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py
index 0e0d89a..c3dd4bc 100644
--- a/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py
+++ b/gremlin-variant/src/main/jython/gremlin_driver/gremlin_driver.py
@@ -25,6 +25,8 @@ class Traverser(object):
     def __init__(self, object, bulk):
         self.object = object
         self.bulk = bulk
+    def __repr__(self):
+        return str(self.object)
 
 
 class RemoteConnection(object):

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2bce67b9/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 a6fd094..50b6eec 100644
--- a/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
+++ b/gremlin-variant/src/main/jython/gremlin_python/gremlin_python.py
@@ -16,8 +16,10 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.
 '''
-import sys
-from gremlin_driver import RemoteConnection
+from collections import OrderedDict
+
+statics = OrderedDict()
+
 
 class Helper(object):
   @staticmethod
@@ -56,42 +58,46 @@ class Helper(object):
 
 
 class PythonGraphTraversalSource(object):
-  def __init__(self, traversalSourceString):
+  def __init__(self, traversalSourceString, remoteConnection):
     self.traversalSourceString = traversalSourceString
+    self.remoteConnection = remoteConnection
   def __repr__(self):
-    return "graphtraversalsource[" + self.traversalSourceString + "]"
+    if self.remoteConnection is None:
+      return "graphtraversalsource[no connection, " + 
self.traversalSourceString + "]"
+    else:
+      return "graphtraversalsource[" + str(self.remoteConnection) + ", " + 
self.traversalSourceString + "]"
   def E(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".E(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".E(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
   def V(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".V(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".V(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
   def addV(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".addV(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".addV(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
   def clone(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + ".clone(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + ".clone(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
   def inject(self, *args):
-    return PythonGraphTraversal(self.traversalSourceString + ".inject(" + 
Helper.stringify(*args) + ")")
+    return PythonGraphTraversal(self.traversalSourceString + ".inject(" + 
Helper.stringify(*args) + ")", self.remoteConnection)
   def withBulk(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withBulk(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withBulk(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withComputer(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withComputer(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withComputer(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withPath(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withPath(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withPath(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withSack(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withSack(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withSack(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withSideEffect(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withSideEffect(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withSideEffect(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withStrategies(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withStrategies(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withStrategies(" + Helper.stringify(*args) + ")", self.remoteConnection)
   def withoutStrategies(self, *args):
-    return PythonGraphTraversalSource(self.traversalSourceString + 
".withoutStrategies(" + Helper.stringify(*args) + ")")
+    return PythonGraphTraversalSource(self.traversalSourceString + 
".withoutStrategies(" + Helper.stringify(*args) + ")", self.remoteConnection)
 
 
 class PythonGraphTraversal(object):
-  def __init__(self, traversalString):
+  def __init__(self, traversalString, remoteConnection=None):
     self.traversalString = traversalString
+    self.remoteConnection = remoteConnection
     self.results = None
     self.lastTraverser = None
-    self.remoteConnection = 
RemoteConnection("http://tinkerpop.apache.org","gremlin-groovy";)
   def __repr__(self):
     return self.traversalString
   def __getitem__(self,index):
@@ -105,6 +111,8 @@ class PythonGraphTraversal(object):
     return self.values(key)
   def __iter__(self):
         return self
+  def toList(self):
+    return list(iter(self))
   def next(self):
      if self.results is None:
         self.results = self.remoteConnection.submit(self.traversalString)
@@ -699,192 +707,375 @@ class __(object):
     return PythonGraphTraversal("__").where(*args)
 
 
-if(sys.argv[0]):
-   def V(*args):
+def V(*args):
       return __.V(*args)
-   def _and(*args):
+
+statics['V'] = V
+def _and(*args):
       return __._and(*args)
-   def _as(*args):
+
+statics['_and'] = _and
+def _as(*args):
       return __._as(*args)
-   def _in(*args):
+
+statics['_as'] = _as
+def _in(*args):
       return __._in(*args)
-   def _is(*args):
+
+statics['_in'] = _in
+def _is(*args):
       return __._is(*args)
-   def _not(*args):
+
+statics['_is'] = _is
+def _not(*args):
       return __._not(*args)
-   def _or(*args):
+
+statics['_not'] = _not
+def _or(*args):
       return __._or(*args)
-   def addE(*args):
+
+statics['_or'] = _or
+def addE(*args):
       return __.addE(*args)
-   def addInE(*args):
+
+statics['addE'] = addE
+def addInE(*args):
       return __.addInE(*args)
-   def addOutE(*args):
+
+statics['addInE'] = addInE
+def addOutE(*args):
       return __.addOutE(*args)
-   def addV(*args):
+
+statics['addOutE'] = addOutE
+def addV(*args):
       return __.addV(*args)
-   def aggregate(*args):
+
+statics['addV'] = addV
+def aggregate(*args):
       return __.aggregate(*args)
-   def barrier(*args):
+
+statics['aggregate'] = aggregate
+def barrier(*args):
       return __.barrier(*args)
-   def both(*args):
+
+statics['barrier'] = barrier
+def both(*args):
       return __.both(*args)
-   def bothE(*args):
+
+statics['both'] = both
+def bothE(*args):
       return __.bothE(*args)
-   def bothV(*args):
+
+statics['bothE'] = bothE
+def bothV(*args):
       return __.bothV(*args)
-   def branch(*args):
+
+statics['bothV'] = bothV
+def branch(*args):
       return __.branch(*args)
-   def cap(*args):
+
+statics['branch'] = branch
+def cap(*args):
       return __.cap(*args)
-   def choose(*args):
+
+statics['cap'] = cap
+def choose(*args):
       return __.choose(*args)
-   def coalesce(*args):
+
+statics['choose'] = choose
+def coalesce(*args):
       return __.coalesce(*args)
-   def coin(*args):
+
+statics['coalesce'] = coalesce
+def coin(*args):
       return __.coin(*args)
-   def constant(*args):
+
+statics['coin'] = coin
+def constant(*args):
       return __.constant(*args)
-   def count(*args):
+
+statics['constant'] = constant
+def count(*args):
       return __.count(*args)
-   def cyclicPath(*args):
+
+statics['count'] = count
+def cyclicPath(*args):
       return __.cyclicPath(*args)
-   def dedup(*args):
+
+statics['cyclicPath'] = cyclicPath
+def dedup(*args):
       return __.dedup(*args)
-   def drop(*args):
+
+statics['dedup'] = dedup
+def drop(*args):
       return __.drop(*args)
-   def emit(*args):
+
+statics['drop'] = drop
+def emit(*args):
       return __.emit(*args)
-   def filter(*args):
+
+statics['emit'] = emit
+def filter(*args):
       return __.filter(*args)
-   def flatMap(*args):
+
+statics['filter'] = filter
+def flatMap(*args):
       return __.flatMap(*args)
-   def fold(*args):
+
+statics['flatMap'] = flatMap
+def fold(*args):
       return __.fold(*args)
-   def group(*args):
+
+statics['fold'] = fold
+def group(*args):
       return __.group(*args)
-   def groupCount(*args):
+
+statics['group'] = group
+def groupCount(*args):
       return __.groupCount(*args)
-   def groupV3d0(*args):
+
+statics['groupCount'] = groupCount
+def groupV3d0(*args):
       return __.groupV3d0(*args)
-   def has(*args):
+
+statics['groupV3d0'] = groupV3d0
+def has(*args):
       return __.has(*args)
-   def hasId(*args):
+
+statics['has'] = has
+def hasId(*args):
       return __.hasId(*args)
-   def hasKey(*args):
+
+statics['hasId'] = hasId
+def hasKey(*args):
       return __.hasKey(*args)
-   def hasLabel(*args):
+
+statics['hasKey'] = hasKey
+def hasLabel(*args):
       return __.hasLabel(*args)
-   def hasNot(*args):
+
+statics['hasLabel'] = hasLabel
+def hasNot(*args):
       return __.hasNot(*args)
-   def hasValue(*args):
+
+statics['hasNot'] = hasNot
+def hasValue(*args):
       return __.hasValue(*args)
-   def id(*args):
+
+statics['hasValue'] = hasValue
+def id(*args):
       return __.id(*args)
-   def identity(*args):
+
+statics['id'] = id
+def identity(*args):
       return __.identity(*args)
-   def inE(*args):
+
+statics['identity'] = identity
+def inE(*args):
       return __.inE(*args)
-   def inV(*args):
+
+statics['inE'] = inE
+def inV(*args):
       return __.inV(*args)
-   def inject(*args):
+
+statics['inV'] = inV
+def inject(*args):
       return __.inject(*args)
-   def key(*args):
+
+statics['inject'] = inject
+def key(*args):
       return __.key(*args)
-   def label(*args):
+
+statics['key'] = key
+def label(*args):
       return __.label(*args)
-   def limit(*args):
+
+statics['label'] = label
+def limit(*args):
       return __.limit(*args)
-   def local(*args):
+
+statics['limit'] = limit
+def local(*args):
       return __.local(*args)
-   def loops(*args):
+
+statics['local'] = local
+def loops(*args):
       return __.loops(*args)
-   def map(*args):
+
+statics['loops'] = loops
+def map(*args):
       return __.map(*args)
-   def mapKeys(*args):
+
+statics['map'] = map
+def mapKeys(*args):
       return __.mapKeys(*args)
-   def mapValues(*args):
+
+statics['mapKeys'] = mapKeys
+def mapValues(*args):
       return __.mapValues(*args)
-   def match(*args):
+
+statics['mapValues'] = mapValues
+def match(*args):
       return __.match(*args)
-   def max(*args):
+
+statics['match'] = match
+def max(*args):
       return __.max(*args)
-   def mean(*args):
+
+statics['max'] = max
+def mean(*args):
       return __.mean(*args)
-   def min(*args):
+
+statics['mean'] = mean
+def min(*args):
       return __.min(*args)
-   def optional(*args):
+
+statics['min'] = min
+def optional(*args):
       return __.optional(*args)
-   def order(*args):
+
+statics['optional'] = optional
+def order(*args):
       return __.order(*args)
-   def otherV(*args):
+
+statics['order'] = order
+def otherV(*args):
       return __.otherV(*args)
-   def out(*args):
+
+statics['otherV'] = otherV
+def out(*args):
       return __.out(*args)
-   def outE(*args):
+
+statics['out'] = out
+def outE(*args):
       return __.outE(*args)
-   def outV(*args):
+
+statics['outE'] = outE
+def outV(*args):
       return __.outV(*args)
-   def path(*args):
+
+statics['outV'] = outV
+def path(*args):
       return __.path(*args)
-   def project(*args):
+
+statics['path'] = path
+def project(*args):
       return __.project(*args)
-   def properties(*args):
+
+statics['project'] = project
+def properties(*args):
       return __.properties(*args)
-   def property(*args):
+
+statics['properties'] = properties
+def property(*args):
       return __.property(*args)
-   def propertyMap(*args):
+
+statics['property'] = property
+def propertyMap(*args):
       return __.propertyMap(*args)
-   def range(*args):
+
+statics['propertyMap'] = propertyMap
+def range(*args):
       return __.range(*args)
-   def repeat(*args):
+
+statics['range'] = range
+def repeat(*args):
       return __.repeat(*args)
-   def sack(*args):
+
+statics['repeat'] = repeat
+def sack(*args):
       return __.sack(*args)
-   def sample(*args):
+
+statics['sack'] = sack
+def sample(*args):
       return __.sample(*args)
-   def select(*args):
+
+statics['sample'] = sample
+def select(*args):
       return __.select(*args)
-   def sideEffect(*args):
+
+statics['select'] = select
+def sideEffect(*args):
       return __.sideEffect(*args)
-   def simplePath(*args):
+
+statics['sideEffect'] = sideEffect
+def simplePath(*args):
       return __.simplePath(*args)
-   def start(*args):
+
+statics['simplePath'] = simplePath
+def start(*args):
       return __.start(*args)
-   def store(*args):
+
+statics['start'] = start
+def store(*args):
       return __.store(*args)
-   def subgraph(*args):
+
+statics['store'] = store
+def subgraph(*args):
       return __.subgraph(*args)
-   def sum(*args):
+
+statics['subgraph'] = subgraph
+def sum(*args):
       return __.sum(*args)
-   def tail(*args):
+
+statics['sum'] = sum
+def tail(*args):
       return __.tail(*args)
-   def timeLimit(*args):
+
+statics['tail'] = tail
+def timeLimit(*args):
       return __.timeLimit(*args)
-   def times(*args):
+
+statics['timeLimit'] = timeLimit
+def times(*args):
       return __.times(*args)
-   def to(*args):
+
+statics['times'] = times
+def to(*args):
       return __.to(*args)
-   def toE(*args):
+
+statics['to'] = to
+def toE(*args):
       return __.toE(*args)
-   def toV(*args):
+
+statics['toE'] = toE
+def toV(*args):
       return __.toV(*args)
-   def tree(*args):
+
+statics['toV'] = toV
+def tree(*args):
       return __.tree(*args)
-   def unfold(*args):
+
+statics['tree'] = tree
+def unfold(*args):
       return __.unfold(*args)
-   def union(*args):
+
+statics['unfold'] = unfold
+def union(*args):
       return __.union(*args)
-   def until(*args):
+
+statics['union'] = union
+def until(*args):
       return __.until(*args)
-   def value(*args):
+
+statics['until'] = until
+def value(*args):
       return __.value(*args)
-   def valueMap(*args):
+
+statics['value'] = value
+def valueMap(*args):
       return __.valueMap(*args)
-   def values(*args):
+
+statics['valueMap'] = valueMap
+def values(*args):
       return __.values(*args)
-   def where(*args):
+
+statics['values'] = values
+def where(*args):
       return __.where(*args)
 
+statics['where'] = where
+
 
 class Cardinality(object):
    single = "VertexProperty.Cardinality.single"
@@ -895,19 +1086,17 @@ class Column(object):
    keys = "Column.keys"
    values = "Column.values"
 
-if(sys.argv[0]):
-   keys = Column.keys
-   values = Column.values
+statics['keys'] = Column.keys
+statics['values'] = Column.values
 
 class Direction(object):
    OUT = "Direction.OUT"
    IN = "Direction.IN"
    BOTH = "Direction.BOTH"
 
-if(sys.argv[0]):
-   OUT = Direction.OUT
-   IN = Direction.IN
-   BOTH = Direction.BOTH
+statics['OUT'] = Direction.OUT
+statics['IN'] = Direction.IN
+statics['BOTH'] = Direction.BOTH
 
 class Operator(object):
    sum = "Operator.sum"
@@ -922,18 +1111,17 @@ class Operator(object):
    addAll = "Operator.addAll"
    sumLong = "Operator.sumLong"
 
-if(sys.argv[0]):
-   sum = Operator.sum
-   minus = Operator.minus
-   mult = Operator.mult
-   div = Operator.div
-   min = Operator.min
-   max = Operator.max
-   assign = Operator.assign
-   _and = Operator._and
-   _or = Operator._or
-   addAll = Operator.addAll
-   sumLong = Operator.sumLong
+statics['sum'] = Operator.sum
+statics['minus'] = Operator.minus
+statics['mult'] = Operator.mult
+statics['div'] = Operator.div
+statics['min'] = Operator.min
+statics['max'] = Operator.max
+statics['assign'] = Operator.assign
+statics['_and'] = Operator._and
+statics['_or'] = Operator._or
+statics['addAll'] = Operator.addAll
+statics['sumLong'] = Operator.sumLong
 
 class Order(object):
    incr = "Order.incr"
@@ -944,14 +1132,13 @@ class Order(object):
    valueDecr = "Order.valueDecr"
    shuffle = "Order.shuffle"
 
-if(sys.argv[0]):
-   incr = Order.incr
-   decr = Order.decr
-   keyIncr = Order.keyIncr
-   valueIncr = Order.valueIncr
-   keyDecr = Order.keyDecr
-   valueDecr = Order.valueDecr
-   shuffle = Order.shuffle
+statics['incr'] = Order.incr
+statics['decr'] = Order.decr
+statics['keyIncr'] = Order.keyIncr
+statics['valueIncr'] = Order.valueIncr
+statics['keyDecr'] = Order.keyDecr
+statics['valueDecr'] = Order.valueDecr
+statics['shuffle'] = Order.shuffle
 
 class P(object):
    def __init__(self, pString):
@@ -1008,65 +1195,95 @@ class P(object):
    def _or(self, arg):
       return P(self.pString + ".or(" + Helper.stringify(arg) + ")")
 
-if(sys.argv[0]):
-   def _and(*args):
+def _and(*args):
       return P._and(*args)
-   def _not(*args):
+
+statics['_and'] = _and
+def _not(*args):
       return P._not(*args)
-   def _or(*args):
+
+statics['_not'] = _not
+def _or(*args):
       return P._or(*args)
-   def between(*args):
+
+statics['_or'] = _or
+def between(*args):
       return P.between(*args)
-   def clone(*args):
+
+statics['between'] = between
+def clone(*args):
       return P.clone(*args)
-   def eq(*args):
+
+statics['clone'] = clone
+def eq(*args):
       return P.eq(*args)
-   def gt(*args):
+
+statics['eq'] = eq
+def gt(*args):
       return P.gt(*args)
-   def gte(*args):
+
+statics['gt'] = gt
+def gte(*args):
       return P.gte(*args)
-   def inside(*args):
+
+statics['gte'] = gte
+def inside(*args):
       return P.inside(*args)
-   def lt(*args):
+
+statics['inside'] = inside
+def lt(*args):
       return P.lt(*args)
-   def lte(*args):
+
+statics['lt'] = lt
+def lte(*args):
       return P.lte(*args)
-   def negate(*args):
+
+statics['lte'] = lte
+def negate(*args):
       return P.negate(*args)
-   def neq(*args):
+
+statics['negate'] = negate
+def neq(*args):
       return P.neq(*args)
-   def outside(*args):
+
+statics['neq'] = neq
+def outside(*args):
       return P.outside(*args)
-   def test(*args):
+
+statics['outside'] = outside
+def test(*args):
       return P.test(*args)
-   def within(*args):
+
+statics['test'] = test
+def within(*args):
       return P.within(*args)
-   def without(*args):
+
+statics['within'] = within
+def without(*args):
       return P.without(*args)
 
+statics['without'] = without
+
 class Pop(object):
    first = "Pop.first"
    last = "Pop.last"
    all = "Pop.all"
 
-if(sys.argv[0]):
-   first = Pop.first
-   last = Pop.last
-   all = Pop.all
+statics['first'] =  Pop.first
+statics['last'] =  Pop.last
+statics['all'] =  Pop.all
 
 class Barrier(object):
    normSack = "SackFunctions.Barrier.normSack"
 
-if(sys.argv[0]):
-   normSack = Barrier.normSack
+statics['normSack'] = Barrier.normSack
 
 class Scope(object):
    _global = "Scope.global"
    local = "Scope.local"
 
-if(sys.argv[0]):
-   _global = Scope._global
-   local = Scope.local
+statics['_global'] = Scope._global
+statics['local'] = Scope.local
 
 class T(object):
    label = "T.label"
@@ -1074,9 +1291,9 @@ class T(object):
    key = "T.key"
    value = "T.value"
 
-if(sys.argv[0]):
-   label = T.label
-   id = T.id
-   key = T.key
-   value = T.value
+statics['label'] = T.label
+statics['id'] = T.id
+statics['key'] = T.key
+statics['value'] = T.value
 
+statics = OrderedDict(reversed(list(statics.items())))

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2bce67b9/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py 
b/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py
index b4041c7..ff8f3e2 100644
--- a/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py
+++ b/gremlin-variant/src/main/jython/gremlin_rest_driver/gremlin_rest_driver.py
@@ -17,21 +17,23 @@ specific language governing permissions and limitations
 under the License.
 '''
 import requests
-from gremlin_driver.gremlin_driver import RemoteConnection
+import json
+from gremlin_driver import RemoteConnection
+from gremlin_driver import Traverser
 
 __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)'
 
-try:
-    import ujson as json
-except ImportError:
-    import json
 
 class RESTRemoteConnection(RemoteConnection):
-    def __init__(self,url,scriptEngine):
-        self.url = url
-        self.scriptEngine = scriptEngine
+    def __init__(self, url, scriptEngine):
+        RemoteConnection.__init__(self, url,scriptEngine)
 
-    def submit(self,script):
-        requests.get(self.url + "?" + script)
-        return [requests.json()]
+    def __repr__(self):
+        return "RESTRemoteConnection[" + self.url + "]"
 
+    def submit(self, script):
+        response = requests.post(self.url, data=json.dumps({"gremlin": 
script})).json()
+        results = []
+        for x in response['result']['data']:
+            results.append(Traverser(x, 1))
+        return iter(results)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2bce67b9/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
----------------------------------------------------------------------
diff --git 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
index 79d5c08..004d4e7 100644
--- 
a/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
+++ 
b/gremlin-variant/src/test/java/org/apache/tinkerpop/gremlin/process/variant/python/PythonVariantConverter.java
@@ -74,10 +74,12 @@ public class PythonVariantConverter implements 
VariantConverter {
             final String gremlinPythonModuleName = gremlinPythonPackageName + 
"/gremlin_python.py";
             GremlinPythonGenerator.create(gremlinPythonModuleName);
             JYTHON_ENGINE.eval("import sys");
-            JYTHON_ENGINE.eval("sys.argv = [" + (IMPORT_STATICS ? "True" : 
"False") + "]");
             JYTHON_ENGINE.eval("sys.path.append('" + gremlinPythonPackageName 
+ "')");
             JYTHON_ENGINE.eval("sys.path.append('" + gremlinDriverPackageName 
+ "')");
-            JYTHON_ENGINE.eval("exec(open(\"" + gremlinPythonModuleName + 
"\").read())");
+            JYTHON_ENGINE.eval("from gremlin_python import *");
+            JYTHON_ENGINE.eval("from gremlin_python import __");
+            if (IMPORT_STATICS)
+                JYTHON_ENGINE.eval("for k in statics:\n  globals()[k] = 
statics[k]");
         } catch (final ScriptException e) {
             throw new IllegalStateException(e.getMessage(), e);
         }
@@ -97,7 +99,7 @@ public class PythonVariantConverter implements 
VariantConverter {
             throw new VerificationException("Lambdas are currently not 
supported: " + currentTraversal.toString(), EmptyTraversal.instance());
 
         final Bindings jythonBindings = new SimpleBindings();
-        jythonBindings.put("g", 
JYTHON_ENGINE.eval("PythonGraphTraversalSource(\"g\")"));
+        jythonBindings.put("g", 
JYTHON_ENGINE.eval("PythonGraphTraversalSource(\"g\", None)"));
         JYTHON_ENGINE.getContext().setBindings(jythonBindings, 
ScriptContext.GLOBAL_SCOPE);
         return JYTHON_ENGINE.eval(currentTraversal.toString()).toString();
     }

Reply via email to