def _read_range(self, start, end): # TODO: make this method thread safe assert start <= end, "start should less than end" try: logger.info('trigger read_func(%d, %d)', start, end) objs = self._read_func(start, end) except: # noqa: E722 raise ReadFailed('read_func raise error') else: expected = end - start actual = len(objs) if expected != actual: raise ReadFailed( 'read_func returns unexpected number of objects: ' 'expected={}, actual={}'.format(expected, actual)) self._objects[start:end] = objs self._refresh_ranges()
def readall(self): if self.count is None: raise ReadFailed("can't readall when count is unknown") list(self) return self._objects