From a90f537a5f88664771ec860cb609de8f5b830735 Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Tue, 29 Nov 2022 11:40:12 -0600
Subject: conf-mode: T4820: add full type hints

---
 python/vyos/configdep.py | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

(limited to 'python')

diff --git a/python/vyos/configdep.py b/python/vyos/configdep.py
index ca05cb092..b2bfbbd24 100644
--- a/python/vyos/configdep.py
+++ b/python/vyos/configdep.py
@@ -15,6 +15,7 @@
 
 import os
 import json
+import typing
 from inspect import stack
 
 from vyos.util import load_as_module
@@ -22,7 +23,12 @@ from vyos.defaults import directories
 from vyos.configsource import VyOSError
 from vyos import ConfigError
 
-dependent_func = {}
+# https://peps.python.org/pep-0484/#forward-references
+# for type 'Config'
+if typing.TYPE_CHECKING:
+    from vyos.config import Config
+
+dependent_func: dict[str, list[typing.Callable]] = {}
 
 def canon_name(name: str) -> str:
     return os.path.splitext(name)[0].replace('-', '_')
@@ -34,14 +40,14 @@ def canon_name_of_path(path: str) -> str:
 def caller_name() -> str:
     return stack()[-1].filename
 
-def read_dependency_dict():
+def read_dependency_dict() -> dict:
     path = os.path.join(directories['data'],
                         'config-mode-dependencies.json')
     with open(path) as f:
         d = json.load(f)
     return d
 
-def get_dependency_dict(config):
+def get_dependency_dict(config: 'Config') -> dict:
     if hasattr(config, 'cached_dependency_dict'):
         d = getattr(config, 'cached_dependency_dict')
     else:
@@ -49,7 +55,7 @@ def get_dependency_dict(config):
         setattr(config, 'cached_dependency_dict', d)
     return d
 
-def run_config_mode_script(script: str, config):
+def run_config_mode_script(script: str, config: 'Config'):
     path = os.path.join(directories['conf_mode'], script)
     name = canon_name(script)
     mod = load_as_module(name, path)
@@ -63,13 +69,13 @@ def run_config_mode_script(script: str, config):
     except (VyOSError, ConfigError) as e:
         raise ConfigError(repr(e))
 
-def def_closure(target: str, config):
+def def_closure(target: str, config: 'Config') -> typing.Callable:
     script = target + '.py'
     def func_impl():
         run_config_mode_script(script, config)
     return func_impl
 
-def set_dependents(case, config):
+def set_dependents(case: str, config: 'Config'):
     d = get_dependency_dict(config)
     k = canon_name_of_path(caller_name())
     l = dependent_func.setdefault(k, [])
-- 
cgit v1.2.3


From 40bd9294ddcdbba7e3b829ffe8f5178bba2776ae Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Tue, 29 Nov 2022 11:44:29 -0600
Subject: conf-mode: T4820: add support for tagnode argument

---
 python/vyos/configdep.py | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'python')

diff --git a/python/vyos/configdep.py b/python/vyos/configdep.py
index b2bfbbd24..d4b2cc78f 100644
--- a/python/vyos/configdep.py
+++ b/python/vyos/configdep.py
@@ -69,18 +69,22 @@ def run_config_mode_script(script: str, config: 'Config'):
     except (VyOSError, ConfigError) as e:
         raise ConfigError(repr(e))
 
-def def_closure(target: str, config: 'Config') -> typing.Callable:
+def def_closure(target: str, config: 'Config',
+                tagnode: typing.Optional[str] = None) -> typing.Callable:
     script = target + '.py'
     def func_impl():
+        if tagnode:
+            os.environ['VYOS_TAGNODE_VALUE'] = tagnode
         run_config_mode_script(script, config)
     return func_impl
 
-def set_dependents(case: str, config: 'Config'):
+def set_dependents(case: str, config: 'Config',
+                   tagnode: typing.Optional[str] = None):
     d = get_dependency_dict(config)
     k = canon_name_of_path(caller_name())
     l = dependent_func.setdefault(k, [])
     for target in d[k][case]:
-        func = def_closure(target, config)
+        func = def_closure(target, config, tagnode)
         l.append(func)
 
 def call_dependents():
-- 
cgit v1.2.3