From fa674c1256c53e5998ecf7e9351f8c164e012f5c Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Fri, 12 Jun 2026 10:13:38 -0500 Subject: T8980: add util get_saved_config_tree Add util for commonly used retrieval of ConfigTree of the saved config. --- python/vyos/configtree.py | 15 +++++++++++++++ python/vyos/utils/config.py | 12 ++++++++++++ 2 files changed, 27 insertions(+) (limited to 'python') diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py index 9c5d69ad1..24b3252fd 100644 --- a/python/vyos/configtree.py +++ b/python/vyos/configtree.py @@ -19,6 +19,8 @@ import logging from ctypes import cdll, c_char_p, c_void_p, c_int, c_bool from typing import TYPE_CHECKING +from pathlib import Path + # https://peps.python.org/pep-0484/#forward-references # for type 'ConfigDict' @@ -265,6 +267,19 @@ class ConfigTree: if self.__migration: self.migration_log = logging.getLogger('vyos.migrate') + @classmethod + def load_file(cls, location): + # pylint: disable=raise-missing-from + config_file = Path(location) + if not config_file.exists(): + raise ConfigTreeError(f'Missing config file at {location}') + try: + config_tree = cls(config_file.read_text()) + except (OSError, ValueError, TypeError) as e: + raise ConfigTreeError(f'Corrupted config file at {location}: {e}') + + return config_tree + def __del__(self): if self.__config is not None: self.__destroy(self.__config) diff --git a/python/vyos/utils/config.py b/python/vyos/utils/config.py index 1032e22dc..004d64bbd 100644 --- a/python/vyos/utils/config.py +++ b/python/vyos/utils/config.py @@ -75,6 +75,18 @@ def write_saved_value(path: list, value=None, config_path: str=config_file): write_file(config_path, ct.to_string()) + +def get_saved_config_tree() -> 'ConfigTree': + # pylint: disable=import-outside-toplevel + """Return config tree of saved config. + + Raises ConfigTreeError. + """ + from vyos.configtree import ConfigTree + + return ConfigTree.load_file(config_file) + + def flag(l: list) -> list: res = [l[0:i] for i,_ in enumerate(l, start=1)] return res -- cgit v1.2.3