diff options
| author | John Estabrook <jestabro@vyos.io> | 2024-10-07 10:39:47 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-07 10:39:47 -0500 |
| commit | f7086df4eff221abaaf26d6f05403642c69369a3 (patch) | |
| tree | 653f4832a71446403ea9271619861bbe9bd430b4 /python/vyos/xml_ref | |
| parent | e8c65fafc1ea5c8682b717302a876fcff2067f3d (diff) | |
| parent | 8013e228320a414087e3456c1632b479483b856c (diff) | |
| download | veeos-1x-f7086df4eff221abaaf26d6f05403642c69369a3.tar.gz veeos-1x-f7086df4eff221abaaf26d6f05403642c69369a3.zip | |
Merge pull request #4124 from dmbaturin/T6740-set-to-config-converter
cli: T6740: add a converter from set commands to config
Diffstat (limited to 'python/vyos/xml_ref')
| -rw-r--r-- | python/vyos/xml_ref/definition.py | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/python/vyos/xml_ref/definition.py b/python/vyos/xml_ref/definition.py index 5ff28daed..4e755ab72 100644 --- a/python/vyos/xml_ref/definition.py +++ b/python/vyos/xml_ref/definition.py @@ -13,7 +13,7 @@ # 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 Optional, Union, Any, TYPE_CHECKING +from typing import Tuple, Optional, Union, Any, TYPE_CHECKING # https://peps.python.org/pep-0484/#forward-references # for type 'ConfigDict' @@ -90,6 +90,32 @@ class Xml: res = self._get_ref_node_data(node, 'node_type') return res == 'tag' + def exists(self, path: list) -> bool: + try: + _ = self._get_ref_path(path) + return True + except ValueError: + return False + + def split_path(self, path: list) -> Tuple[list, Optional[str]]: + """ Splits a list into config path and value components """ + + # First, check if the complete path is valid by itself + if self.exists(path): + if self.is_valueless(path) or not self.is_leaf(path): + # It's a complete path for a valueless node + # or a path to an empy non-leaf node + return (path, None) + else: + raise ValueError(f'Path "{path}" needs a value or children') + else: + # If the complete path doesn't exist, it's probably a path with a value + if self.exists(path[0:-1]): + return (path[0:-1], path[-1]) + else: + # Or not a valid path at all + raise ValueError(f'Path "{path}" is incorrect') + def is_tag(self, path: list) -> bool: ref_path = path.copy() d = self.ref |
