in code/python/tools/generate_node_metadata_from_vrscene.py [0:0]
def get_strings_for_plugin(plugin):
nodes_to_visit = []
path_prefixes = []
nodes_to_visit_added_by = []
traversal_stack = []
strings = []
paths = []
nodes_to_visit.append(plugin)
path_prefixes.append("<root>")
nodes_to_visit_added_by.append(None)
while len(nodes_to_visit) > 0:
node = nodes_to_visit.pop(0)
path_prefix = path_prefixes.pop(0)
added_by = nodes_to_visit_added_by.pop(0)
if len(traversal_stack) != 0:
while traversal_stack[-1] != added_by:
traversal_stack.pop()
if isinstance(node, str):
strings.append(node)
paths.append(path_prefix)
if isinstance(node, vray.Plugin) and not isinstance(node, vray.PluginRef):
strings.append(str(node))
paths.append(path_prefix)
node_key = str(node)
traversal_stack.append(node_key)
tmp_nodes_to_visit = []
tmp_path_prefixes = []
tmp_nodes_to_visit_added_by = []
for param_name in sort(list(node.getMeta().keys())):
param = node.__getitem__(param_name)
param_meta = node.getMeta()[param_name]
if isinstance(param, str):
tmp_nodes_to_visit.append(param)
tmp_path_prefixes.append(path_prefix + "." + param_name)
tmp_nodes_to_visit_added_by.append(node_key)
if isinstance(param, vray.Plugin) and not isinstance(param, vray.PluginRef):
param_key = str(param)
if param_key not in traversal_stack:
tmp_nodes_to_visit.append(param)
tmp_path_prefixes.append(path_prefix + "." + param_name)
tmp_nodes_to_visit_added_by.append(node_key)
if isinstance(param, vray.List) and param_meta["type"] == "List<String>":
for i in range(len(param)):
pi_ = param[i]
tmp_nodes_to_visit.append(pi_)
tmp_path_prefixes.append(path_prefix + "." + param_name + "[" + str(i) + "]")
tmp_nodes_to_visit_added_by.append(node_key)
if isinstance(param, vray.List) and param_meta["type"] == "List<Plugin>":
for i in range(len(param)):
pi_ = param[i]
param_key = str(pi_)
if not isinstance(pi_, vray.PluginRef) and param_key not in traversal_stack:
tmp_nodes_to_visit.append(pi_)
tmp_path_prefixes.append(path_prefix + "." + param_name + "[" + str(i) + "]")
tmp_nodes_to_visit_added_by.append(node_key)
nodes_to_visit = tmp_nodes_to_visit + nodes_to_visit
path_prefixes = tmp_path_prefixes + path_prefixes
nodes_to_visit_added_by = tmp_nodes_to_visit_added_by + nodes_to_visit_added_by
assert len(nodes_to_visit) == 0
assert len(path_prefixes) == 0
assert len(nodes_to_visit_added_by) == 0
return paths, strings