docs: def _ReadPartial(self, length):
      """Read as much as possible, but not more than length."""
      chunk = self.offset // self.chunksize
      chunk_offset = self.offset % self.chunksize
  
      # If we're past the end of the file, we don't have a chunk to read from, so
      # we can't read anymore. We return the empty string here so we can read off
      # the end of a file without raising, and get as much data as is there.
      if chunk > self.last_chunk:
        return ""
  
      available_to_read = min(length, self.chunksize - chunk_offset)
  
      fd = self._GetChunkForReading(chunk)
  
      fd.seek(chunk_offset)
  
      result = fd.read(available_to_read)
      self.offset += len(result)
  
      return result