summaryrefslogtreecommitdiff
path: root/python/vyos/xml/definition.py
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/vyos/xml/definition.py
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/vyos/xml/definition.py')
-rw-r--r--python/vyos/xml/definition.py16
1 files changed, 10 insertions, 6 deletions
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)