diff options
| author | Daniil Baturin <daniil@vyos.io> | 2024-08-14 17:26:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-08-14 17:26:05 +0100 |
| commit | e0ce3f0e5a979e678d20a77f37fb6626806c28a5 (patch) | |
| tree | ce3750b4f2cd9a269b1d7be6a8b55dd5119f4286 /python/vyos/xml_ref/op_definition.py | |
| parent | e229d7498cc77298c79af9811a742f3ad54edf4c (diff) | |
| parent | 832056ad5171b28c50270389c4537f6c7a542d59 (diff) | |
| download | veeos-1x-e0ce3f0e5a979e678d20a77f37fb6626806c28a5.tar.gz veeos-1x-e0ce3f0e5a979e678d20a77f37fb6626806c28a5.zip | |
Merge pull request #3971 from jestabro/op-mode-cache
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) |
