summaryrefslogtreecommitdiff
path: root/python/vyos/xml_ref/op_definition.py
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2024-08-04 21:19:32 -0500
committerJohn Estabrook <jestabro@vyos.io>2024-08-12 07:58:05 -0500
commit832056ad5171b28c50270389c4537f6c7a542d59 (patch)
treeaa511514a25ccffbfab61a22543ecf8bbe559eee /python/vyos/xml_ref/op_definition.py
parentba0f8dbdb2766a67b6715291ac08ad0eb1cf62b7 (diff)
downloadvyos-1x-832056ad5171b28c50270389c4537f6c7a542d59.tar.gz
vyos-1x-832056ad5171b28c50270389c4537f6c7a542d59.zip
xml: T6650: add initial op-mode cache support
Diffstat (limited to 'python/vyos/xml_ref/op_definition.py')
-rw-r--r--python/vyos/xml_ref/op_definition.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/python/vyos/xml_ref/op_definition.py b/python/vyos/xml_ref/op_definition.py
new file mode 100644
index 000000000..914f3a105
--- /dev/null
+++ b/python/vyos/xml_ref/op_definition.py
@@ -0,0 +1,49 @@
+# Copyright 2024 VyOS maintainers and contributors <maintainers@vyos.io>
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this library. If not, see <http://www.gnu.org/licenses/>.
+
+from typing import TypedDict
+from typing import TypeAlias
+from typing import Optional
+from typing import Union
+
+
+class NodeData(TypedDict):
+ node_type: Optional[str]
+ help_text: Optional[str]
+ comp_help: Optional[dict[str, list]]
+ command: Optional[str]
+ path: Optional[list[str]]
+
+
+PathData: TypeAlias = dict[str, Union[NodeData|list['PathData']]]
+
+
+class OpXml:
+ def __init__(self):
+ self.op_ref = {}
+
+ def define(self, op_ref: list[PathData]) -> None:
+ self.op_ref = op_ref
+
+ def _get_op_ref_path(self, path: list[str]) -> list[PathData]:
+ def _get_path_list(path: list[str], l: list[PathData]) -> list[PathData]:
+ if not path:
+ return l
+ for d in l:
+ if path[0] in list(d):
+ return _get_path_list(path[1:], d[path[0]])
+ return []
+ l = self.op_ref
+ return _get_path_list(path, l)