summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@vyos.io>2024-08-24 09:03:36 +0100
committerGitHub <noreply@github.com>2024-08-24 09:03:36 +0100
commit00c7ef09b719bf70f6500389fec9eb161f231597 (patch)
treecc2e88faa74ba2d17347b575c6ce9738f4b701e9
parent94908b75bbce9eb2d867e8347901ae23ca6d5b4e (diff)
parent3ff2f3204ababa520f49b83101d4c9ee33304ed3 (diff)
downloadvyos-1x-00c7ef09b719bf70f6500389fec9eb161f231597.tar.gz
vyos-1x-00c7ef09b719bf70f6500389fec9eb161f231597.zip
Merge pull request #4013 from vyos/mergify/bp/sagitta/pr-3428
xml: T6319: add util for ancestor owner/priority (backport #3428)
-rw-r--r--python/vyos/xml_ref/__init__.py6
-rw-r--r--python/vyos/xml_ref/definition.py27
2 files changed, 33 insertions, 0 deletions
diff --git a/python/vyos/xml_ref/__init__.py b/python/vyos/xml_ref/__init__.py
index bf434865d..2ba3da4e8 100644
--- a/python/vyos/xml_ref/__init__.py
+++ b/python/vyos/xml_ref/__init__.py
@@ -53,6 +53,12 @@ def is_valueless(path: list) -> bool:
def is_leaf(path: list) -> bool:
return load_reference().is_leaf(path)
+def owner(path: list) -> str:
+ return load_reference().owner(path)
+
+def priority(path: list) -> str:
+ return load_reference().priority(path)
+
def cli_defined(path: list, node: str, non_local=False) -> bool:
return load_reference().cli_defined(path, node, non_local=non_local)
diff --git a/python/vyos/xml_ref/definition.py b/python/vyos/xml_ref/definition.py
index c90c5ddbc..c85835ffd 100644
--- a/python/vyos/xml_ref/definition.py
+++ b/python/vyos/xml_ref/definition.py
@@ -135,6 +135,33 @@ class Xml:
d = self._get_ref_path(path)
return self._is_leaf_node(d)
+ def _least_upper_data(self, path: list, name: str) -> str:
+ ref_path = path.copy()
+ d = self.ref
+ data = ''
+ while ref_path and d:
+ d = d.get(ref_path[0], {})
+ ref_path.pop(0)
+ if self._is_tag_node(d) and ref_path:
+ ref_path.pop(0)
+ if self._is_leaf_node(d) and ref_path:
+ ref_path.pop(0)
+ res = self._get_ref_node_data(d, name)
+ if res is not None:
+ data = res
+
+ return data
+
+ def owner(self, path: list) -> str:
+ from pathlib import Path
+ data = self._least_upper_data(path, 'owner')
+ if data:
+ data = Path(data.split()[0]).name
+ return data
+
+ def priority(self, path: list) -> str:
+ return self._least_upper_data(path, 'priority')
+
@staticmethod
def _dict_get(d: dict, path: list) -> dict:
for i in path: