I recently had to completely disable trait notification during instantiation of a HasTraits child class. Holding with hold_trait_notifications wasn't sufficient; the notifications release when exiting the context manager was modifying attributes I didn't want to change.
I used a snippet found in the source code to implement the following context manager.
import contextlib
from traitlets import HasTraits, Bunch
@contextlib.contextmanager
def disable_trait_notifications(self):
"""Temporatilly disable trait notifications."""
def ignore(change: Bunch) -> None:
pass
original_notify_change = self.notify_change
self.notify_change = ignore
try:
yield
finally:
self.notify_change = original_notify_change
# Monkey patch HasTraits
HasTraits.disable_trait_notifications = disable_trait_notifications
Wondering if it would make sense to have this as part of the API. Hope I'm not suggesting an anti pattern 😅
I recently had to completely disable trait notification during instantiation of a
HasTraitschild class. Holding withhold_trait_notificationswasn't sufficient; the notifications release when exiting the context manager was modifying attributes I didn't want to change.I used a snippet found in the source code to implement the following context manager.
Wondering if it would make sense to have this as part of the API. Hope I'm not suggesting an anti pattern 😅