39 lines
854 B
Python
39 lines
854 B
Python
|
|
class BaseStream:
|
||
|
|
def __init__(self, size=1024):
|
||
|
|
self.size = size
|
||
|
|
|
||
|
|
def read(self, size=1024):
|
||
|
|
raise NotImplementedError('read method must be overridden')
|
||
|
|
|
||
|
|
def __len__(self):
|
||
|
|
raise NotImplementedError('__len__ method must be overridden')
|
||
|
|
|
||
|
|
def __next__(self):
|
||
|
|
raise NotImplementedError('__next__ method must be overridden')
|
||
|
|
|
||
|
|
def __iter__(self):
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
class _ReadableMc(type):
|
||
|
|
def __instancecheck__(self, instance):
|
||
|
|
if hasattr(instance, 'read') and hasattr(instance, '__iter__'):
|
||
|
|
return True
|
||
|
|
|
||
|
|
|
||
|
|
class READABLE(metaclass=_ReadableMc):
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
class _WriteableMc(type):
|
||
|
|
def __instancecheck__(self, instance):
|
||
|
|
if hasattr(instance, 'write'):
|
||
|
|
return True
|
||
|
|
|
||
|
|
|
||
|
|
class WRITABLE(metaclass=_WriteableMc):
|
||
|
|
pass
|
||
|
|
|
||
|
|
|
||
|
|
STREAM_CLASS = (READABLE, WRITABLE)
|