Source code for spinnman.data.abstract_data_reader

from abc import ABCMeta
from abc import abstractmethod
from six import add_metaclass


@add_metaclass(ABCMeta)
[docs]class AbstractDataReader(object): @classmethod def __subclasshook__(cls, othercls): """ Checks if all the abstract methods are present on the subclass """ for C in cls.__mro__: for key in C.__dict__: item = C.__dict__[key] if hasattr(item, "__isabstractmethod__"): if not any(key in B.__dict__ for B in othercls.__mro__): return NotImplemented return True @abstractmethod
[docs] def read(self, n_bytes): """ Read a number of bytes from the underlying stream :param n_bytes: The number of bytes to read. :type n_bytes: int :return: The bytes read from the underlying stream. May be less than\ requested. :rtype: bytearray :raise IOError: If there is an error obtaining the bytes """ pass
@abstractmethod
[docs] def readinto(self, array): """ Read a number of bytes into an array from the underlying stream :param array: An array into which the bytes are to be read :type array: bytearray :return: The number of bytes written in to the array :rtype: int :raise IOError: If there is an error obtaining the bytes """ pass
@abstractmethod
[docs] def readall(self): """ Read the rest of the bytes from the underlying stream :return: The bytes read :rtype: bytearray :raise IOError: If there is an error obtaining the bytes """ pass