Skip to content

Commit 6574e57

Browse files
committed
environment bugfix
1 parent f2fc813 commit 6574e57

4 files changed

Lines changed: 577 additions & 494 deletions

File tree

nbpipes/macro_tracer.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,24 @@ def __init__(self, *args, **kwargs) -> None:
111111
super().__init__(*args, **kwargs)
112112
self.arg_replacer = _ArgReplacer()
113113
self.lambda_cache: dict[tuple[int, int, TraceEvent], Any] = {}
114+
self._overridden_builtins: list[str] = []
114115
with self.register_additional_ast_bookkeeping():
115116
self.placeholder_inference_skip_nodes: set[int] = set()
116117
user_ns = get_user_ns()
117118
for macro_name, macro in self.macros.items():
118119
if hasattr(builtins, macro_name):
119120
continue
120121
setattr(builtins, macro_name, macro)
122+
self._overridden_builtins.append(macro_name)
121123
if user_ns is not None:
122-
user_ns[macro_name] = macro
124+
user_ns.setdefault(macro_name, macro)
125+
126+
def reset(self) -> None:
127+
for macro_name in self._overridden_builtins:
128+
if hasattr(builtins, macro_name):
129+
delattr(builtins, macro_name)
130+
self._overridden_builtins.clear()
131+
super().reset()
123132

124133
class _IdentitySubscript:
125134
def __getitem__(self, item):

nbpipes/pipeline_tracer.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ def __init__(self, *args, **kwargs) -> None:
234234
self.binop_arg_nodes_to_skip: set[int] = set()
235235
self.binop_nodes_to_eval: set[int] = set()
236236
self.lexical_chain_stack: pyc.TraceStack = self.make_stack()
237+
self._overridden_builtins: list[str] = []
237238
with self.register_additional_ast_bookkeeping():
238239
self.placeholder_arg_position_cache: dict[int, list[str]] = {}
239240
self.exc_to_propagate: Exception | None = None
@@ -245,9 +246,17 @@ def __init__(self, *args, **kwargs) -> None:
245246
extra_builtin_name = extra_builtin.__name__
246247
if hasattr(builtins, extra_builtin_name):
247248
continue
249+
self._overridden_builtins.append(extra_builtin_name)
248250
setattr(builtins, extra_builtin_name, extra_builtin)
249-
if user_ns is not None:
250-
user_ns[extra_builtin_name] = extra_builtin
251+
if user_ns is not None and extra_builtin_name:
252+
user_ns.setdefault(extra_builtin_name, extra_builtin)
253+
254+
def reset(self) -> None:
255+
for extra_builtin_name in self._overridden_builtins:
256+
if hasattr(builtins, extra_builtin_name):
257+
delattr(builtins, extra_builtin_name)
258+
self._overridden_builtins.clear()
259+
super().reset()
251260

252261
@pyc.register_handler(pyc.before_call, when=is_partial_call, reentrant=True)
253262
def curry_partial_calls(self, ret, node: ast.Call, *_, **__):
@@ -350,9 +359,8 @@ def should_propagate_handler_exception(
350359
def maybe_skip_binop_arg(self, ret: object, node_id: int, *_, **__):
351360
if node_id in self.binop_arg_nodes_to_skip:
352361
self.binop_arg_nodes_to_skip.remove(node_id)
353-
return _skip_binop_args_lambda
354-
else:
355-
return ret
362+
ret = _skip_binop_args_lambda
363+
return ret
356364

357365
def reorder_placeholder_names_for_prior_positions(
358366
self, node: ast.expr, placeholder_names: list[str]

nbpipes/utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
from typing import Any
44

55

6-
def get_user_ns() -> dict[str, Any] | None:
6+
# for unittest.mock patching
7+
def _get_user_ns_impl() -> dict[str, Any] | None:
78
try:
89
from IPython import get_ipython
910

@@ -13,3 +14,7 @@ def get_user_ns() -> dict[str, Any] | None:
1314
except ImportError:
1415
pass
1516
return None
17+
18+
19+
def get_user_ns() -> dict[str, Any] | None:
20+
return _get_user_ns_impl()

0 commit comments

Comments
 (0)