in gremlin-python/src/main/python/radish/feature_steps.py [0:0]
def _convert(val, ctx):
graph_name = ctx.graph_name
if isinstance(val, dict): # convert dictionary keys/values
n = {}
for key, value in val.items():
k = _convert(key, ctx)
# convert to tuple key if list/set as neither are hashable
n[tuple(k) if isinstance(k, (set, list)) else k] = _convert(value, ctx)
return n
elif isinstance(val, str) and re.match(r"^l\[.*\]$", val): # parse list
return [] if val == "l[]" else list(map((lambda x: _convert(x, ctx)), val[2:-1].split(",")))
elif isinstance(val, str) and re.match(r"^s\[.*\]$", val): # parse set
return set() if val == "s[]" else set(map((lambda x: _convert(x, ctx)), val[2:-1].split(",")))
elif isinstance(val, str) and re.match(r"^str\[.*\]$", val): # return string as is
return val[4:-1]
elif isinstance(val, str) and re.match(r"^dt\[.*\]$", val): # parse datetime
# python 3.8 can handle only subset of ISO 8601 dates
return datetime.fromisoformat(val[3:-1].replace('Z', '+00:00'))
elif isinstance(val, str) and re.match(r"^uuid\[.*\]$", val): # parse uuid
name = val[5:-1] # strip 'uuid[...]' or similar format
return uuid.UUID(name)
elif isinstance(val, str) and re.match(r"^d\[NaN\]$", val): # parse nan
return float("nan")
elif isinstance(val, str) and re.match(r"^d\[Infinity\]$", val): # parse +inf
return float("inf")
elif isinstance(val, str) and re.match(r"^d\[-Infinity\]$", val): # parse -inf
return float("-inf")
elif isinstance(val, str) and re.match(r"^d\[.*\]\.[bsilfdmn]$", val): # parse numeric
return float(val[2:-3]) if val[2:-3].__contains__(".") else long(val[2:-3])
elif isinstance(val, str) and re.match(r"^v\[.*\]\.id$", val): # parse vertex id
return __find_cached_element(ctx, graph_name, val[2:-4], "v").id
elif isinstance(val, str) and re.match(r"^v\[.*\]\.sid$", val): # parse vertex id as string
return str(__find_cached_element(ctx, graph_name, val[2:-5], "v").id)
elif isinstance(val, str) and re.match(r"^v\[.*\]$", val): # parse vertex
return __find_cached_element(ctx, graph_name, val[2:-1], "v")
elif isinstance(val, str) and re.match(r"^e\[.*\]\.id$", val): # parse edge id
return __find_cached_element(ctx, graph_name, val[2:-4], "e").id
elif isinstance(val, str) and re.match(r"^e\[.*\]\.sid$", val): # parse edge id as string
return str(__find_cached_element(ctx, graph_name, val[2:-5], "e").id)
elif isinstance(val, str) and re.match(r"^e\[.*\]$", val): # parse edge
return __find_cached_element(ctx, graph_name, val[2:-1], "e")
elif isinstance(val, str) and re.match(r"^vp\[.*\]$", val): # parse vertexproperty
return __find_cached_element(ctx, graph_name, val[3:-1], "vp")
elif isinstance(val, str) and re.match(r"^m\[.*\]$", val): # parse json as a map
return _convert(json.loads(val[2:-1]), ctx)
elif isinstance(val, str) and re.match(r"^p\[.*\]$", val): # parse path
path_objects = list(map((lambda x: _convert(x, ctx)), val[2:-1].split(",")))
return Path([set([])], path_objects)
elif isinstance(val, str) and re.match(r"^t\[.*\]$", val): # parse instance of T enum
return T[val[2:-1]]
elif isinstance(val, str) and re.match(r"^D\[.*\]$", val): # parse instance of Direction enum
return Direction[__alias_direction(val[2:-1])]
elif isinstance(val, str) and re.match(r"^M\[.*\]$", val): # parse instance of Merge enum
return Merge[__alias_merge(val[2:-1])]
elif isinstance(val, str) and re.match(r"^null$", val): # parse null to None
return None
elif isinstance(val, str) and re.match(r"^true$", val): # parse to boolean
return True
elif isinstance(val, str) and re.match(r"^false$", val): # parse to boolean
return False
else:
return val