diff options
author | John Estabrook <jestabro@vyos.io> | 2024-08-04 21:19:32 -0500 |
---|---|---|
committer | John Estabrook <jestabro@vyos.io> | 2024-08-12 07:58:05 -0500 |
commit | 832056ad5171b28c50270389c4537f6c7a542d59 (patch) | |
tree | aa511514a25ccffbfab61a22543ecf8bbe559eee /python/vyos/xml_ref/op_definition.py | |
parent | ba0f8dbdb2766a67b6715291ac08ad0eb1cf62b7 (diff) | |
download | vyos-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.py | 49 |
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) |