From 03fdc2302531efc4d99394739c5c11b8792ef46f Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Wed, 19 Jun 2024 20:31:06 -0500 Subject: migration: T6447: add traceback on error (cherry picked from commit 1c59315e9d14a4160b6e744ded08312aa8c70d11) --- python/vyos/compose_config.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'python/vyos/compose_config.py') diff --git a/python/vyos/compose_config.py b/python/vyos/compose_config.py index efa28babe..208c89dad 100644 --- a/python/vyos/compose_config.py +++ b/python/vyos/compose_config.py @@ -17,6 +17,7 @@ config. """ +import traceback from pathlib import Path from typing import TypeAlias, Union, Callable @@ -70,7 +71,9 @@ class ComposeConfig: try: self.apply_func(func) except ComposeConfigError as e: - raise ComposeConfigError(f'Error in {func_file}: {e}') from e + msg = str(e) + tb = f'{traceback.format_exc()}' + raise ComposeConfigError(f'Error in {func_file}: {msg}\n{tb}') from e def to_string(self, with_version=False) -> str: """Return the rendered config tree. -- cgit v1.2.3 From 98314d5c7513b97495e9199baa0be39b6f43f17f Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Wed, 19 Jun 2024 20:33:08 -0500 Subject: migration: T6447: fix missing check before reset to checkpoint (cherry picked from commit 734db72b916192a3988f3b1e9f4bcc3be159cfe5) --- python/vyos/compose_config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'python/vyos/compose_config.py') diff --git a/python/vyos/compose_config.py b/python/vyos/compose_config.py index 208c89dad..b1c277bce 100644 --- a/python/vyos/compose_config.py +++ b/python/vyos/compose_config.py @@ -55,7 +55,8 @@ class ComposeConfig: try: func(self.config_tree) except Exception as e: - self.config_tree = self.checkpoint + if self.checkpoint_file is not None: + self.config_tree = self.checkpoint raise ComposeConfigError(e) from e def apply_file(self, func_file: str, func_name: str): -- cgit v1.2.3 From a79237bb168e611d2965031479d0786b8380e438 Mon Sep 17 00:00:00 2001 From: John Estabrook Date: Wed, 19 Jun 2024 20:37:23 -0500 Subject: migration: T6007: use load_as_module_source for files without extension (cherry picked from commit 8a57e7b14c818c93655819757d99b69747c9b2ca) --- python/vyos/compose_config.py | 4 ++-- python/vyos/utils/system.py | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'python/vyos/compose_config.py') diff --git a/python/vyos/compose_config.py b/python/vyos/compose_config.py index b1c277bce..79a8718c5 100644 --- a/python/vyos/compose_config.py +++ b/python/vyos/compose_config.py @@ -23,7 +23,7 @@ from typing import TypeAlias, Union, Callable from vyos.configtree import ConfigTree from vyos.configtree import deep_copy as ct_deep_copy -from vyos.utils.system import load_as_module +from vyos.utils.system import load_as_module_source ConfigObj: TypeAlias = Union[str, ConfigTree] @@ -64,7 +64,7 @@ class ComposeConfig: """ try: mod_name = Path(func_file).stem.replace('-', '_') - mod = load_as_module(mod_name, func_file) + mod = load_as_module_source(mod_name, func_file) func = getattr(mod, func_name) except Exception as e: raise ComposeConfigError(f'Error with {func_file}: {e}') from e diff --git a/python/vyos/utils/system.py b/python/vyos/utils/system.py index 55813a5f7..cfd5b142c 100644 --- a/python/vyos/utils/system.py +++ b/python/vyos/utils/system.py @@ -98,3 +98,15 @@ def load_as_module(name: str, path: str): mod = importlib.util.module_from_spec(spec) spec.loader.exec_module(mod) return mod + +def load_as_module_source(name: str, path: str): + """ Necessary modification of load_as_module for files without *.py + extension """ + import importlib.util + from importlib.machinery import SourceFileLoader + + loader = SourceFileLoader(name, path) + spec = importlib.util.spec_from_loader(name, loader) + mod = importlib.util.module_from_spec(spec) + spec.loader.exec_module(mod) + return mod -- cgit v1.2.3