diff --git a/goblin/gremlin_python/__init__.py b/goblin/gremlin_python/__init__.py index 5700a664d3da60a49787781f8bfccad02bf5221c..cd21e560a3b04e53cdc4ddc4cb3d7ada20c24b47 100644 --- a/goblin/gremlin_python/__init__.py +++ b/goblin/gremlin_python/__init__.py @@ -16,21 +16,6 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ''' -from .graph_traversal import PythonGraphTraversal -from .graph_traversal import PythonGraphTraversalSource -from .graph_traversal import __ -from .groovy_translator import GroovyTranslator -from .jython_translator import JythonTranslator -from .traversal import Barrier -from .traversal import Cardinality -from .traversal import Column -from .traversal import Direction -from .traversal import Operator -from .traversal import Order -from .traversal import P -from .traversal import Pop -from .traversal import PythonTraversal -from .traversal import Scope -from .traversal import T +import statics __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' diff --git a/goblin/gremlin_python/driver/__init__.py b/goblin/gremlin_python/driver/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..bb4e612a0bac6f452a6a677a0541cedf17d8dde2 --- /dev/null +++ b/goblin/gremlin_python/driver/__init__.py @@ -0,0 +1,22 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' +from remote_connection import RemoteConnection +from rest_remote_connection import RESTRemoteConnection + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' diff --git a/goblin/gremlin_python/driver/remote_connection.py b/goblin/gremlin_python/driver/remote_connection.py new file mode 100644 index 0000000000000000000000000000000000000000..1651b92ad7809e01fd6fecf06371edacd3a7b937 --- /dev/null +++ b/goblin/gremlin_python/driver/remote_connection.py @@ -0,0 +1,31 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' +from abc import abstractmethod + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' + + +class RemoteConnection(object): + def __init__(self, url): + self.url = url + + @abstractmethod + def submit(self, target_language, script, bindings): + print "sending " + script + " to GremlinServer..." + return iter([]) diff --git a/goblin/gremlin_python/driver/rest_remote_connection.py b/goblin/gremlin_python/driver/rest_remote_connection.py new file mode 100644 index 0000000000000000000000000000000000000000..b827d0d5f1f3439dc638c7c2d0e7232f5be0cb36 --- /dev/null +++ b/goblin/gremlin_python/driver/rest_remote_connection.py @@ -0,0 +1,43 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' +import json +import requests + +from gremlin_python.process.traversal import Traverser +from remote_connection import RemoteConnection + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' + + +class RESTRemoteConnection(RemoteConnection): + def __init__(self, url): + RemoteConnection.__init__(self, url) + + def __repr__(self): + return "RESTRemoteConnection[" + self.url + "]" + + def submit(self, target_language, script, bindings): + response = requests.post(self.url, data=json.dumps( + {"gremlin": script, "language": target_language, "bindings": bindings})) + if response.status_code != requests.codes.ok: + raise BaseException(response.text) + results = [] + for x in response.json()['result']['data']: + results.append(Traverser(x, 1)) + return iter(results) diff --git a/goblin/gremlin_python/process/__init__.py b/goblin/gremlin_python/process/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d84b097ac1185a96a9f9a38164888447ee1f9ad8 --- /dev/null +++ b/goblin/gremlin_python/process/__init__.py @@ -0,0 +1,38 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' + +from graph_traversal import GraphTraversal +from graph_traversal import GraphTraversalSource +from graph_traversal import __ +from groovy_translator import GroovyTranslator +from jython_translator import JythonTranslator +from traversal import Barrier +from traversal import Bytecode +from traversal import Cardinality +from traversal import Column +from traversal import Direction +from traversal import Operator +from traversal import Order +from traversal import P +from traversal import Pop +from traversal import Scope +from traversal import T +from traversal import Traversal + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' diff --git a/goblin/gremlin_python/graph_traversal.py b/goblin/gremlin_python/process/graph_traversal.py similarity index 71% rename from goblin/gremlin_python/graph_traversal.py rename to goblin/gremlin_python/process/graph_traversal.py index 9e9a53545b34037701ef4f31b42de0f90b10e587..2261e83acf54a87139fa522f15ac18901a8aa98a 100644 --- a/goblin/gremlin_python/graph_traversal.py +++ b/goblin/gremlin_python/process/graph_traversal.py @@ -16,22 +16,21 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ''' -from .traversal import RawExpression -from .traversal import PythonTraversal -from . import statics -globalTranslator = None - -class PythonGraphTraversalSource(object): - def __init__(self, translator, remote_connection=None): - global globalTranslator - self.translator = translator - globalTranslator = translator - self.remote_connection = remote_connection +from traversal import RawExpression +from traversal import Traversal +from traversal import Bytecode +from gremlin_python import statics + +class GraphTraversalSource(object): + def __init__(self, graph, traversal_strategies, bytecode=Bytecode()): + self.graph = graph + self.traversal_strategies = traversal_strategies + self.bytecode = bytecode def __repr__(self): - return "graphtraversalsource[" + str(self.remote_connection) + ", " + self.translator.traversal_script + "]" + return "graphtraversalsource[" + str(self.graph) + "]" def E(self, *args): - traversal = PythonGraphTraversal(self.translator, self.remote_connection) - traversal.translator.addSpawnStep(traversal, "E", *args) + traversal = GraphTraversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + traversal.bytecode.add_step("E", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -39,8 +38,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return traversal def V(self, *args): - traversal = PythonGraphTraversal(self.translator, self.remote_connection) - traversal.translator.addSpawnStep(traversal, "V", *args) + traversal = GraphTraversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + traversal.bytecode.add_step("V", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -48,8 +47,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return traversal def addV(self, *args): - traversal = PythonGraphTraversal(self.translator, self.remote_connection) - traversal.translator.addSpawnStep(traversal, "addV", *args) + traversal = GraphTraversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + traversal.bytecode.add_step("addV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -57,8 +56,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return traversal def inject(self, *args): - traversal = PythonGraphTraversal(self.translator, self.remote_connection) - traversal.translator.addSpawnStep(traversal, "inject", *args) + traversal = GraphTraversal(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + traversal.bytecode.add_step("inject", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -66,8 +65,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return traversal def withBulk(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withBulk", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withBulk", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -75,8 +74,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withComputer(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withComputer", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withComputer", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -84,8 +83,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withPath(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withPath", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withPath", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -93,8 +92,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withSack(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withSack", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withSack", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -102,8 +101,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withSideEffect(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withSideEffect", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withSideEffect", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -111,8 +110,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withStrategies(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withStrategies", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withStrategies", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -120,8 +119,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withTranslator(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withTranslator", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withTranslator", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -129,8 +128,8 @@ class PythonGraphTraversalSource(object): self.bindings.update(arg.bindings) return source def withoutStrategies(self, *args): - source = PythonGraphTraversalSource(self.translator, self.remote_connection) - source.translator.addSource(source, "withoutStrategies", *args) + source = GraphTraversalSource(self.graph, self.traversal_strategies, Bytecode(self.bytecode)) + source.bytecode.add_source("withoutStrategies", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -139,11 +138,11 @@ class PythonGraphTraversalSource(object): return source -class PythonGraphTraversal(PythonTraversal): - def __init__(self, translator, remote_connection=None): - PythonTraversal.__init__(self, translator, remote_connection) +class GraphTraversal(Traversal): + def __init__(self, graph, traversal_strategies, bytecode): + Traversal.__init__(self, graph, traversal_strategies, bytecode) def V(self, *args): - self.translator.addStep(self, "V", *args) + self.bytecode.add_step("V", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -151,7 +150,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _and(self, *args): - self.translator.addStep(self, "_and", *args) + self.bytecode.add_step("_and", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -159,7 +158,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _as(self, *args): - self.translator.addStep(self, "_as", *args) + self.bytecode.add_step("_as", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -167,7 +166,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _from(self, *args): - self.translator.addStep(self, "_from", *args) + self.bytecode.add_step("_from", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -175,7 +174,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _in(self, *args): - self.translator.addStep(self, "_in", *args) + self.bytecode.add_step("_in", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -183,7 +182,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _is(self, *args): - self.translator.addStep(self, "_is", *args) + self.bytecode.add_step("_is", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -191,7 +190,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _not(self, *args): - self.translator.addStep(self, "_not", *args) + self.bytecode.add_step("_not", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -199,7 +198,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def _or(self, *args): - self.translator.addStep(self, "_or", *args) + self.bytecode.add_step("_or", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -207,7 +206,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def addE(self, *args): - self.translator.addStep(self, "addE", *args) + self.bytecode.add_step("addE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -215,7 +214,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def addInE(self, *args): - self.translator.addStep(self, "addInE", *args) + self.bytecode.add_step("addInE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -223,7 +222,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def addOutE(self, *args): - self.translator.addStep(self, "addOutE", *args) + self.bytecode.add_step("addOutE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -231,7 +230,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def addV(self, *args): - self.translator.addStep(self, "addV", *args) + self.bytecode.add_step("addV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -239,7 +238,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def aggregate(self, *args): - self.translator.addStep(self, "aggregate", *args) + self.bytecode.add_step("aggregate", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -247,7 +246,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def asAdmin(self, *args): - self.translator.addStep(self, "asAdmin", *args) + self.bytecode.add_step("asAdmin", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -255,7 +254,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def barrier(self, *args): - self.translator.addStep(self, "barrier", *args) + self.bytecode.add_step("barrier", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -263,7 +262,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def both(self, *args): - self.translator.addStep(self, "both", *args) + self.bytecode.add_step("both", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -271,7 +270,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def bothE(self, *args): - self.translator.addStep(self, "bothE", *args) + self.bytecode.add_step("bothE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -279,7 +278,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def bothV(self, *args): - self.translator.addStep(self, "bothV", *args) + self.bytecode.add_step("bothV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -287,7 +286,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def branch(self, *args): - self.translator.addStep(self, "branch", *args) + self.bytecode.add_step("branch", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -295,7 +294,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def by(self, *args): - self.translator.addStep(self, "by", *args) + self.bytecode.add_step("by", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -303,7 +302,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def cap(self, *args): - self.translator.addStep(self, "cap", *args) + self.bytecode.add_step("cap", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -311,7 +310,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def choose(self, *args): - self.translator.addStep(self, "choose", *args) + self.bytecode.add_step("choose", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -319,7 +318,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def coalesce(self, *args): - self.translator.addStep(self, "coalesce", *args) + self.bytecode.add_step("coalesce", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -327,7 +326,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def coin(self, *args): - self.translator.addStep(self, "coin", *args) + self.bytecode.add_step("coin", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -335,7 +334,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def constant(self, *args): - self.translator.addStep(self, "constant", *args) + self.bytecode.add_step("constant", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -343,7 +342,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def count(self, *args): - self.translator.addStep(self, "count", *args) + self.bytecode.add_step("count", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -351,7 +350,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def cyclicPath(self, *args): - self.translator.addStep(self, "cyclicPath", *args) + self.bytecode.add_step("cyclicPath", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -359,7 +358,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def dedup(self, *args): - self.translator.addStep(self, "dedup", *args) + self.bytecode.add_step("dedup", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -367,7 +366,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def drop(self, *args): - self.translator.addStep(self, "drop", *args) + self.bytecode.add_step("drop", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -375,7 +374,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def emit(self, *args): - self.translator.addStep(self, "emit", *args) + self.bytecode.add_step("emit", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -383,7 +382,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def filter(self, *args): - self.translator.addStep(self, "filter", *args) + self.bytecode.add_step("filter", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -391,7 +390,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def flatMap(self, *args): - self.translator.addStep(self, "flatMap", *args) + self.bytecode.add_step("flatMap", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -399,7 +398,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def fold(self, *args): - self.translator.addStep(self, "fold", *args) + self.bytecode.add_step("fold", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -407,7 +406,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def group(self, *args): - self.translator.addStep(self, "group", *args) + self.bytecode.add_step("group", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -415,7 +414,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def groupCount(self, *args): - self.translator.addStep(self, "groupCount", *args) + self.bytecode.add_step("groupCount", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -423,7 +422,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def groupV3d0(self, *args): - self.translator.addStep(self, "groupV3d0", *args) + self.bytecode.add_step("groupV3d0", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -431,7 +430,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def has(self, *args): - self.translator.addStep(self, "has", *args) + self.bytecode.add_step("has", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -439,7 +438,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def hasId(self, *args): - self.translator.addStep(self, "hasId", *args) + self.bytecode.add_step("hasId", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -447,7 +446,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def hasKey(self, *args): - self.translator.addStep(self, "hasKey", *args) + self.bytecode.add_step("hasKey", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -455,7 +454,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def hasLabel(self, *args): - self.translator.addStep(self, "hasLabel", *args) + self.bytecode.add_step("hasLabel", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -463,7 +462,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def hasNot(self, *args): - self.translator.addStep(self, "hasNot", *args) + self.bytecode.add_step("hasNot", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -471,7 +470,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def hasValue(self, *args): - self.translator.addStep(self, "hasValue", *args) + self.bytecode.add_step("hasValue", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -479,7 +478,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def id(self, *args): - self.translator.addStep(self, "id", *args) + self.bytecode.add_step("id", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -487,7 +486,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def identity(self, *args): - self.translator.addStep(self, "identity", *args) + self.bytecode.add_step("identity", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -495,7 +494,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def inE(self, *args): - self.translator.addStep(self, "inE", *args) + self.bytecode.add_step("inE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -503,7 +502,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def inV(self, *args): - self.translator.addStep(self, "inV", *args) + self.bytecode.add_step("inV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -511,7 +510,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def inject(self, *args): - self.translator.addStep(self, "inject", *args) + self.bytecode.add_step("inject", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -519,7 +518,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def iterate(self, *args): - self.translator.addStep(self, "iterate", *args) + self.bytecode.add_step("iterate", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -527,7 +526,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def key(self, *args): - self.translator.addStep(self, "key", *args) + self.bytecode.add_step("key", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -535,7 +534,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def label(self, *args): - self.translator.addStep(self, "label", *args) + self.bytecode.add_step("label", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -543,7 +542,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def limit(self, *args): - self.translator.addStep(self, "limit", *args) + self.bytecode.add_step("limit", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -551,7 +550,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def local(self, *args): - self.translator.addStep(self, "local", *args) + self.bytecode.add_step("local", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -559,7 +558,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def loops(self, *args): - self.translator.addStep(self, "loops", *args) + self.bytecode.add_step("loops", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -567,7 +566,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def map(self, *args): - self.translator.addStep(self, "map", *args) + self.bytecode.add_step("map", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -575,7 +574,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def mapKeys(self, *args): - self.translator.addStep(self, "mapKeys", *args) + self.bytecode.add_step("mapKeys", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -583,7 +582,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def mapValues(self, *args): - self.translator.addStep(self, "mapValues", *args) + self.bytecode.add_step("mapValues", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -591,7 +590,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def match(self, *args): - self.translator.addStep(self, "match", *args) + self.bytecode.add_step("match", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -599,7 +598,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def max(self, *args): - self.translator.addStep(self, "max", *args) + self.bytecode.add_step("max", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -607,7 +606,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def mean(self, *args): - self.translator.addStep(self, "mean", *args) + self.bytecode.add_step("mean", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -615,7 +614,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def min(self, *args): - self.translator.addStep(self, "min", *args) + self.bytecode.add_step("min", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -623,7 +622,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def option(self, *args): - self.translator.addStep(self, "option", *args) + self.bytecode.add_step("option", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -631,7 +630,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def optional(self, *args): - self.translator.addStep(self, "optional", *args) + self.bytecode.add_step("optional", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -639,7 +638,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def order(self, *args): - self.translator.addStep(self, "order", *args) + self.bytecode.add_step("order", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -647,7 +646,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def otherV(self, *args): - self.translator.addStep(self, "otherV", *args) + self.bytecode.add_step("otherV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -655,7 +654,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def out(self, *args): - self.translator.addStep(self, "out", *args) + self.bytecode.add_step("out", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -663,7 +662,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def outE(self, *args): - self.translator.addStep(self, "outE", *args) + self.bytecode.add_step("outE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -671,7 +670,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def outV(self, *args): - self.translator.addStep(self, "outV", *args) + self.bytecode.add_step("outV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -679,7 +678,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def pageRank(self, *args): - self.translator.addStep(self, "pageRank", *args) + self.bytecode.add_step("pageRank", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -687,7 +686,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def path(self, *args): - self.translator.addStep(self, "path", *args) + self.bytecode.add_step("path", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -695,7 +694,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def peerPressure(self, *args): - self.translator.addStep(self, "peerPressure", *args) + self.bytecode.add_step("peerPressure", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -703,7 +702,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def profile(self, *args): - self.translator.addStep(self, "profile", *args) + self.bytecode.add_step("profile", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -711,7 +710,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def program(self, *args): - self.translator.addStep(self, "program", *args) + self.bytecode.add_step("program", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -719,7 +718,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def project(self, *args): - self.translator.addStep(self, "project", *args) + self.bytecode.add_step("project", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -727,7 +726,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def properties(self, *args): - self.translator.addStep(self, "properties", *args) + self.bytecode.add_step("properties", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -735,7 +734,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def property(self, *args): - self.translator.addStep(self, "property", *args) + self.bytecode.add_step("property", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -743,7 +742,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def propertyMap(self, *args): - self.translator.addStep(self, "propertyMap", *args) + self.bytecode.add_step("propertyMap", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -751,7 +750,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def range(self, *args): - self.translator.addStep(self, "range", *args) + self.bytecode.add_step("range", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -759,7 +758,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def repeat(self, *args): - self.translator.addStep(self, "repeat", *args) + self.bytecode.add_step("repeat", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -767,7 +766,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def sack(self, *args): - self.translator.addStep(self, "sack", *args) + self.bytecode.add_step("sack", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -775,7 +774,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def sample(self, *args): - self.translator.addStep(self, "sample", *args) + self.bytecode.add_step("sample", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -783,7 +782,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def select(self, *args): - self.translator.addStep(self, "select", *args) + self.bytecode.add_step("select", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -791,7 +790,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def sideEffect(self, *args): - self.translator.addStep(self, "sideEffect", *args) + self.bytecode.add_step("sideEffect", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -799,7 +798,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def simplePath(self, *args): - self.translator.addStep(self, "simplePath", *args) + self.bytecode.add_step("simplePath", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -807,7 +806,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def store(self, *args): - self.translator.addStep(self, "store", *args) + self.bytecode.add_step("store", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -815,7 +814,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def subgraph(self, *args): - self.translator.addStep(self, "subgraph", *args) + self.bytecode.add_step("subgraph", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -823,7 +822,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def sum(self, *args): - self.translator.addStep(self, "sum", *args) + self.bytecode.add_step("sum", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -831,7 +830,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def tail(self, *args): - self.translator.addStep(self, "tail", *args) + self.bytecode.add_step("tail", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -839,7 +838,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def timeLimit(self, *args): - self.translator.addStep(self, "timeLimit", *args) + self.bytecode.add_step("timeLimit", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -847,7 +846,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def times(self, *args): - self.translator.addStep(self, "times", *args) + self.bytecode.add_step("times", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -855,7 +854,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def to(self, *args): - self.translator.addStep(self, "to", *args) + self.bytecode.add_step("to", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -863,7 +862,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def toE(self, *args): - self.translator.addStep(self, "toE", *args) + self.bytecode.add_step("toE", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -871,7 +870,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def toV(self, *args): - self.translator.addStep(self, "toV", *args) + self.bytecode.add_step("toV", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -879,7 +878,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def tree(self, *args): - self.translator.addStep(self, "tree", *args) + self.bytecode.add_step("tree", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -887,7 +886,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def unfold(self, *args): - self.translator.addStep(self, "unfold", *args) + self.bytecode.add_step("unfold", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -895,7 +894,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def union(self, *args): - self.translator.addStep(self, "union", *args) + self.bytecode.add_step("union", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -903,7 +902,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def until(self, *args): - self.translator.addStep(self, "until", *args) + self.bytecode.add_step("until", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -911,7 +910,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def value(self, *args): - self.translator.addStep(self, "value", *args) + self.bytecode.add_step("value", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -919,7 +918,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def valueMap(self, *args): - self.translator.addStep(self, "valueMap", *args) + self.bytecode.add_step("valueMap", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -927,7 +926,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def values(self, *args): - self.translator.addStep(self, "values", *args) + self.bytecode.add_step("values", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -935,7 +934,7 @@ class PythonGraphTraversal(PythonTraversal): self.bindings.update(arg.bindings) return self def where(self, *args): - self.translator.addStep(self, "where", *args) + self.bytecode.add_step("where", *args) for arg in args: if isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): self.bindings[arg[0]] = arg[1] @@ -947,650 +946,744 @@ class PythonGraphTraversal(PythonTraversal): class __(object): @staticmethod def V(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).V(*args) + return GraphTraversal(None, None, Bytecode()).V(*args) @staticmethod def __(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).__(*args) + return GraphTraversal(None, None, Bytecode()).__(*args) @staticmethod def _and(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._and(*args) + return GraphTraversal(None, None, Bytecode())._and(*args) @staticmethod def _as(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._as(*args) + return GraphTraversal(None, None, Bytecode())._as(*args) @staticmethod def _in(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._in(*args) + return GraphTraversal(None, None, Bytecode())._in(*args) @staticmethod def _is(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._is(*args) + return GraphTraversal(None, None, Bytecode())._is(*args) @staticmethod def _not(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._not(*args) + return GraphTraversal(None, None, Bytecode())._not(*args) @staticmethod def _or(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator())._or(*args) + return GraphTraversal(None, None, Bytecode())._or(*args) @staticmethod def addE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).addE(*args) + return GraphTraversal(None, None, Bytecode()).addE(*args) @staticmethod def addInE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).addInE(*args) + return GraphTraversal(None, None, Bytecode()).addInE(*args) @staticmethod def addOutE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).addOutE(*args) + return GraphTraversal(None, None, Bytecode()).addOutE(*args) @staticmethod def addV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).addV(*args) + return GraphTraversal(None, None, Bytecode()).addV(*args) @staticmethod def aggregate(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).aggregate(*args) + return GraphTraversal(None, None, Bytecode()).aggregate(*args) @staticmethod def barrier(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).barrier(*args) + return GraphTraversal(None, None, Bytecode()).barrier(*args) @staticmethod def both(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).both(*args) + return GraphTraversal(None, None, Bytecode()).both(*args) @staticmethod def bothE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).bothE(*args) + return GraphTraversal(None, None, Bytecode()).bothE(*args) @staticmethod def bothV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).bothV(*args) + return GraphTraversal(None, None, Bytecode()).bothV(*args) @staticmethod def branch(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).branch(*args) + return GraphTraversal(None, None, Bytecode()).branch(*args) @staticmethod def cap(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).cap(*args) + return GraphTraversal(None, None, Bytecode()).cap(*args) @staticmethod def choose(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).choose(*args) + return GraphTraversal(None, None, Bytecode()).choose(*args) @staticmethod def coalesce(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).coalesce(*args) + return GraphTraversal(None, None, Bytecode()).coalesce(*args) @staticmethod def coin(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).coin(*args) + return GraphTraversal(None, None, Bytecode()).coin(*args) @staticmethod def constant(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).constant(*args) + return GraphTraversal(None, None, Bytecode()).constant(*args) @staticmethod def count(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).count(*args) + return GraphTraversal(None, None, Bytecode()).count(*args) @staticmethod def cyclicPath(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).cyclicPath(*args) + return GraphTraversal(None, None, Bytecode()).cyclicPath(*args) @staticmethod def dedup(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).dedup(*args) + return GraphTraversal(None, None, Bytecode()).dedup(*args) @staticmethod def drop(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).drop(*args) + return GraphTraversal(None, None, Bytecode()).drop(*args) @staticmethod def emit(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).emit(*args) + return GraphTraversal(None, None, Bytecode()).emit(*args) @staticmethod def filter(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).filter(*args) + return GraphTraversal(None, None, Bytecode()).filter(*args) @staticmethod def flatMap(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).flatMap(*args) + return GraphTraversal(None, None, Bytecode()).flatMap(*args) @staticmethod def fold(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).fold(*args) + return GraphTraversal(None, None, Bytecode()).fold(*args) @staticmethod def group(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).group(*args) + return GraphTraversal(None, None, Bytecode()).group(*args) @staticmethod def groupCount(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).groupCount(*args) + return GraphTraversal(None, None, Bytecode()).groupCount(*args) @staticmethod def groupV3d0(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).groupV3d0(*args) + return GraphTraversal(None, None, Bytecode()).groupV3d0(*args) @staticmethod def has(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).has(*args) + return GraphTraversal(None, None, Bytecode()).has(*args) @staticmethod def hasId(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).hasId(*args) + return GraphTraversal(None, None, Bytecode()).hasId(*args) @staticmethod def hasKey(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).hasKey(*args) + return GraphTraversal(None, None, Bytecode()).hasKey(*args) @staticmethod def hasLabel(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).hasLabel(*args) + return GraphTraversal(None, None, Bytecode()).hasLabel(*args) @staticmethod def hasNot(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).hasNot(*args) + return GraphTraversal(None, None, Bytecode()).hasNot(*args) @staticmethod def hasValue(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).hasValue(*args) + return GraphTraversal(None, None, Bytecode()).hasValue(*args) @staticmethod def id(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).id(*args) + return GraphTraversal(None, None, Bytecode()).id(*args) @staticmethod def identity(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).identity(*args) + return GraphTraversal(None, None, Bytecode()).identity(*args) @staticmethod def inE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).inE(*args) + return GraphTraversal(None, None, Bytecode()).inE(*args) @staticmethod def inV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).inV(*args) + return GraphTraversal(None, None, Bytecode()).inV(*args) @staticmethod def inject(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).inject(*args) + return GraphTraversal(None, None, Bytecode()).inject(*args) @staticmethod def key(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).key(*args) + return GraphTraversal(None, None, Bytecode()).key(*args) @staticmethod def label(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).label(*args) + return GraphTraversal(None, None, Bytecode()).label(*args) @staticmethod def limit(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).limit(*args) + return GraphTraversal(None, None, Bytecode()).limit(*args) @staticmethod def local(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).local(*args) + return GraphTraversal(None, None, Bytecode()).local(*args) @staticmethod def loops(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).loops(*args) + return GraphTraversal(None, None, Bytecode()).loops(*args) @staticmethod def map(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).map(*args) + return GraphTraversal(None, None, Bytecode()).map(*args) @staticmethod def mapKeys(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).mapKeys(*args) + return GraphTraversal(None, None, Bytecode()).mapKeys(*args) @staticmethod def mapValues(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).mapValues(*args) + return GraphTraversal(None, None, Bytecode()).mapValues(*args) @staticmethod def match(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).match(*args) + return GraphTraversal(None, None, Bytecode()).match(*args) @staticmethod def max(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).max(*args) + return GraphTraversal(None, None, Bytecode()).max(*args) @staticmethod def mean(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).mean(*args) + return GraphTraversal(None, None, Bytecode()).mean(*args) @staticmethod def min(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).min(*args) + return GraphTraversal(None, None, Bytecode()).min(*args) @staticmethod def optional(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).optional(*args) + return GraphTraversal(None, None, Bytecode()).optional(*args) @staticmethod def order(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).order(*args) + return GraphTraversal(None, None, Bytecode()).order(*args) @staticmethod def otherV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).otherV(*args) + return GraphTraversal(None, None, Bytecode()).otherV(*args) @staticmethod def out(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).out(*args) + return GraphTraversal(None, None, Bytecode()).out(*args) @staticmethod def outE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).outE(*args) + return GraphTraversal(None, None, Bytecode()).outE(*args) @staticmethod def outV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).outV(*args) + return GraphTraversal(None, None, Bytecode()).outV(*args) @staticmethod def path(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).path(*args) + return GraphTraversal(None, None, Bytecode()).path(*args) @staticmethod def project(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).project(*args) + return GraphTraversal(None, None, Bytecode()).project(*args) @staticmethod def properties(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).properties(*args) + return GraphTraversal(None, None, Bytecode()).properties(*args) @staticmethod def property(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).property(*args) + return GraphTraversal(None, None, Bytecode()).property(*args) @staticmethod def propertyMap(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).propertyMap(*args) + return GraphTraversal(None, None, Bytecode()).propertyMap(*args) @staticmethod def range(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).range(*args) + return GraphTraversal(None, None, Bytecode()).range(*args) @staticmethod def repeat(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).repeat(*args) + return GraphTraversal(None, None, Bytecode()).repeat(*args) @staticmethod def sack(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).sack(*args) + return GraphTraversal(None, None, Bytecode()).sack(*args) @staticmethod def sample(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).sample(*args) + return GraphTraversal(None, None, Bytecode()).sample(*args) @staticmethod def select(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).select(*args) + return GraphTraversal(None, None, Bytecode()).select(*args) @staticmethod def sideEffect(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).sideEffect(*args) + return GraphTraversal(None, None, Bytecode()).sideEffect(*args) @staticmethod def simplePath(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).simplePath(*args) + return GraphTraversal(None, None, Bytecode()).simplePath(*args) @staticmethod def start(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).start(*args) + return GraphTraversal(None, None, Bytecode()).start(*args) @staticmethod def store(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).store(*args) + return GraphTraversal(None, None, Bytecode()).store(*args) @staticmethod def subgraph(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).subgraph(*args) + return GraphTraversal(None, None, Bytecode()).subgraph(*args) @staticmethod def sum(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).sum(*args) + return GraphTraversal(None, None, Bytecode()).sum(*args) @staticmethod def tail(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).tail(*args) + return GraphTraversal(None, None, Bytecode()).tail(*args) @staticmethod def timeLimit(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).timeLimit(*args) + return GraphTraversal(None, None, Bytecode()).timeLimit(*args) @staticmethod def times(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).times(*args) + return GraphTraversal(None, None, Bytecode()).times(*args) @staticmethod def to(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).to(*args) + return GraphTraversal(None, None, Bytecode()).to(*args) @staticmethod def toE(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).toE(*args) + return GraphTraversal(None, None, Bytecode()).toE(*args) @staticmethod def toV(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).toV(*args) + return GraphTraversal(None, None, Bytecode()).toV(*args) @staticmethod def tree(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).tree(*args) + return GraphTraversal(None, None, Bytecode()).tree(*args) @staticmethod def unfold(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).unfold(*args) + return GraphTraversal(None, None, Bytecode()).unfold(*args) @staticmethod def union(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).union(*args) + return GraphTraversal(None, None, Bytecode()).union(*args) @staticmethod def until(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).until(*args) + return GraphTraversal(None, None, Bytecode()).until(*args) @staticmethod def value(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).value(*args) + return GraphTraversal(None, None, Bytecode()).value(*args) @staticmethod def valueMap(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).valueMap(*args) + return GraphTraversal(None, None, Bytecode()).valueMap(*args) @staticmethod def values(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).values(*args) + return GraphTraversal(None, None, Bytecode()).values(*args) @staticmethod def where(*args): - return PythonGraphTraversal(globalTranslator.getAnonymousTraversalTranslator()).where(*args) + return GraphTraversal(None, None, Bytecode()).where(*args) def V(*args): return __.V(*args) statics.add_static('V', V) + def _and(*args): return __._and(*args) statics.add_static('_and', _and) + def _as(*args): return __._as(*args) statics.add_static('_as', _as) + def _in(*args): return __._in(*args) statics.add_static('_in', _in) + def _is(*args): return __._is(*args) statics.add_static('_is', _is) + def _not(*args): return __._not(*args) statics.add_static('_not', _not) + def _or(*args): return __._or(*args) statics.add_static('_or', _or) + def addE(*args): return __.addE(*args) statics.add_static('addE', addE) + def addInE(*args): return __.addInE(*args) statics.add_static('addInE', addInE) + def addOutE(*args): return __.addOutE(*args) statics.add_static('addOutE', addOutE) + def addV(*args): return __.addV(*args) statics.add_static('addV', addV) + def aggregate(*args): return __.aggregate(*args) statics.add_static('aggregate', aggregate) + def barrier(*args): return __.barrier(*args) statics.add_static('barrier', barrier) + def both(*args): return __.both(*args) statics.add_static('both', both) + def bothE(*args): return __.bothE(*args) statics.add_static('bothE', bothE) + def bothV(*args): return __.bothV(*args) statics.add_static('bothV', bothV) + def branch(*args): return __.branch(*args) statics.add_static('branch', branch) + def cap(*args): return __.cap(*args) statics.add_static('cap', cap) + def choose(*args): return __.choose(*args) statics.add_static('choose', choose) + def coalesce(*args): return __.coalesce(*args) statics.add_static('coalesce', coalesce) + def coin(*args): return __.coin(*args) statics.add_static('coin', coin) + def constant(*args): return __.constant(*args) statics.add_static('constant', constant) + def count(*args): return __.count(*args) statics.add_static('count', count) + def cyclicPath(*args): return __.cyclicPath(*args) statics.add_static('cyclicPath', cyclicPath) + def dedup(*args): return __.dedup(*args) statics.add_static('dedup', dedup) + def drop(*args): return __.drop(*args) statics.add_static('drop', drop) + def emit(*args): return __.emit(*args) statics.add_static('emit', emit) + def filter(*args): return __.filter(*args) statics.add_static('filter', filter) + def flatMap(*args): return __.flatMap(*args) statics.add_static('flatMap', flatMap) + def fold(*args): return __.fold(*args) statics.add_static('fold', fold) + def group(*args): return __.group(*args) statics.add_static('group', group) + def groupCount(*args): return __.groupCount(*args) statics.add_static('groupCount', groupCount) + def groupV3d0(*args): return __.groupV3d0(*args) statics.add_static('groupV3d0', groupV3d0) + def has(*args): return __.has(*args) statics.add_static('has', has) + def hasId(*args): return __.hasId(*args) statics.add_static('hasId', hasId) + def hasKey(*args): return __.hasKey(*args) statics.add_static('hasKey', hasKey) + def hasLabel(*args): return __.hasLabel(*args) statics.add_static('hasLabel', hasLabel) + def hasNot(*args): return __.hasNot(*args) statics.add_static('hasNot', hasNot) + def hasValue(*args): return __.hasValue(*args) statics.add_static('hasValue', hasValue) + def id(*args): return __.id(*args) statics.add_static('id', id) + def identity(*args): return __.identity(*args) statics.add_static('identity', identity) + def inE(*args): return __.inE(*args) statics.add_static('inE', inE) + def inV(*args): return __.inV(*args) statics.add_static('inV', inV) + def inject(*args): return __.inject(*args) statics.add_static('inject', inject) + def key(*args): return __.key(*args) statics.add_static('key', key) + def label(*args): return __.label(*args) statics.add_static('label', label) + def limit(*args): return __.limit(*args) statics.add_static('limit', limit) + def local(*args): return __.local(*args) statics.add_static('local', local) + def loops(*args): return __.loops(*args) statics.add_static('loops', loops) + def map(*args): return __.map(*args) statics.add_static('map', map) + def mapKeys(*args): return __.mapKeys(*args) statics.add_static('mapKeys', mapKeys) + def mapValues(*args): return __.mapValues(*args) statics.add_static('mapValues', mapValues) + def match(*args): return __.match(*args) statics.add_static('match', match) + def max(*args): return __.max(*args) statics.add_static('max', max) + def mean(*args): return __.mean(*args) statics.add_static('mean', mean) + def min(*args): return __.min(*args) statics.add_static('min', min) + def optional(*args): return __.optional(*args) statics.add_static('optional', optional) + def order(*args): return __.order(*args) statics.add_static('order', order) + def otherV(*args): return __.otherV(*args) statics.add_static('otherV', otherV) + def out(*args): return __.out(*args) statics.add_static('out', out) + def outE(*args): return __.outE(*args) statics.add_static('outE', outE) + def outV(*args): return __.outV(*args) statics.add_static('outV', outV) + def path(*args): return __.path(*args) statics.add_static('path', path) + def project(*args): return __.project(*args) statics.add_static('project', project) + def properties(*args): return __.properties(*args) statics.add_static('properties', properties) + def property(*args): return __.property(*args) statics.add_static('property', property) + def propertyMap(*args): return __.propertyMap(*args) statics.add_static('propertyMap', propertyMap) + def range(*args): return __.range(*args) statics.add_static('range', range) + def repeat(*args): return __.repeat(*args) statics.add_static('repeat', repeat) + def sack(*args): return __.sack(*args) statics.add_static('sack', sack) + def sample(*args): return __.sample(*args) statics.add_static('sample', sample) + def select(*args): return __.select(*args) statics.add_static('select', select) + def sideEffect(*args): return __.sideEffect(*args) statics.add_static('sideEffect', sideEffect) + def simplePath(*args): return __.simplePath(*args) statics.add_static('simplePath', simplePath) + def start(*args): return __.start(*args) statics.add_static('start', start) + def store(*args): return __.store(*args) statics.add_static('store', store) + def subgraph(*args): return __.subgraph(*args) statics.add_static('subgraph', subgraph) + def sum(*args): return __.sum(*args) statics.add_static('sum', sum) + def tail(*args): return __.tail(*args) statics.add_static('tail', tail) + def timeLimit(*args): return __.timeLimit(*args) statics.add_static('timeLimit', timeLimit) + def times(*args): return __.times(*args) statics.add_static('times', times) + def to(*args): return __.to(*args) statics.add_static('to', to) + def toE(*args): return __.toE(*args) statics.add_static('toE', toE) + def toV(*args): return __.toV(*args) statics.add_static('toV', toV) + def tree(*args): return __.tree(*args) statics.add_static('tree', tree) + def unfold(*args): return __.unfold(*args) statics.add_static('unfold', unfold) + def union(*args): return __.union(*args) statics.add_static('union', union) + def until(*args): return __.until(*args) statics.add_static('until', until) + def value(*args): return __.value(*args) statics.add_static('value', value) + def valueMap(*args): return __.valueMap(*args) statics.add_static('valueMap', valueMap) + def values(*args): return __.values(*args) statics.add_static('values', values) + def where(*args): return __.where(*args) statics.add_static('where', where) + + + diff --git a/goblin/gremlin_python/groovy_translator.py b/goblin/gremlin_python/process/groovy_translator.py similarity index 51% rename from goblin/gremlin_python/groovy_translator.py rename to goblin/gremlin_python/process/groovy_translator.py index 971371d22c0f9bd7d86591531dbdd22095cb47ab..a05885d83d02ec3e997ba12c85ba23dacc72cf42 100644 --- a/goblin/gremlin_python/groovy_translator.py +++ b/goblin/gremlin_python/process/groovy_translator.py @@ -20,10 +20,11 @@ under the License. import sys from aenum import Enum -from .translator import SymbolHelper -from .translator import Translator -from .traversal import P -from .traversal import RawExpression +from traversal import Bytecode +from traversal import P +from traversal import RawExpression +from traversal import SymbolHelper +from traversal import Translator if sys.version_info.major > 2: long = int @@ -32,32 +33,23 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' class GroovyTranslator(Translator): - def __init__(self, alias, source_language="python", target_language="gremlin-groovy"): - Translator.__init__(self, alias, source_language, target_language) + def __init__(self, traversal_source, anonymous_traversal="__", target_language="gremlin-groovy"): + Translator.__init__(self, traversal_source, anonymous_traversal, target_language) - def addStep(self, traversal, step_name, *args): - self.traversal_script = self.traversal_script + "." + SymbolHelper.toJava( - step_name) + "(" + GroovyTranslator.stringify(*args) + ")" + def translate(self, bytecode): + return self.__internalTranslate(self.traversal_source, bytecode) - def addSpawnStep(self, traversal, step_name, *args): - newTranslator = GroovyTranslator(self.alias, self.source_language, self.target_language) - newTranslator.traversal_script = self.traversal_script - newTranslator.traversal_script = newTranslator.traversal_script + "." + SymbolHelper.toJava( - step_name) + "(" + GroovyTranslator.stringify(*args) + ")" - traversal.translator = newTranslator + def __internalTranslate(self, start, bytecode): + traversal_script = start + for instruction in bytecode.source_instructions: + traversal_script = traversal_script + "." + SymbolHelper.toJava( + instruction[0]) + "(" + self.stringify(*instruction[1]) + ")" + for instruction in bytecode.step_instructions: + traversal_script = traversal_script + "." + SymbolHelper.toJava( + instruction[0]) + "(" + self.stringify(*instruction[1]) + ")" + return traversal_script - def addSource(self, traversal_source, source_name, *args): - newTranslator = GroovyTranslator(self.alias, self.source_language, self.target_language) - newTranslator.traversal_script = self.traversal_script - newTranslator.traversal_script = newTranslator.traversal_script + "." + SymbolHelper.toJava( - source_name) + "(" + GroovyTranslator.stringify(*args) + ")" - traversal_source.translator = newTranslator - - def getAnonymousTraversalTranslator(self): - return GroovyTranslator("__", self.source_language, self.target_language) - - @staticmethod - def stringOrObject(arg): + def stringOrObject(self, arg): if isinstance(arg, str): return "\"" + arg + "\"" elif isinstance(arg, bool): @@ -70,11 +62,13 @@ class GroovyTranslator(Translator): return SymbolHelper.toJava(type(arg).__name__) + "." + SymbolHelper.toJava(str(arg.name)) elif isinstance(arg, P): if arg.other is None: - return "P." + SymbolHelper.toJava(arg.operator) + "(" + GroovyTranslator.stringOrObject( + return "P." + SymbolHelper.toJava(arg.operator) + "(" + self.stringOrObject( arg.value) + ")" else: - return GroovyTranslator.stringOrObject(arg.other) + "." + SymbolHelper.toJava( - arg.operator) + "(" + GroovyTranslator.stringOrObject(arg.value) + ")" + return self.stringOrObject(arg.other) + "." + SymbolHelper.toJava( + arg.operator) + "(" + self.stringOrObject(arg.value) + ")" + elif isinstance(arg, Bytecode): + return self.__internalTranslate(self.anonymous_traversal, arg) elif callable(arg): # closures lambdaString = arg().strip() if lambdaString.startswith("{"): @@ -84,15 +78,14 @@ class GroovyTranslator(Translator): 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) + return "".join(self.stringOrObject(i) for i in arg.parts) else: return str(arg) - @staticmethod - def stringify(*args): + def stringify(self, *args): if len(args) == 0: return "" elif len(args) == 1: - return GroovyTranslator.stringOrObject(args[0]) + return self.stringOrObject(args[0]) else: - return ", ".join(GroovyTranslator.stringOrObject(i) for i in args) + return ", ".join(self.stringOrObject(i) for i in args) diff --git a/goblin/gremlin_python/jython_translator.py b/goblin/gremlin_python/process/jython_translator.py similarity index 54% rename from goblin/gremlin_python/jython_translator.py rename to goblin/gremlin_python/process/jython_translator.py index a28300fb78dd5466b72b108629472da902c94bf6..0ffcaabf8a5f3fffb1f1fe8a11092ecc5a9c2bd1 100644 --- a/goblin/gremlin_python/jython_translator.py +++ b/goblin/gremlin_python/process/jython_translator.py @@ -21,13 +21,14 @@ import inspect import sys from aenum import Enum -from .translator import SymbolHelper -from .translator import Translator -from .traversal import Barrier -from .traversal import Cardinality -from .traversal import Column -from .traversal import P -from .traversal import RawExpression +from traversal import Barrier +from traversal import Bytecode +from traversal import Cardinality +from traversal import Column +from traversal import P +from traversal import RawExpression +from traversal import SymbolHelper +from traversal import Translator if sys.version_info.major > 2: long = int @@ -36,36 +37,27 @@ __author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' class JythonTranslator(Translator): - def __init__(self, alias, source_language="python", target_language="gremlin-jython"): - Translator.__init__(self, alias, source_language, target_language) + def __init__(self, traversal_source, anonymous_traversal="__", target_language="gremlin-jython"): + Translator.__init__(self, traversal_source, anonymous_traversal, target_language) - def addStep(self, traversal, step_name, *args): - self.traversal_script = self.traversal_script + "." + SymbolHelper.toJava( - step_name) + "(" + JythonTranslator.stringify(*args) + ")" + def translate(self, bytecode): + return self.__internalTranslate(self.traversal_source, bytecode) - def addSpawnStep(self, traversal, step_name, *args): - newTranslator = JythonTranslator(self.alias, self.source_language, self.target_language) - newTranslator.traversal_script = self.traversal_script - newTranslator.traversal_script = newTranslator.traversal_script + "." + SymbolHelper.toJava( - step_name) + "(" + JythonTranslator.stringify(*args) + ")" - traversal.translator = newTranslator + def __internalTranslate(self, start, bytecode): + traversal_script = start + for instruction in bytecode.source_instructions: + traversal_script = traversal_script + "." + SymbolHelper.toJava( + instruction[0]) + "(" + self.stringify(*instruction[1]) + ")" + for instruction in bytecode.step_instructions: + traversal_script = traversal_script + "." + SymbolHelper.toJava( + instruction[0]) + "(" + self.stringify(*instruction[1]) + ")" + return traversal_script - def addSource(self, traversal_source, source_name, *args): - newTranslator = JythonTranslator(self.alias, self.source_language, self.target_language) - newTranslator.traversal_script = self.traversal_script - newTranslator.traversal_script = newTranslator.traversal_script + "." + SymbolHelper.toJava( - source_name) + "(" + JythonTranslator.stringify(*args) + ")" - traversal_source.translator = newTranslator - - def getAnonymousTraversalTranslator(self): - return JythonTranslator("__", self.source_language, self.target_language) - - @staticmethod - def stringOrObject(arg): + def stringOrObject(self, arg): if isinstance(arg, str): return "\"" + arg + "\"" elif isinstance(arg, long): - return str(arg) + "L" if arg > 9223372036854775807 else "Long(" + str(arg) + ")" + return str(arg) + "L" if arg > 9223372036854775807L else "Long(" + str(arg) + ")" elif isinstance(arg, Barrier): return "Barrier" + "." + SymbolHelper.toJava(str(arg.name)) elif isinstance(arg, Column): @@ -76,11 +68,13 @@ class JythonTranslator(Translator): return SymbolHelper.toJava(type(arg).__name__) + "." + SymbolHelper.toJava(str(arg.name)) elif isinstance(arg, P): if arg.other is None: - return "P." + SymbolHelper.toJava(arg.operator) + "(" + JythonTranslator.stringOrObject( + return "P." + SymbolHelper.toJava(arg.operator) + "(" + self.stringOrObject( arg.value) + ")" else: - return JythonTranslator.stringOrObject(arg.other) + "." + SymbolHelper.toJava( - arg.operator) + "(" + JythonTranslator.stringOrObject(arg.value) + ")" + return self.stringOrObject(arg.other) + "." + SymbolHelper.toJava( + arg.operator) + "(" + self.stringOrObject(arg.value) + ")" + elif isinstance(arg, Bytecode): + return self.__internalTranslate(self.anonymous_traversal, arg) elif callable(arg): # lambda that produces a string that is a lambda argLambdaString = arg().strip() argLength = len(inspect.getargspec(eval(argLambdaString)).args) @@ -95,15 +89,14 @@ class JythonTranslator(Translator): elif isinstance(arg, tuple) and 2 == len(arg) and isinstance(arg[0], str): # bindings return arg[0] elif isinstance(arg, RawExpression): - return "".join(JythonTranslator.stringOrObject(i) for i in arg.parts) + return "".join(self.stringOrObject(i) for i in arg.parts) else: return str(arg) - @staticmethod - def stringify(*args): + def stringify(self, *args): if len(args) == 0: return "" elif len(args) == 1: - return JythonTranslator.stringOrObject(args[0]) + return self.stringOrObject(args[0]) else: - return ", ".join(JythonTranslator.stringOrObject(i) for i in args) + return ", ".join(self.stringOrObject(i) for i in args) diff --git a/goblin/gremlin_python/traversal.py b/goblin/gremlin_python/process/traversal.py similarity index 68% rename from goblin/gremlin_python/traversal.py rename to goblin/gremlin_python/process/traversal.py index 37dff9176be48a8d2cd8297bfb45917dc95b52ec..7558151f79f9ca7d837bc11e0c650c810eb52a19 100644 --- a/goblin/gremlin_python/traversal.py +++ b/goblin/gremlin_python/process/traversal.py @@ -16,19 +16,21 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ''' +from abc import abstractmethod from aenum import Enum -from . import statics +from gremlin_python import statics -class PythonTraversal(object): - def __init__(self, translator, remote_connection=None): - self.translator = translator - self.remote_connection = remote_connection +class Traversal(object): + def __init__(self, graph, traversal_strategies, bytecode): + self.graph = graph + self.traversal_strategies = traversal_strategies + self.bytecode = bytecode self.results = None self.last_traverser = None self.bindings = {} def __repr__(self): - return self.translator.traversal_script + return self.graph.translator.translate(self.bytecode) def __getitem__(self, index): if isinstance(index, int): @@ -46,8 +48,7 @@ class PythonTraversal(object): def __next__(self): if self.results is None: - self.results = self.remote_connection.submit(self.translator.target_language, - self.translator.traversal_script, self.bindings) + self.traversal_strategies.apply_strategies(self) if self.last_traverser is None: self.last_traverser = next(self.results) object = self.last_traverser.object @@ -191,55 +192,68 @@ def _not(*args): return P._not(*args) statics.add_static('_not',_not) + def between(*args): return P.between(*args) statics.add_static('between',between) + def eq(*args): return P.eq(*args) statics.add_static('eq',eq) + def gt(*args): return P.gt(*args) statics.add_static('gt',gt) + def gte(*args): return P.gte(*args) statics.add_static('gte',gte) + def inside(*args): return P.inside(*args) statics.add_static('inside',inside) + def lt(*args): return P.lt(*args) statics.add_static('lt',lt) + def lte(*args): return P.lte(*args) statics.add_static('lte',lte) + def neq(*args): return P.neq(*args) statics.add_static('neq',neq) + def outside(*args): return P.outside(*args) statics.add_static('outside',outside) + def test(*args): return P.test(*args) statics.add_static('test',test) + def within(*args): return P.within(*args) statics.add_static('within',within) + def without(*args): return P.without(*args) statics.add_static('without',without) + class RawExpression(object): def __init__(self, *args): self.bindings = dict() @@ -258,3 +272,106 @@ class Raw(object): def __str__(self): return str(self.value) + + +''' +TRAVERSER +''' + +class Traverser(object): + def __init__(self, object, bulk): + self.object = object + self.bulk = bulk + def __repr__(self): + return str(self.object) + +''' +TRAVERSAL STRATEGIES +''' + +class TraversalStrategies(object): + global_cache = {} + + def __init__(self, traversal_strategies): + self.traversal_strategies = traversal_strategies + return + + def apply_strategies(self, traversal): + for traversal_strategy in self.traversal_strategies: + traversal_strategy.apply(traversal) + return + + +class TraversalStrategy(object): + @abstractmethod + def apply(self, traversal): + return + +''' +BYTECODE AND TRANSLATOR +''' + +class Bytecode(object): + def __init__(self, bytecode=None): + self.source_instructions = [] + self.step_instructions = [] + if bytecode is not None: + self.source_instructions = list(bytecode.source_instructions) + self.step_instructions = list(bytecode.step_instructions) + + def add_source(self, source_name, *args): + newArgs = () + for arg in args: + newArgs = newArgs + (Bytecode.__convertArgument(arg),) + self.source_instructions.append((source_name, newArgs)) + return + + def add_step(self, step_name, *args): + newArgs = () + for arg in args: + newArgs = newArgs + (Bytecode.__convertArgument(arg),) + self.step_instructions.append((step_name, newArgs)) + return + + @staticmethod + def __convertArgument(arg): + if isinstance(arg, Traversal): + return arg.bytecode + else: + return arg + + +TO_JAVA_MAP = {"_global": "global", "_as": "as", "_in": "in", "_and": "and", + "_or": "or", "_is": "is", "_not": "not", "_from": "from", + "Cardinality": "VertexProperty.Cardinality", "Barrier": "SackFunctions.Barrier"} + + +class Translator(object): + def __init__(self, traversal_source, anonymous_traversal, target_language): + self.traversal_source = traversal_source + self.anonymous_traversal = anonymous_traversal + self.target_language = target_language + + @abstractmethod + def translate(self, bytecode): + return + + @abstractmethod + def __repr__(self): + return "translator[" + self.traversal_source + ":" + self.target_language + "]" + + +class SymbolHelper(object): + @staticmethod + def toJava(symbol): + if (symbol in TO_JAVA_MAP): + return TO_JAVA_MAP[symbol] + else: + return symbol + + @staticmethod + def mapEnum(enum): + if (enum in enumMap): + return enumMap[enum] + else: + return enum diff --git a/goblin/gremlin_python/structure/__init__.py b/goblin/gremlin_python/structure/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..fe9ad179920d5a82abe940c353fa8d516ffcefb2 --- /dev/null +++ b/goblin/gremlin_python/structure/__init__.py @@ -0,0 +1,22 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' +from graph import Graph +from remote_graph import RemoteGraph + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' diff --git a/goblin/gremlin_python/structure/graph.py b/goblin/gremlin_python/structure/graph.py new file mode 100644 index 0000000000000000000000000000000000000000..60b22113b57b5ac40156ad0a4adaaeded39b6586 --- /dev/null +++ b/goblin/gremlin_python/structure/graph.py @@ -0,0 +1,28 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' + +from gremlin_python.process.graph_traversal import GraphTraversalSource +from gremlin_python.process.traversal import TraversalStrategies + + +class Graph(object): + def traversal(self): + return GraphTraversalSource(self, TraversalStrategies.global_cache[self.__class__]) diff --git a/goblin/gremlin_python/structure/remote_graph.py b/goblin/gremlin_python/structure/remote_graph.py new file mode 100644 index 0000000000000000000000000000000000000000..bc2a11aef030d9207143134e85577354b4dfaf59 --- /dev/null +++ b/goblin/gremlin_python/structure/remote_graph.py @@ -0,0 +1,47 @@ +''' +Licensed to the Apache Software Foundation (ASF) under one +or more contributor license agreements. See the NOTICE file +distributed with this work for additional information +regarding copyright ownership. The ASF licenses this file +to you under the Apache License, Version 2.0 (the +"License"); you may not use this file except in compliance +with the License. You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, +software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +KIND, either express or implied. See the License for the +specific language governing permissions and limitations +under the License. +''' + +__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' + +from graph import Graph +from gremlin_python.process.traversal import TraversalStrategies +from gremlin_python.process.traversal import TraversalStrategy + + +class RemoteGraph(Graph): + def __init__(self, translator, remote_connection): + TraversalStrategies.global_cache[self.__class__] = TraversalStrategies([RemoteStrategy()]) + self.translator = translator + self.remote_connection = remote_connection + + def __repr__(self): + return "remotegraph[" + self.remote_connection.url + "]" + + +class RemoteStrategy(TraversalStrategy): + def apply(self, traversal): + if not (traversal.graph.__class__.__name__ == "RemoteGraph"): + raise BaseException( + "RemoteStrategy can only be used with a RemoteGraph: " + traversal.graph.__class__.__name__) + if traversal.results is None: + traversal.results = traversal.graph.remote_connection.submit( + traversal.graph.translator.target_language, # script engine + traversal.graph.translator.translate(traversal.bytecode), # script + traversal.bindings) # bindings + return diff --git a/goblin/gremlin_python/translator.py b/goblin/gremlin_python/translator.py deleted file mode 100644 index 7cfd7526a37d6491ee0324356f13ab5fb2b0319f..0000000000000000000000000000000000000000 --- a/goblin/gremlin_python/translator.py +++ /dev/null @@ -1,69 +0,0 @@ -''' -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. -''' -from abc import abstractmethod - -__author__ = 'Marko A. Rodriguez (http://markorodriguez.com)' - -TO_JAVA_MAP = {"_global": "global", "_as": "as", "_in": "in", "_and": "and", - "_or": "or", "_is": "is", "_not": "not", "_from": "from", - "Cardinality": "VertexProperty.Cardinality", "Barrier": "SackFunctions.Barrier"} - - -class Translator(object): - def __init__(self, alias, source_language, target_language): - self.alias = alias - self.source_language = source_language - self.target_language = target_language - self.traversal_script = alias - - @abstractmethod - def addStep(self, traversal, step_name, *args): - return - - @abstractmethod - def addSpawnStep(self, traversal, step_name, *args): - return - - @abstractmethod - def addSource(self, traversal_source, source_name, *args): - return - - @abstractmethod - def getAnonymousTraversalTranslator(self): - return Translator("__", self.source_language, self.target_language) - - @abstractmethod - def __repr__(self): - return "translator[" + self.source_language + "->" + self.target_language + "]" - - -class SymbolHelper(object): - @staticmethod - def toJava(symbol): - if (symbol in TO_JAVA_MAP): - return TO_JAVA_MAP[symbol] - else: - return symbol - - @staticmethod - def mapEnum(enum): - if (enum in enumMap): - return enumMap[enum] - else: - return enum