in s3transfer/utils.py [0:0]
def seek(self, where, whence=0):
if whence not in (0, 1, 2):
# Mimic io's error for invalid whence values
raise ValueError(f"invalid whence ({whence}, should be 0, 1 or 2)")
# Recalculate where based on chunk attributes so seek from file
# start (whence=0) is always used
where += self._start_byte
if whence == 1:
where += self._amount_read
elif whence == 2:
where += self._size
self._fileobj.seek(max(where, self._start_byte))
if self._callbacks is not None and self._callbacks_enabled:
# To also rewind the callback() for an accurate progress report
bounded_where = max(min(where - self._start_byte, self._size), 0)
bounded_amount_read = min(self._amount_read, self._size)
amount = bounded_where - bounded_amount_read
invoke_progress_callbacks(
self._callbacks, bytes_transferred=amount
)
self._amount_read = max(where - self._start_byte, 0)