summaryrefslogtreecommitdiff
path: root/python
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-06-27 15:05:42 +0200
committerChristian Poessinger <christian@poessinger.com>2020-06-27 15:05:42 +0200
commit9d2e6cfec3722f421e21fe971534995757e72701 (patch)
treebb8717f6a68b8a3cdab7d00e425f4d4faf3bbc19 /python
parent4aca048919b2237ce065bf22a775d782e780ff5a (diff)
parent3977fe705b0155ef380e3522201b812fa2149f76 (diff)
downloadvyos-1x-9d2e6cfec3722f421e21fe971534995757e72701.tar.gz
vyos-1x-9d2e6cfec3722f421e21fe971534995757e72701.zip
Merge branch 'T2656' of https://github.com/thomas-mangin/vyos-1x into current
* 'T2656' of https://github.com/thomas-mangin/vyos-1x: xml: T2656: option to not flatten the default dict
Diffstat (limited to 'python')
-rw-r--r--python/vyos/xml/__init__.py9
-rw-r--r--python/vyos/xml/definition.py16
2 files changed, 17 insertions, 8 deletions
diff --git a/python/vyos/xml/__init__.py b/python/vyos/xml/__init__.py
index 52f5bfb38..bda8c96c5 100644
--- a/python/vyos/xml/__init__.py
+++ b/python/vyos/xml/__init__.py
@@ -35,5 +35,10 @@ def load_configuration(cache=[]):
return xml
-def defaults(lpath):
- return load_configuration().defaults(lpath)
+def defaults(lpath, flat=True):
+ return load_configuration().defaults(lpath, flat)
+
+
+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 a66170a18..e493c54c1 100644
--- a/python/vyos/xml/definition.py
+++ b/python/vyos/xml/definition.py
@@ -11,6 +11,7 @@
# You should have received a copy of the GNU Lesser General Public License along with this library;
# if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+from copy import deepcopy
from vyos.xml import kw
@@ -246,28 +247,31 @@ class XML(dict):
# @lru_cache(maxsize=100)
# XXX: need to use cachetool instead - for later
- def defaults(self, lpath):
+ def defaults(self, lpath, flat):
d = self[kw.default]
for k in lpath:
d = d[k]
- r = {}
- def _flatten(inside, index, d, r):
+ if not flat:
+ return deepcopy(d)
+
+ def _flatten(inside, index, d):
+ r = {}
local = inside[index:]
prefix = '_'.join(_.replace('-','_') for _ in local) + '_' if local else ''
for k in d:
under = prefix + k.replace('-','_')
level = inside + [k]
if isinstance(d[k],dict):
- _flatten(level, index, d[k], r)
+ r.update(_flatten(level, index, d[k]))
continue
if self.is_multi(level, with_tag=False):
r[under] = [_.strip() for _ in d[k].split(',')]
continue
r[under] = d[k]
+ return r
- _flatten(lpath, len(lpath), d, r)
- return r
+ return _flatten(lpath, len(lpath), d)
# from functools import lru_cache
# @lru_cache(maxsize=100)