def _arg_as_string()

in gremlin-python/src/main/python/gremlin_python/process/traversal.py [0:0]


    def _arg_as_string(self, arg):

        if arg is None:
            return 'null'

        if isinstance(arg, str):
            return f'{arg!r}'  # use repr() format for canonical string rep
            # return f'"{arg}"'
        if isinstance(arg, bool):
            return 'true' if arg else 'false'

        if isinstance(arg, SingleByte):
            return f'{arg}B'
        if isinstance(arg, short):
            return f'{arg}S'
        if isinstance(arg, long):
            return f'{arg}L'
        if isinstance(arg, bigint):
            return f'{arg}N'
        if isinstance(arg, int):
            return f'{arg}'
        if isinstance(arg, float):
            # converting floats into doubles for script since python doesn't distinguish and java defaults to double
            if math.isnan(arg):
                return "NaN"
            elif math.isinf(arg) and arg > 0:
                return "+Infinity"
            elif math.isinf(arg) and arg < 0:
                return "-Infinity"
            else:
                return f'{arg}D'
        if isinstance(arg, BigDecimal):
            return f'{arg.value}M'

        if isinstance(arg, datetime):
            return f'datetime("{arg.isoformat()}")'

        if isinstance(arg, Enum):
            tmp = str(arg)
            if tmp.endswith('_'):
                return tmp[0:-1]
            elif '_' in tmp:
                return f'{tmp.split("_")[0]}{tmp.split("_")[1].capitalize()}'
            else:
                return tmp

        if isinstance(arg, Vertex):
            return f'new ReferenceVertex({self._arg_as_string(arg.id)},\'{arg.label}\')'

        if isinstance(arg, P):
            return self._process_predicate(arg)

        if isinstance(arg, GremlinLang) or isinstance(arg, Traversal):
            gremlin_lang = arg if isinstance(arg, GremlinLang) else arg.gremlin_lang
            self.parameters.update(gremlin_lang.parameters)
            return gremlin_lang.get_gremlin('__')

        if isinstance(arg, GValue):
            key = arg.get_name()

            if not key.isidentifier():
                raise Exception(f'invalid parameter name {key}.')

            if key in self.parameters:
                if self.parameters[key] != arg.value:
                    raise Exception(f'parameter with name {key} already exists.')
            else:
                self.parameters[key] = arg.value
            return key

        if isinstance(arg, dict):
            return self._process_dict(arg)

        if isinstance(arg, set):
            return self._process_set(arg)

        if isinstance(arg, list):
            return self._process_list(arg)

        if hasattr(arg, '__class__'):
            try:
                return arg.__name__
            except AttributeError:
                pass

        return self._as_parameter(arg)