523
523
__slots__ = ("_event_system")
525
525
def __init__(self, *args, **kwargs):
526
self._event_system = None
526
527
Variable.__init__(self, *args, **kwargs)
527
self._event_system = None
528
if self.event is not None:
529
529
self.event.hook("start-tracking-changes", self._start_tracking)
530
self.event.hook("object-deleted", self._detect_deleted)
530
self.event.hook("object-deleted", self._detect_changes)
532
532
def _start_tracking(self, obj_info, event_system):
533
533
self._event_system = event_system
534
event_system.hook("flush", self._detect_changes)
535
534
self.event.hook("stop-tracking-changes", self._stop_tracking)
537
536
def _stop_tracking(self, obj_info, event_system):
538
537
event_system.unhook("flush", self._detect_changes)
539
538
self._event_system = None
541
def _detect_deleted(self, obj_info):
542
self._detect_changes(obj_info)
543
if self._event_system is not None:
544
self._stop_tracking(None, self._event_system)
546
540
def _detect_changes(self, obj_info):
547
541
if self.get_state() != self._checkpoint_state:
548
542
self.event.emit("changed", self, None, self._value, False)
544
def get(self, default=None, to_db=False):
545
if self._event_system is not None:
546
self._event_system.hook("flush", self._detect_changes)
547
return super(MutableValueVariable, self).get(default, to_db)
549
def set(self, value, from_db=False):
550
if self._event_system is not None:
551
if isinstance(value, LazyValue):
552
self._event_system.unhook("flush", self._detect_changes)
554
self._event_system.hook("flush", self._detect_changes)
555
super(MutableValueVariable, self).set(value, from_db)
551
558
class PickleVariable(MutableValueVariable):