Example #1
0
def on_change(instance, traits, function, weak=None):
    '''
    Register a listener to an object.
    
    :param traits: either a `string`, `traity.events.listenable`, or a tuple of strings and listenables.  
    :param function: function to call when event with target `target` is triggered. 
    :param instance: The object to listen to events for.
    '''
    target = concat_targets(traits, 'changed')
    events(instance).listen(target, function, weak=weak)
Example #2
0
def on_change(instance, traits, function, weak=None):
    """
    Register a listener to an object.
    
    :param traits: either a `string`, `traity.events.listenable`, or a tuple of strings and listenables.  
    :param function: function to call when event with target `target` is triggered. 
    :param instance: The object to listen to events for.
    """
    target = concat_targets(traits, "changed")
    events(instance).listen(target, function, weak=weak)
Example #3
0
    def test_event_context(self):

        obj = AnyObject()
        init_events(obj)
        obj.id1 = 0

        def seen3(event):
            obj.id1 += 1

        events(obj).on('any_target', seen3)

        events(obj).etrigger('any_target',
                             dispatcher=lambda event, listener: None)

        self.assertEqual(obj.id1, 0)

        events(obj).etrigger(
            'any_target', dispatcher=lambda event, listener: listener(event))
        self.assertEqual(obj.id1, 1)

        with events(obj).quiet():
            events(obj).etrigger(
                'any_target',
                dispatcher=lambda event, listener: listener(event))
            self.assertEqual(
                obj.id1, 2)  #event dispatcher has higher priority than 'quiet'
Example #4
0
    def test_static_listen(self):
        @init_properties
        class A(object):
            @on_trait_change('x')
            def x_changed(self, evetn):
                self.y += 1

        a = A()
        init_events(a)
        a.y = 0
        a.x_changed(None)
        self.assertEqual(a.y, 1)

        events(a).etrigger(('x', 'changed'))

        self.assertEqual(a.y, 2)
Example #5
0
    def test_shortform(self):
        global id1, id2
        id1, id2 = 0, 0

        obj = AnyObject()
        init_events(obj)

        def seen3(event):
            global id1
            id1 = True

        #Add a listener to target 'any_target'
        events(obj).on('any_target', seen3)

        #Add a trigger an 'any_target' event
        events(obj).etrigger('any_target')

        self.assertTrue(id1)
Example #6
0
 def test_static_listen(self):
     
     @init_properties
     class A(object):
         
         @on_trait_change('x')
         def x_changed(self, evetn):
             self.y += 1
         
     a = A()
     init_events(a)
     a.y = 0
     a.x_changed(None)
     self.assertEqual(a.y, 1)
     
     events(a).etrigger(('x', 'changed'))
     
     self.assertEqual(a.y, 2)
Example #7
0
 def test_shortform(self):
     global id1, id2
     id1, id2 = 0, 0
     
     obj = AnyObject()
     init_events(obj)
     
     def seen3(event):
         global id1
         id1 = True
         
     #Add a listener to target 'any_target'
     events(obj).on('any_target', seen3)
     
     #Add a trigger an 'any_target' event
     events(obj).etrigger('any_target')
     
     self.assertTrue(id1)
Example #8
0
    def test_event_context(self):
        
        obj = AnyObject()
        init_events(obj)
        obj.id1 = 0
        
        def seen3(event):
            obj.id1 += 1
            
        events(obj).on('any_target', seen3)
        
        events(obj).etrigger('any_target', dispatcher=lambda event, listener:None)
        
        self.assertEqual(obj.id1, 0)

        events(obj).etrigger('any_target', dispatcher=lambda event, listener: listener(event))
        self.assertEqual(obj.id1, 1)

        with events(obj).quiet(): 
            events(obj).etrigger('any_target', dispatcher=lambda event, listener: listener(event))
            self.assertEqual(obj.id1, 2) #event dispatcher has higher priority than 'quiet'
Example #9
0
    def test_chain(self):
        global id1, id2

        id1, id2 = 0, 0

        obj1 = AnyObject()
        obj2 = AnyObject()
        obj3 = AnyObject()
        obj4 = AnyObject()

        init_events(
            obj1,
            obj2,
            obj3,
            obj4,
        )

        connect(obj1, obj2, 'c12')
        connect(obj2, obj3, 'c23')
        connect(obj2, obj4, 'c24')

        def seen3(event):
            global id1
            id1 = True
            self.assertEqual(event.target, ('c12', 'c23', 'x'))

        events(obj1).listen(('c12', 'c23', 'x'), seen3)

        events(obj3).etrigger('x')
        self.assertTrue(id1)

        disconnect(obj1, obj2, 'c12')
        id1 = False
        events(obj3).etrigger('x')
        self.assertFalse(id1)

        connect(obj1, obj2, 'c12')

        del obj2  #Brake Link
        gc.collect()
        events(obj3).etrigger('x')
        self.assertFalse(id1)
