From a90f537a5f88664771ec860cb609de8f5b830735 Mon Sep 17 00:00:00 2001 From: John Estabrook 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(-) 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