##// END OF EJS Templates
Merge pull request #8253 from SylvainCorlay/context_manager...
Min RK -
r21160:de3a01a4 merge
parent child Browse files
Show More
@@ -1366,7 +1366,7 def test_hold_trait_notifications():
1366 1366 nt.assert_equal(t.a, 4)
1367 1367 nt.assert_equal(changes, [])
1368 1368
1369 nt.assert_equal(changes, [(3,4)])
1369 nt.assert_equal(changes, [(0, 4)])
1370 1370 # Test roll-back
1371 1371 try:
1372 1372 with t.hold_trait_notifications():
@@ -597,24 +597,23 class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)):
597 597 yield
598 598 return
599 599 else:
600 self._cross_validation_lock = True
601 600 cache = {}
602 notifications = {}
603 601 _notify_trait = self._notify_trait
604 602
605 def cache_values(*a):
606 cache[a[0]] = a
607
608 def hold_notifications(*a):
609 notifications[a[0]] = a
603 def merge(previous, current):
604 """merges notifications of the form (name, old, value)"""
605 if previous is None:
606 return current
607 else:
608 return (current[0], previous[1], current[2])
610 609
611 self._notify_trait = cache_values
610 def hold(*a):
611 cache[a[0]] = merge(cache.get(a[0]), a)
612 612
613 613 try:
614 self._notify_trait = hold
615 self._cross_validation_lock = True
614 616 yield
615 finally:
616 try:
617 self._notify_trait = hold_notifications
618 617 for name in cache:
619 618 if hasattr(self, '_%s_validate' % name):
620 619 cross_validate = getattr(self, '_%s_validate' % name)
@@ -627,7 +626,6 class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)):
627 626 else:
628 627 delattr(self, name)
629 628 cache = {}
630 notifications = {}
631 629 raise e
632 630 finally:
633 631 self._notify_trait = _notify_trait
@@ -638,8 +636,9 class HasTraits(py3compat.with_metaclass(MetaHasTraits, object)):
638 636 # remove the redundant value from __dict__
639 637 # (only used to preserve pickleability on Python < 3.4)
640 638 self.__dict__.pop('_notify_trait', None)
639
641 640 # trigger delayed notifications
642 for v in dict(cache, **notifications).values():
641 for v in cache.values():
643 642 self._notify_trait(*v)
644 643
645 644 def _notify_trait(self, name, old_value, new_value):
General Comments 0
You need to be logged in to leave comments. Login now