Example #10
0
    def test_chain(self):
        global id1, id2
        
        id1, id2 = 0, 0
        
        obj1 = AnyObject()
        obj2 = AnyObject()
        obj3 = AnyObject()
        obj4 = AnyObject()
        
        init_events(obj1, obj2, obj3, obj4,)
        
        connect(obj1, obj2, 'c12')
        connect(obj2, obj3, 'c23')
        connect(obj2, obj4, 'c24')
        
        def seen3(event):
            global id1
            id1 = True
            self.assertEqual(event.target, ('c12', 'c23', 'x'))

        events(obj1).listen(('c12', 'c23', 'x'), seen3)
        
        events(obj3).etrigger('x')
        self.assertTrue(id1)
        
        disconnect(obj1, obj2, 'c12')
        id1 = False
        events(obj3).etrigger('x')
        self.assertFalse(id1)
        
        connect(obj1, obj2, 'c12')
        
        del obj2 #Brake Link 
        gc.collect()
        events(obj3).etrigger('x')
        self.assertFalse(id1)
Example #11
0
    def test_refcount(self):
        obj = AnyObject()
        init_events(obj)
        
        class F(object):
            def m(self, event):
                return
            
        f = F()
        
        initial = sys.getrefcount(f) 
        events(obj).listen('a', f.m)
        new = sys.getrefcount(f)
        self.assertEqual(initial, new) 
        events(obj).unlisten('a', f.m)

        events(obj).listen('a', f.m, weak=False)
        new2 = sys.getrefcount(f)
        self.assertGreater(new2, initial) 
        
        events(obj).unlisten('a', f.m)
        gc.collect()
        new = sys.getrefcount(f)
        self.assertEqual(initial, new) 
Example #12
0
    def test_refcount(self):
        obj = AnyObject()
        init_events(obj)

        class F(object):
            def m(self, event):
                return

        f = F()

        initial = sys.getrefcount(f)
        events(obj).listen('a', f.m)
        new = sys.getrefcount(f)
        self.assertEqual(initial, new)
        events(obj).unlisten('a', f.m)

        events(obj).listen('a', f.m, weak=False)
        new2 = sys.getrefcount(f)
        self.assertGreater(new2, initial)

        events(obj).unlisten('a', f.m)
        gc.collect()
        new = sys.getrefcount(f)
        self.assertEqual(initial, new)
Example #13
0
 def test_refcount2(self):
     obj = AnyObject()
     init_events(obj)
     
     obj.x_called = 0
     def x(event):
         obj.x_called += 1
         
     self.assertEqual(obj.x_called, 0)
     events(obj).listen(('a',), x, weak=True)
     
     events(obj).etrigger('a')
     self.assertEqual(obj.x_called, 1)
     del x
     events(obj).etrigger('a')
     
     self.assertEqual(obj.x_called, 1)
Example #14
0
    def test_refcount2(self):
        obj = AnyObject()
        init_events(obj)

        obj.x_called = 0

        def x(event):
            obj.x_called += 1

        self.assertEqual(obj.x_called, 0)
        events(obj).listen(('a', ), x, weak=True)

        events(obj).etrigger('a')
        self.assertEqual(obj.x_called, 1)
        del x
        events(obj).etrigger('a')

        self.assertEqual(obj.x_called, 1)
Example #15
0
    def test_global_context(self):

        obj = AnyObject()
        obj2 = AnyObject()
        init_events(obj, obj2)
        obj.id1 = 0
        obj2.id1 = 0

        def seen4(event):
            obj2.id1 += 1

        def seen3(event):
            obj.id1 += 1

        events(obj).on('any_target', seen3)
        events(obj).etrigger('any_target')
        self.assertEqual(obj.id1, 1)
        obj.id1 = 0

        events(obj2).on('any_target', seen4)
        events(obj2).etrigger('any_target')
        self.assertEqual(obj2.id1, 1)
        obj2.id1 = 0

        self.assertFalse(obj.id1)

        with quiet():
            events(obj).etrigger('any_target')
            events(obj2).etrigger('any_target')
            self.assertFalse(obj.id1)
            self.assertFalse(obj2.id1)

        obj.id1 = 0
        obj2.id1 = 0

        with queue() as tocall:
            with events(obj2).quiet():
                events(obj).etrigger('any_target')
                events(obj).etrigger('any_target')
                events(obj2).etrigger('any_target')
                events(obj2).etrigger('any_target')
            self.assertFalse(obj.id1)
            self.assertFalse(obj2.id1)

        self.assertEqual(len(tocall), 2)

        for event, listener in tocall:
            event.dispatch(listener)
        self.assertEqual(obj.id1, 2)

        obj.id1 = 0

        with unique():
            events(obj).etrigger('any_target')
            events(obj).etrigger('any_target')
            self.assertFalse(obj.id1)

        self.assertEqual(obj.id1, 1)
