From 795b259b95a4c11f92c6c8aaceb5003c869f1b1a Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Sat, 10 Jun 2023 16:49:00 -0500
Subject: vyos.utils: T5248: add util function: dict of list[str]|str -> list
 of paths

---
 python/vyos/utils/dict.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

(limited to 'python')

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.
-- 
cgit v1.2.3