import random import string def list_or_args(keys, args): # returns a single new list combining keys and args try: iter(keys) # a string or bytes instance can be iterated, but indicates # keys wasn't passed as a list if isinstance(keys, (bytes, str)): keys = [keys] else: keys = list(keys) except TypeError: keys = [keys] if args: keys.extend(args) return keys def nativestr(x): """Return the decoded binary string, or a string, depending on type.""" r = x.decode("utf-8", "replace") if isinstance(x, bytes) else x if r == 'null': return return r def delist(x): """Given a list of binaries, return the stringified version.""" if x is None: return x return [nativestr(obj) for obj in x] def parse_to_list(response): """Optimistally parse the response to a list. """ res = [] for item in response: try: res.append(int(item)) except ValueError: res.append(nativestr(item)) except TypeError: res.append(None) return res def random_string(length=10): """ Returns a random N character long string. """ return "".join( # nosec random.choice(string.ascii_lowercase) for x in range(length) ) def quote_string(v): """ RedisGraph strings must be quoted, quote_string wraps given v with quotes incase v is a string. """ if isinstance(v, bytes): v = v.decode() elif not isinstance(v, str): return v if len(v) == 0: return '""' v = v.replace('"', '\\"') return '"{}"'.format(v)