def do_translation()

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