Skip to content

Commit 4bf7a05

Browse files
authored
Fix: python serialization edge case (#4074)
1 parent d3829c4 commit 4bf7a05

2 files changed

Lines changed: 8 additions & 6 deletions

File tree

sqlmesh/utils/metaprogramming.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,8 @@ def func_globals(func: t.Callable) -> t.Dict[str, t.Any]:
8989
for var in (
9090
arg_globals + list(_code_globals(code)) + decorator_vars(func, root_node=root_node)
9191
):
92-
ref = func.__globals__.get(var)
93-
if ref:
94-
variables[var] = ref
92+
if var in func.__globals__:
93+
variables[var] = func.__globals__[var]
9594

9695
if func.__closure__:
9796
for var, value in zip(code.co_freevars, func.__closure__):

tests/utils/test_metaprogramming.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def test_fun\(\):
6363
X = 1
6464
Y = 2
6565
Z = 3
66+
W = 0
6667

6768
my_lambda = lambda: print("z") # noqa: E731
6869

@@ -96,7 +97,7 @@ def other_func(a: int) -> int:
9697
pd.DataFrame([{"x": 1}])
9798
to_table("y")
9899
my_lambda() # type: ignore
99-
return X + a
100+
return X + a + W
100101

101102

102103
def noop_metadata() -> None:
@@ -165,6 +166,7 @@ def test_func_globals() -> None:
165166
}
166167
assert func_globals(other_func) == {
167168
"X": 1,
169+
"W": 0,
168170
"my_lambda": my_lambda,
169171
"pd": pd,
170172
"to_table": to_table,
@@ -212,7 +214,7 @@ def closure(z: int):
212214
pd.DataFrame([{'x': 1}])
213215
to_table('y')
214216
my_lambda()
215-
return X + a"""
217+
return X + a + W"""
216218
)
217219

218220

@@ -256,6 +258,7 @@ def closure(z: int):
256258
"X": Executable(payload="1", kind=ExecutableKind.VALUE),
257259
"Y": Executable(payload="2", kind=ExecutableKind.VALUE),
258260
"Z": Executable(payload="3", kind=ExecutableKind.VALUE),
261+
"W": Executable(payload="0", kind=ExecutableKind.VALUE),
259262
"_GeneratorContextManager": Executable(
260263
payload="from contextlib import _GeneratorContextManager", kind=ExecutableKind.IMPORT
261264
),
@@ -336,7 +339,7 @@ def test_context_manager():
336339
pd.DataFrame([{'x': 1}])
337340
to_table('y')
338341
my_lambda()
339-
return X + a""",
342+
return X + a + W""",
340343
),
341344
"test_context_manager": Executable(
342345
payload="""@contextmanager

0 commit comments

Comments
 (0)