[ create a new paste ] login | about

Link: http://codepad.org/pNMhnCXv    [ raw code | output | fork ]

Python, pasted on Jan 25:
from zope.interface import Interface, implements


class ISource(Interface):
    def addReceiver(self, receiver):
        pass


class IDataReceiver(Interface):
    def dataReceived(self, a, b):
        pass


class IErrorReceiver(Interface):
    def errorReceived(self, err):
        pass



class Source(object):
    
    implements(ISource)
    
    def __init__(self):
        self.receivers = []
    
    def addReceiver(self, r):
        self.receivers.append(r)
    
    def receiversFor(self, interface):
        return [x for x in self.receivers if interface.providedBy(x)]
    
    def emit(self, interface, function, *data):
        for r in self.receiversFor(interface):
            getattr(r, function)(*data)


class DataReceiver(object):
    
    implements(IDataReceiver)
    
    def dataReceived(self, a, b):
        print 'data: %r %r' % (a, b)


class ErrorReceiver(object):
    
    implements(IErrorReceiver)
    
    def errorReceived(self, err):
        print 'error: %r' % (err,)


s = Source()
s.addReceiver(DataReceiver())
s.addReceiver(DataReceiver())
s.addReceiver(ErrorReceiver())
s.emit(IDataReceiver, 'dataReceived', 'a', 'b')
s.emit(IErrorReceiver, 'errorReceived', 'something bad')


Output:
1
2
3
data: 'a' 'b'
data: 'a' 'b'
error: 'something bad'


Create a new paste based on this one


Comments: