diff options
author | Christian Breunig <christian@breunig.cc> | 2023-06-12 21:15:39 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-12 21:15:39 +0200 |
commit | dd1cdc4ec18ef000f39228f773e1ceafc9fce766 (patch) | |
tree | f391f80db247106bc29504f7afe008f9af46433e /python/vyos/utils/dict.py | |
parent | 4816264e3a6b824da2d0b96aea60f958c46947a2 (diff) | |
parent | f8670aadaa2de60972b55a9784a5dfb6c75193d1 (diff) | |
download | vyos-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.py | 21 |
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. |