Example #16
0
    def test_global_context(self):
        
        obj = AnyObject()
        obj2 = AnyObject()
        init_events(obj, obj2)
        obj.id1 = 0
        obj2.id1 = 0
        
        def seen4(event):
            obj2.id1 += 1
            
        def seen3(event):
            obj.id1 += 1
            
        events(obj).on('any_target', seen3)
        events(obj).etrigger('any_target')
        self.assertEqual(obj.id1, 1)
        obj.id1 = 0
        
        events(obj2).on('any_target', seen4)
        events(obj2).etrigger('any_target')
        self.assertEqual(obj2.id1, 1)
        obj2.id1 = 0

        self.assertFalse(obj.id1)
        
        with quiet():
            events(obj).etrigger('any_target')
            events(obj2).etrigger('any_target')
            self.assertFalse(obj.id1)
            self.assertFalse(obj2.id1)

        obj.id1 = 0
        obj2.id1 = 0
        
        with queue() as tocall:
            with events(obj2).quiet():
                events(obj).etrigger('any_target')
                events(obj).etrigger('any_target')
                events(obj2).etrigger('any_target')
                events(obj2).etrigger('any_target')
            self.assertFalse(obj.id1)
            self.assertFalse(obj2.id1)
        
        self.assertEqual(len(tocall), 2)
        
        for event, listener in tocall:
            event.dispatch(listener)
        self.assertEqual(obj.id1, 2)
        
        obj.id1 = 0
        
        with unique():
            events(obj).etrigger('any_target')
            events(obj).etrigger('any_target')
            self.assertFalse(obj.id1)

        self.assertEqual(obj.id1, 1)
Example #17
0
    def test_add_global_litener(self):
        global id1, id2
        id1, id2 = 0, 0

        obj1 = AnyObject()
        obj2 = AnyObject()
        init_events(obj1, obj2)
        obj1.seen = 0
        obj2.seen = 0

        def pritn(event):
            event.obj.seen += 1

        with global_listener(pritn):
            events(obj1).etrigger('x')
            self.assertEqual(obj1.seen, 1)
            events(obj2).etrigger('y')
            self.assertEqual(obj2.seen, 1)

        events(obj1).etrigger('x')
        self.assertEqual(obj1.seen, 1)
        events(obj2).etrigger('y')
        self.assertEqual(obj2.seen, 1)

        with global_listener(pritn, ('x', )):
            events(obj1).etrigger('x')
            self.assertEqual(obj1.seen, 2)
            events(obj2).etrigger('y')
            self.assertEqual(obj2.seen, 1)
Example #18
0
    def test_simple(self):
        global id1, id2
        id1, id2 = 0, 0
        
        obj = AnyObject()
        refcnt_before_init_events = sys.getrefcount(obj)
        init_events(obj)
        refcnt_after_init_events = sys.getrefcount(obj)
        self.assertEqual(refcnt_before_init_events, refcnt_after_init_events)
            
        events(obj).listen(('id1',), seen1)
        events(obj).listen(('id2',), seen2)

        events(obj).etrigger('x', id1=1, id2=2)
        self.assertEqual(id1, 0)
        self.assertEqual(id2, 0)
        
        events(obj).etrigger('id1', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 0)
        
        events(obj).etrigger('id2', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)
        
        events(obj).unlisten(('id1',), seen1)
        events(obj).etrigger('id1', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)

        events(obj).unlisten(('id2',))
        events(obj).etrigger('id2', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)
Example #19
0
    def test_simple(self):
        global id1, id2
        id1, id2 = 0, 0

        obj = AnyObject()
        refcnt_before_init_events = sys.getrefcount(obj)
        init_events(obj)
        refcnt_after_init_events = sys.getrefcount(obj)
        self.assertEqual(refcnt_before_init_events, refcnt_after_init_events)

        events(obj).listen(('id1', ), seen1)
        events(obj).listen(('id2', ), seen2)

        events(obj).etrigger('x', id1=1, id2=2)
        self.assertEqual(id1, 0)
        self.assertEqual(id2, 0)

        events(obj).etrigger('id1', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 0)

        events(obj).etrigger('id2', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)

        events(obj).unlisten(('id1', ), seen1)
        events(obj).etrigger('id1', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)

        events(obj).unlisten(('id2', ))
        events(obj).etrigger('id2', id1=1, id2=2)
        self.assertEqual(id1, 1)
        self.assertEqual(id2, 2)
Example #20
0
    def test_add_global_litener(self):
        global id1, id2
        id1, id2 = 0, 0

        obj1 = AnyObject()
        obj2 = AnyObject()
        init_events(obj1, obj2)
        obj1.seen = 0
        obj2.seen = 0
            
        def pritn(event):
            event.obj.seen += 1
        
        with global_listener(pritn):
            events(obj1).etrigger('x')
            self.assertEqual(obj1.seen, 1)
            events(obj2).etrigger('y')
            self.assertEqual(obj2.seen, 1)
            
        events(obj1).etrigger('x')
        self.assertEqual(obj1.seen, 1)
        events(obj2).etrigger('y')
        self.assertEqual(obj2.seen, 1)
        
        with global_listener(pritn, ('x',)):
            events(obj1).etrigger('x')
            self.assertEqual(obj1.seen, 2)
            events(obj2).etrigger('y')
            self.assertEqual(obj2.seen, 1)