def copy_from_iter(self, src_blob: "GSBlob") -> Generator[int, None, None]:
     assert isinstance(src_blob, type(self))
     if self.url != src_blob.url:
         if not src_blob._gs_bucket.user_project:
             # TODO: always use rewrite when it supports requester pays buckets
             dst_gs_blob = self._gs_bucket.blob(self.key)
             src_gs_blob = src_blob._gs_bucket.blob(src_blob.key)
             token: Optional[str] = None
             total_bytes_written = 0
             while True:
                 try:
                     token, bytes_written, _ = dst_gs_blob.rewrite(
                         src_gs_blob, token)
                 except gcp_exceptions.NotFound as e:
                     raise blobstore.BlobNotFoundError() from e
                 chunk_size = bytes_written - total_bytes_written
                 total_bytes_written = bytes_written
                 yield chunk_size
                 if token is None:
                     break
         else:
             size = src_blob.size()
             if size <= GSBlobStore.chunk_size:
                 self.put(src_blob.get())
                 yield size
             else:
                 with self.part_writer() as writer:
                     for part in src_blob.iter_content():
                         writer.put_part(part)
                         yield len(part)
 def __init__(self, path: str):
     try:
         self.size = os.path.getsize(path)
     except FileNotFoundError:
         raise blobstore.BlobNotFoundError(f"Could not find {path}")
     self.chunk_size = LocalBlobStore.chunk_size
     self._number_of_parts = ceil(self.size / self.chunk_size) if 0 < self.size else 1
     self.handle = open(path, "rb")
def _get_native_blob(bucket: Union[str, GSNativeBucket],
                     key: str,
                     credentials: Optional[dict] = None,
                     billing_project: Optional[str] = None) -> GSNativeBlob:
    bucket = _get_native_bucket(bucket, credentials, billing_project)
    blob = bucket.get_blob(key)
    if blob is None:
        raise blobstore.BlobNotFoundError(
            f"Could not find gs://{bucket.name}/{key}")
    return blob
 def wrapper(self, *args, **kwargs):
     try:
         for item in generator(self, *args, **kwargs):
             yield item
     except (HTTPError, ConnectionError) as ex:
         raise blobstore.BlobNotFoundError(f"Could not find {self.url}") from ex
 def wrapper(self, *args, **kwargs):
     try:
         return func(self, *args, **kwargs)
     except (HTTPError, ConnectionError) as ex:
         raise blobstore.BlobNotFoundError(f"Could not find {self.url}") from ex
 def wrapper(self, *args, **kwargs):
     try:
         return func(self, *args, **kwargs)
     except FileNotFoundError as ex:
         raise blobstore.BlobNotFoundError(f"Could not find {self.url}") from ex
 def download_iter(self, target: str) -> Generator[int, None, None]:
     if not os.path.isfile(self._path):
         raise blobstore.BlobNotFoundError(f"Could not find {self.url}")
     if self._path != target:
         shutil.copyfile(self._path, target)
     yield self.size()