From 1fc60e55d8064a5fd75de9880bf87c9fb93283f9 Mon Sep 17 00:00:00 2001 From: Antonio Cordero Balcazar Date: Mon, 13 Apr 2026 23:21:08 +0200 Subject: [PATCH] * Added `formatted` parameter to `log` function for conditional message formatting. * Added a new test for comparing two variables with the `lt` command. --- ppp_common.py | 1 + ppp_logging.py | 4 ++-- ppp_tree.py | 8 ++++---- tests/tests_variables.py | 9 +++++++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/ppp_common.py b/ppp_common.py index 07c0942..b1bcb47 100644 --- a/ppp_common.py +++ b/ppp_common.py @@ -74,6 +74,7 @@ def parse_prompt( re.sub(r"\n$", "", (parsed_prompt.pretty() if isinstance(parsed_prompt, lark.Tree) else parsed_prompt)), " ", ), + formatted=False, ) return parsed_prompt diff --git a/ppp_logging.py b/ppp_logging.py index 130d857..8b85d8a 100644 --- a/ppp_logging.py +++ b/ppp_logging.py @@ -98,7 +98,7 @@ class PromptPostProcessorLogCustomAdapter(logging.LoggerAdapter): """ return f"[PPP] {msg}", kwargs -def log(logger: logging.Logger, debug_level: DEBUG_LEVEL, kind: int, message: str, min_level: DEBUG_LEVEL | None = None): +def log(logger: logging.Logger, debug_level: DEBUG_LEVEL, kind: int, message: str, min_level: DEBUG_LEVEL | None = None, formatted: bool = True): if logger: if min_level is None: if kind == logging.DEBUG: @@ -110,4 +110,4 @@ def log(logger: logging.Logger, debug_level: DEBUG_LEVEL, kind: int, message: st i_debug_level = list(DEBUG_LEVEL).index(debug_level) i_min_level = list(DEBUG_LEVEL).index(min_level) if i_debug_level >= i_min_level: - logger.log(kind, format_output(message)) + logger.log(kind, format_output(message) if formatted else message) diff --git a/ppp_tree.py b/ppp_tree.py index f6f097d..5f8ca2e 100644 --- a/ppp_tree.py +++ b/ppp_tree.py @@ -221,12 +221,12 @@ class TreeProcessor(lark.visitors.Interpreter): val = self.__state.system_variables.get(c, None) if val is None: val = "" - self.warn_or_stop(f"Unknown system variable {c}") + self.warn_or_stop(f"Unknown system variable '{escape_single_quotes(c)}'") else: val = self.__get_user_variable_value(c) if val is None: val = "" - self.warn_or_stop(f"Unknown user variable {c}") + self.warn_or_stop(f"Unknown user variable '{escape_single_quotes(c)}'") return val.lower() if isinstance(val, str) else val def __eval_basiccondition(self, cond_var: str, cond_comp: str, cond_value: str | list[str]) -> bool: @@ -249,12 +249,12 @@ class TreeProcessor(lark.visitors.Interpreter): var_value = self.__state.system_variables.get(cond_var, None) if var_value is None: var_value = "" - self.warn_or_stop(f"Unknown system variable {cond_var}") + self.warn_or_stop(f"Unknown system variable '{escape_single_quotes(cond_var)}'") else: # user variable var_value = self.__get_user_variable_value(cond_var) if var_value is None: var_value = "" - self.warn_or_stop(f"Unknown user variable {cond_var}") + self.warn_or_stop(f"Unknown user variable '{escape_single_quotes(cond_var)}'") if isinstance(var_value, str): var_value = var_value.lower() if isinstance(cond_value, list): diff --git a/tests/tests_variables.py b/tests/tests_variables.py index d7e6ada..8cbb765 100644 --- a/tests/tests_variables.py +++ b/tests/tests_variables.py @@ -142,6 +142,15 @@ class TestVariables(TestPromptPostProcessorBase): PromptPair("YES", ""), ) + def test_cmd_if_var_vs_var_lt(self): # var lt var: var1 less than var2 + self.process( + PromptPair( + "12YESNO", + "", + ), + PromptPair("YES", ""), + ) + # NaN/undefined variable integer comparison tests def test_cmd_if_undefined_var_int_compare_warn(self): # undefined var integer compare with on_warning=warn