39 lines
892 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)