diff options
| author | Daniil Baturin <daniil@vyos.io> | 2026-10-01 17:46:46 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-01 17:46:46 +0100 |
| commit | 954afbf43c52460c4c7385a8b5cb44af66835064 (patch) | |
| tree | 9861c7b729d4fd3eea56a601e4910e8856684e8c /python | |
| parent | dfe2203a7fe7fa24de3fa2d8e82fa85dbb0eba52 (diff) | |
| parent | b3a6256c10ebb65df3937a9d32cffe8e9b51795a (diff) | |
| download | vyos-1x-954afbf43c52460c4c7385a8b5cb44af66835064.tar.gz vyos-1x-954afbf43c52460c4c7385a8b5cb44af66835064.zip | |
Merge pull request #5493 from jestabro/trim-reftree-caches
T9341: Fix consistency of legacy templates, xml_ref cache, and reference tree
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/configtree.py | 9 | ||||
| -rw-r--r-- | python/vyos/referencetree.py | 8 | ||||
| -rwxr-xr-x | python/vyos/xml_ref/generate_cache.py | 18 |
3 files changed, 31 insertions, 4 deletions
diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py index a6ba408a8..dceb205ab 100644 --- a/python/vyos/configtree.py +++ b/python/vyos/configtree.py @@ -829,12 +829,17 @@ def subtree_values_of_path( return list(map(tuple, lst)) -def reference_tree_to_json(from_dir, to_file, internal_cache='', libpath=LIBPATH): +def reference_tree_to_json( + from_dir, to_file, internal_cache='', exclude_paths='[]', libpath=LIBPATH +): # pylint: disable=raise-missing-from try: lib = get_lib(libpath) res = lib.reference_tree_to_json( - internal_cache.encode(), from_dir.encode(), to_file.encode() + internal_cache.encode(), + exclude_paths.encode(), + from_dir.encode(), + to_file.encode(), ) except Exception as e: raise ConfigTreeError(e) diff --git a/python/vyos/referencetree.py b/python/vyos/referencetree.py index 1ffa690bc..2f50b19d4 100644 --- a/python/vyos/referencetree.py +++ b/python/vyos/referencetree.py @@ -18,6 +18,7 @@ from pathlib import Path from vyos.defaults import reference_tree_cache from vyos.configtree import LIBPATH from vyos.configtree import get_lib +from vyos.configtree import check_path class ReferenceTreeError(Exception): @@ -62,6 +63,13 @@ class ReferenceTree: def to_json(self): return self.__lib.to_json_reference_tree(self.__pointer).decode() + def exists(self, path): + check_path(path) + path_str = ' '.join(map(str, path)).encode() + + res = self.__lib.exists(self.__pointer, path_str) + return bool(res) + def get_owner(self, path): return self.__lib.get_owner(self.__pointer, path.encode()).decode() diff --git a/python/vyos/xml_ref/generate_cache.py b/python/vyos/xml_ref/generate_cache.py index daea50dc9..44514f708 100755 --- a/python/vyos/xml_ref/generate_cache.py +++ b/python/vyos/xml_ref/generate_cache.py @@ -60,6 +60,9 @@ def main(): parser.add_argument('--package-name', type=non_trivial, default='vyos-1x', help='name of current package') parser.add_argument('--output-path', help='path to generated cache') + parser.add_argument( + '--exclude-paths', action='extend', nargs='+', help='exclude paths from cache' + ) args = vars(parser.parse_args()) xml_dir = abspath(args['xml_dir']) @@ -69,10 +72,21 @@ def main(): path = out_path if out_path is not None else pkg_cache xml_cache = abspath(join(path, cache_name)) internal_cache = args['internal_cache'] + exclude_paths = args['exclude_paths'] or [] + # we accept paths as directory path strings, with possible 'node.tag' + # entries, for comparison with removal in template dirs in the Makefile + exclude_paths = list( + map(lambda l: [c for c in l.split('/') if c and c != 'node.tag'], exclude_paths) + ) + json_exclude_paths = json.dumps(exclude_paths) try: - reference_tree_to_json(xml_dir, xml_tmp, - internal_cache=internal_cache) + reference_tree_to_json( + xml_dir, + xml_tmp, + internal_cache=internal_cache, + exclude_paths=json_exclude_paths, + ) except ConfigTreeError as e: print(e) sys.exit(1) |
