Skip to content

Commit

Permalink
config: T5228: add arg with_defaults to get_config_dict
Browse files Browse the repository at this point in the history
  • Loading branch information
jestabro committed May 20, 2023
1 parent 5daece2 commit da74a0b
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions python/vyos/config.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright 2017, 2019 VyOS maintainers and contributors <maintainers@vyos.io>
# Copyright 2017, 2019-2023 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
Expand Down Expand Up @@ -67,9 +67,9 @@
import json
from copy import deepcopy

import vyos.xml
import vyos.util
import vyos.configtree
from vyos.xml_ref import multi_to_list, merge_defaults
from vyos.utils.dict import get_sub_dict, mangle_dict_keys
from vyos.configsource import ConfigSource, ConfigSourceSession

class Config(object):
Expand Down Expand Up @@ -225,7 +225,7 @@ def get_cached_root_dict(self, effective=False):

def get_config_dict(self, path=[], effective=False, key_mangling=None,
get_first_key=False, no_multi_convert=False,
no_tag_node_value_mangle=False):
no_tag_node_value_mangle=False, with_defaults=False):
"""
Args:
path (str list): Configuration tree path, can be empty
Expand All @@ -238,27 +238,29 @@ def get_config_dict(self, path=[], effective=False, key_mangling=None,
"""
lpath = self._make_path(path)
root_dict = self.get_cached_root_dict(effective)
conf_dict = vyos.util.get_sub_dict(root_dict, lpath, get_first_key)
conf_dict = get_sub_dict(root_dict, lpath, get_first_key)

if not key_mangling and no_multi_convert:
if key_mangling is None and no_multi_convert and not with_defaults:
return deepcopy(conf_dict)

xmlpath = lpath if get_first_key else lpath[:-1]
rpath = lpath if get_first_key else lpath[:-1]

if not key_mangling:
conf_dict = vyos.xml.multi_to_list(xmlpath, conf_dict)
return conf_dict
if not no_multi_convert:
conf_dict = multi_to_list(rpath, conf_dict)

if with_defaults:
conf_dict = merge_defaults(rpath, conf_dict)

if no_multi_convert is False:
conf_dict = vyos.xml.multi_to_list(xmlpath, conf_dict)
if key_mangling is None:
return conf_dict

if not (isinstance(key_mangling, tuple) and \
(len(key_mangling) == 2) and \
isinstance(key_mangling[0], str) and \
isinstance(key_mangling[1], str)):
raise ValueError("key_mangling must be a tuple of two strings")

conf_dict = vyos.util.mangle_dict_keys(conf_dict, key_mangling[0], key_mangling[1], abs_path=xmlpath, no_tag_node_value_mangle=no_tag_node_value_mangle)
conf_dict = mangle_dict_keys(conf_dict, key_mangling[0], key_mangling[1], abs_path=rpath, no_tag_node_value_mangle=no_tag_node_value_mangle)

return conf_dict

Expand Down

0 comments on commit da74a0b

Please sign in to comment.