Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Batch request with Google Cloud Storage python client

I can't find any examples on how to use the python google cloud storage's batch functionality. I see it exists here.

I'd love a concrete example. Let's say I want to delete a bunch of blobs with a given prefix. I'd start getting the list of blobs as follows

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket('my_bucket_name')
blobs_to_delete = bucket.list_blobs(prefix="my/prefix/here")

# how do I delete the blobs in blobs_to_delete in a single batch?

# bonus: if I have more than 100 blobs to delete, handle the limitation
#        that a batch can only handle 100 operations
like image 685
conradlee Avatar asked Jul 14 '17 10:07

conradlee


1 Answers

TL;DR - Just send all the requests within the batch() context manager (available in the google-cloud-python library)

Try this example:

from google.cloud import storage

storage_client = storage.Client()
bucket = storage_client.get_bucket('my_bucket_name')
# Accumulate the iterated results in a list prior to issuing
# batch within the context manager
blobs_to_delete = [blob for blob in bucket.list_blobs(prefix="my/prefix/here")]

# Use the batch context manager to delete all the blobs    
with storage_client.batch():
    for blob in blobs_to_delete:
        blob.delete()

You only need to worry about the 100 items per batch if you're using the REST APIs directly. The batch() context manager automatically takes care of this restriction and will issue multiple batch requests if needed.

like image 167
Tuxdude Avatar answered Nov 12 '22 21:11

Tuxdude