@@ -103,13 +103,14 @@ def closed(self):
103
103
#} END interface
104
104
105
105
106
- class CallbackChannelWriter ( ChannelWriter ):
106
+ class CallbackWriterMixin ( object ):
107
107
"""The write end of a channel which allows you to setup a callback to be
108
108
called after an item was written to the channel"""
109
- __slots__ = ('_pre_cb' )
109
+ # slots don't work with mixin's :(
110
+ # __slots__ = ('_pre_cb')
110
111
111
- def __init__ (self , channel ):
112
- super (CallbackChannelWriter , self ).__init__ (channel )
112
+ def __init__ (self , * args ):
113
+ super (CallbackWriterMixin , self ).__init__ (* args )
113
114
self ._pre_cb = None
114
115
115
116
def set_pre_cb (self , fun = lambda item : item ):
@@ -126,7 +127,12 @@ def set_pre_cb(self, fun = lambda item: item):
126
127
def write (self , item , block = True , timeout = None ):
127
128
if self ._pre_cb :
128
129
item = self ._pre_cb (item )
129
- super (CallbackChannelWriter , self ).write (item , block , timeout )
130
+ super (CallbackWriterMixin , self ).write (item , block , timeout )
131
+
132
+
133
+ class CallbackChannelWriter (CallbackWriterMixin , ChannelWriter ):
134
+ """Implements a channel writer with callback functionality"""
135
+ pass
130
136
131
137
132
138
class Reader (object ):
@@ -238,12 +244,14 @@ def read(self, count=0, block=True, timeout=None):
238
244
239
245
#} END interface
240
246
241
- class CallbackChannelReader (ChannelReader ):
247
+
248
+ class CallbackReaderMixin (object ):
242
249
"""A channel which sends a callback before items are read from the channel"""
243
- __slots__ = "_pre_cb"
250
+ # unfortunately, slots can only use direct inheritance, have to turn it off :(
251
+ # __slots__ = "_pre_cb"
244
252
245
- def __init__ (self , channel ):
246
- super (CallbackChannelReader , self ).__init__ (channel )
253
+ def __init__ (self , * args ):
254
+ super (CallbackReaderMixin , self ).__init__ (* args )
247
255
self ._pre_cb = None
248
256
249
257
def set_pre_cb (self , fun = lambda count : None ):
@@ -260,7 +268,12 @@ def set_pre_cb(self, fun = lambda count: None):
260
268
def read (self , count = 0 , block = True , timeout = None ):
261
269
if self ._pre_cb :
262
270
self ._pre_cb (count )
263
- return super (CallbackChannelReader , self ).read (count , block , timeout )
271
+ return super (CallbackReaderMixin , self ).read (count , block , timeout )
272
+
273
+
274
+ class CallbackChannelReader (CallbackReaderMixin , ChannelReader ):
275
+ """Implements a channel reader with callback functionality"""
276
+ pass
264
277
265
278
266
279
class IteratorReader (Reader ):
0 commit comments