Skip to content

Should there be a way to disable trait notifications? #907

@loicdtx

Description

@loicdtx

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 😅

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions