25 lines
507 B
Python
25 lines
507 B
Python
|
class SocketReader(object):
|
||
|
def __init__(self, fp):
|
||
|
self._fp = fp
|
||
|
self.handlers = []
|
||
|
|
||
|
def add_handler(self, handler):
|
||
|
self.handlers.append(handler)
|
||
|
|
||
|
def read(self, n=-1):
|
||
|
buf = self._fp.read(n)
|
||
|
if not buf:
|
||
|
return ''
|
||
|
for handler in self.handlers:
|
||
|
handler(buf)
|
||
|
return buf
|
||
|
|
||
|
def tell(self):
|
||
|
raise IOError('Stream is not seekable.')
|
||
|
|
||
|
|
||
|
def wrap_with_hash(in_fp, hash_obj):
|
||
|
wrapper = SocketReader(in_fp)
|
||
|
wrapper.add_handler(hash_obj.update)
|
||
|
return wrapper
|