From e0caead2cf79e7ba63fc92db2c98e2b11dc2b054 Mon Sep 17 00:00:00 2001 From: George Sittas Date: Wed, 2 Apr 2025 14:53:50 +0300 Subject: [PATCH] Fix: python serialization edge case --- sqlmesh/utils/metaprogramming.py | 5 ++--- tests/utils/test_metaprogramming.py | 9 ++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/sqlmesh/utils/metaprogramming.py b/sqlmesh/utils/metaprogramming.py index 27cf1899b8..eb70592342 100644 --- a/sqlmesh/utils/metaprogramming.py +++ b/sqlmesh/utils/metaprogramming.py @@ -89,9 +89,8 @@ def func_globals(func: t.Callable) -> t.Dict[str, t.Any]: for var in ( arg_globals + list(_code_globals(code)) + decorator_vars(func, root_node=root_node) ): - ref = func.__globals__.get(var) - if ref: - variables[var] = ref + if var in func.__globals__: + variables[var] = func.__globals__[var] if func.__closure__: for var, value in zip(code.co_freevars, func.__closure__): diff --git a/tests/utils/test_metaprogramming.py b/tests/utils/test_metaprogramming.py index 3bf8e009d4..1ebe405811 100644 --- a/tests/utils/test_metaprogramming.py +++ b/tests/utils/test_metaprogramming.py @@ -63,6 +63,7 @@ def test_fun\(\): X = 1 Y = 2 Z = 3 +W = 0 my_lambda = lambda: print("z") # noqa: E731 @@ -96,7 +97,7 @@ def other_func(a: int) -> int: pd.DataFrame([{"x": 1}]) to_table("y") my_lambda() # type: ignore - return X + a + return X + a + W def noop_metadata() -> None: @@ -165,6 +166,7 @@ def test_func_globals() -> None: } assert func_globals(other_func) == { "X": 1, + "W": 0, "my_lambda": my_lambda, "pd": pd, "to_table": to_table, @@ -212,7 +214,7 @@ def closure(z: int): pd.DataFrame([{'x': 1}]) to_table('y') my_lambda() - return X + a""" + return X + a + W""" ) @@ -256,6 +258,7 @@ def closure(z: int): "X": Executable(payload="1", kind=ExecutableKind.VALUE), "Y": Executable(payload="2", kind=ExecutableKind.VALUE), "Z": Executable(payload="3", kind=ExecutableKind.VALUE), + "W": Executable(payload="0", kind=ExecutableKind.VALUE), "_GeneratorContextManager": Executable( payload="from contextlib import _GeneratorContextManager", kind=ExecutableKind.IMPORT ), @@ -336,7 +339,7 @@ def test_context_manager(): pd.DataFrame([{'x': 1}]) to_table('y') my_lambda() - return X + a""", + return X + a + W""", ), "test_context_manager": Executable( payload="""@contextmanager