def get_strings_for_plugin()

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