summaryrefslogtreecommitdiff
path: root/python/vyos/xml
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2020-08-30 08:22:32 -0500
committerJohn Estabrook <jestabro@vyos.io>2020-08-30 09:56:46 -0500
commitb40c52682a25664f7018ab8b4e5ba6f467f10d17 (patch)
treef582fdaf8c0aa5ce769d63ab54518233fa2fb4bc /python/vyos/xml
parentbab1534e0fc1e6da538414b8b032342eb2598f03 (diff)
downloadvyos-1x-b40c52682a25664f7018ab8b4e5ba6f467f10d17.tar.gz
vyos-1x-b40c52682a25664f7018ab8b4e5ba6f467f10d17.zip
config: T2636: get_config_dict() returns a list on multi node by default
Unless no_multi_convert is True, a single valued multi node will be returned as a list by get_config_dict(). Modification of Thomas Mangin's version.
Diffstat (limited to 'python/vyos/xml')
-rw-r--r--python/vyos/xml/__init__.py4
-rw-r--r--python/vyos/xml/definition.py17
2 files changed, 21 insertions, 0 deletions
diff --git a/python/vyos/xml/__init__.py b/python/vyos/xml/__init__.py
index 0f914fed2..0ef0c85ce 100644
--- a/python/vyos/xml/__init__.py
+++ b/python/vyos/xml/__init__.py
@@ -51,6 +51,10 @@ def defaults(lpath, flat=False):
return load_configuration().defaults(lpath, flat)
+def multi_to_list(lpath, conf):
+ return load_configuration().multi_to_list(lpath, conf)
+
+
if __name__ == '__main__':
print(defaults(['service'], flat=True))
print(defaults(['service'], flat=False))
diff --git a/python/vyos/xml/definition.py b/python/vyos/xml/definition.py
index 098e64f7e..6d6fcb5c7 100644
--- a/python/vyos/xml/definition.py
+++ b/python/vyos/xml/definition.py
@@ -281,6 +281,23 @@ class XML(dict):
return _flatten(lpath, len(lpath), d)
+ def multi_to_list(self, lpath, conf):
+ r = {}
+ for k in conf:
+ # key mangling could also be done here
+ # it would prevent two parsing of the config tree
+ # under = k.replace('-','_')
+ under = k
+ fpath = lpath + [k]
+ if isinstance(conf[k],dict):
+ r[under] = self.multi_to_list(fpath, conf[k])
+ continue
+ value = conf[k]
+ if self.is_multi(fpath) and not isinstance(value, list):
+ value = [value]
+ r[under] = value
+ return r
+
# from functools import lru_cache
# @lru_cache(maxsize=100)
# XXX: need to use cachetool instead - for later