in alibabacloud_oss_v2/filelike.py [0:0]
def _download_part_check_cancel(self, start, size):
got = 0
error: Exception = None
request = self._request
while True:
if self._canceling:
error = CancelTask()
break
request.range_header = f'bytes={start + got}-{start + size - 1}'
request.range_behavior = 'standard'
result = self._base._client.get_object(request)
error = _check_object_same(self._modtime, self._etag, start, result)
if error:
break
try:
kwargs = {}
if self._block_size:
kwargs['block_size'] = self._block_size
with self._condition:
self._stream_reader = result.body
self._stream_iter = result.body.iter_bytes(**kwargs)
if self._canceling:
error = CancelTask()
break
for d in self._stream_iter:
if self._canceling:
error = CancelTask()
break
got += len(d)
self._data_queue.put(d)
break
except Exception:
pass
finally:
if self._stream_reader:
self._stream_reader.close()
self._stream_reader = None
self._stream_iter = None
if error:
raise error
if got != size:
raise ValueError("expect size {size}, but got {got}")
self._data_queue.put(b'')