in gremlin-python/src/main/python/gremlin_python/process/translator.py [0:0]
def do_translation(self, step):
script = ''
params = step[1:]
script += '.' + step[0] + '('
if len(params) > 0:
c = 0
with_opts = False
is_merge_op = (step[0] == 'mergeV') or (step[0] == 'mergeE')
for p in params:
script += ',' if c > 0 else ''
if with_opts:
script += f'WithOptions.{self.options[p]}'
elif type(p) == Bytecode:
script += self.translate(p, True)
elif isinstance(p, P):
script += self.process_predicate(p)
elif type(p) == Vertex:
script += self.process_vertex(p)
elif type(p) == Edge:
script += self.process_edge(p)
elif type(p) == VertexProperty:
script += self.process_vertex_property(p)
elif type(p) in [Cardinality, Pop, Operator, Scope, T]:
tmp = str(p)
script += tmp[0:-1] if tmp.endswith('_') else tmp
elif type(p) in [Merge]: # on_create on_match out_v in_v
is_merge_op = True
tmp = str(p)
script += f'{tmp.split("_")[0]}{tmp.split("_")[1].capitalize()}' if tmp.find('_') else tmp
elif isinstance(p, TraversalStrategy): # this will capture all strategies
script += self.process_strategy(p)
elif type(p) == datetime:
script += self.process_date(p)
elif p == WithOptions.tokens:
script += 'WithOptions.tokens'
with_opts = True
elif isinstance(p, str):
script += f'{p!r}' # use repr() format for canonical string rep
elif type(p) == bool:
script += 'true' if p else 'false'
elif isinstance(p, type(lambda: None)) and p.__name__ == (lambda: None).__name__:
script += self.process_lambda(p)
elif type(p) == Binding:
script += self.process_binding(p)
elif p is None:
script += '(Traversal) null' if is_merge_op else 'null'
elif isinstance(p, type):
script += p.__name__
elif isinstance(p, dict):
script += self.process_dict(p)
elif isinstance(p, numbers.Number):
script += self.process_number(p)
elif isinstance(p, set):
script += f'[{str(p)[1:-1]}] as Set' if len(p) > 0 else '[] as Set'
elif isinstance(p, list):
script += self.process_list(p)
else:
script += str(p)
c += 1
script += ')'
return script