Source code for traits.observation._dict_change_event
# (C) Copyright 2005-2022 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!
""" Event object for representing mutations to a dict.
"""
# DictChangeEvent is exposed in the public API
[docs]class DictChangeEvent:
""" Event object to represent mutations on a dict.
Note that the API is different from the ``TraitDictEvent`` emitted via the
"*name* _items" trait. In particular, the attribute ``changed`` is not
defined here.
The interface of this object is provisional as of version 6.1.
Attributes
----------
object : traits.trait_dict_object.TraitDict
The dict being mutated.
removed : dict
Keys and values for removed or updated items.
If keys are found in ``added`` as well, they refer to updated items
and the values are old.
added : dict
Keys and values for added or updated items.
If keys are found in ``removed`` as well, they refer to updated items
and the values are new.
"""
def __init__(self, *, object, removed, added):
self.object = object
self.removed = removed
self.added = added
def __repr__(self):
return (
f"{self.__class__.__name__}("
f"object={self.object!r}, "
f"removed={self.removed!r}, "
f"added={self.added!r})"
)
def dict_event_factory(trait_dict, removed, added, changed):
""" Adapt the call signature of TraitDict.notify to create an event.
Parameters
----------
trait_dict : traits.trait_dict_object.TraitDict
The dict being mutated.
removed : dict
Items removed from the dict
added : dict
Items added to the dict
changed : dict
Old values for items updated on the dict.
Returns
-------
DictChangeEvent
"""
# See enthought/traits#1031 for changing the signature of TraitDict.notify
# instead.
removed = removed.copy()
removed.update(changed)
for key in changed:
added[key] = trait_dict[key]
return DictChangeEvent(
object=trait_dict, added=added, removed=removed,
)