summaryrefslogtreecommitdiff
path: root/python/vyos/utils/dict.py
diff options
context:
space:
mode:
authorChristian Breunig <christian@breunig.cc>2023-06-12 21:15:39 +0200
committerGitHub <noreply@github.com>2023-06-12 21:15:39 +0200
commitdd1cdc4ec18ef000f39228f773e1ceafc9fce766 (patch)
treef391f80db247106bc29504f7afe008f9af46433e /python/vyos/utils/dict.py
parent4816264e3a6b824da2d0b96aea60f958c46947a2 (diff)
parentf8670aadaa2de60972b55a9784a5dfb6c75193d1 (diff)
downloadvyos-1x-dd1cdc4ec18ef000f39228f773e1ceafc9fce766.tar.gz
vyos-1x-dd1cdc4ec18ef000f39228f773e1ceafc9fce766.zip
Merge pull request #2037 from jestabro/api-config-section
http-api: T5248: set/load config sections as JSON via API
Diffstat (limited to 'python/vyos/utils/dict.py')
-rw-r--r--python/vyos/utils/dict.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/python/vyos/utils/dict.py b/python/vyos/utils/dict.py
index 7c93deef6..3faf5c596 100644
--- a/python/vyos/utils/dict.py
+++ b/python/vyos/utils/dict.py
@@ -234,6 +234,27 @@ def dict_to_list(d, save_key_to=None):
return collect
+def dict_to_paths(d: dict) -> list:
+ """ Generator to return list of paths from dict of list[str]|str
+ """
+ def func(d, path):
+ if isinstance(d, dict):
+ if not d:
+ yield path
+ for k, v in d.items():
+ for r in func(v, path + [k]):
+ yield r
+ elif isinstance(d, list):
+ for i in d:
+ for r in func(i, path):
+ yield r
+ elif isinstance(d, str):
+ yield path + [d]
+ else:
+ raise ValueError('object is not a dict of strings/list of strings')
+ for r in func(d, []):
+ yield r
+
def check_mutually_exclusive_options(d, keys, required=False):
""" Checks if a dict has at most one or only one of
mutually exclusive keys.