At the moment, the op mode cache is a mix of lists and dicts, so any search algorithm needs to check what's inside — a list of a dict.
Additionally, it puts lots of fields inside a node_data subdict, even though their names are unique and don't clash with anything at the upper level.
op_reference = [
{'show': [
{'node_data': {'node_type': 'node', 'help_text': None, 'comp_help': None, 'command': None, 'path': ['show']}},I believe it's beneficial to:
- Flatten the node dict and place node properties at the top level.
- Make all entries lists of dicts, move the node name to inside the node dict, and put children in the children field.
[
{
"name": "show",
"type": "node",
"comp_help": {},
"command": null,
"path": [
"show"
],
"children": [
{
"name": "kernel",
"type": "node",
"comp_help": {},
"command": null,
"path": [
"show",
"kernel"
],
"children": [
{
"name": "modules",
"type": "node",
"comp_help": {},
"command": "sudo /usr/libexec/vyos//op_mode/kernel_modules.py show",
"path": [
"show",
"kernel",
"modules"
],
"children": []
}
]
}
]
},