diff --git a/google/cloud/storage/_experimental/asyncio/async_multi_range_downloader.py b/google/cloud/storage/_experimental/asyncio/async_multi_range_downloader.py index f9081d0d6..2c83cb3c2 100644 --- a/google/cloud/storage/_experimental/asyncio/async_multi_range_downloader.py +++ b/google/cloud/storage/_experimental/asyncio/async_multi_range_downloader.py @@ -71,23 +71,16 @@ class AsyncMultiRangeDownloader: client, bucket_name="chandrasiri-rs", object_name="test_open9" ) my_buff1 = open('my_fav_file.txt', 'wb') - my_buff1 = open('my_fav_file.txt', 'wb') my_buff2 = BytesIO() my_buff3 = BytesIO() my_buff4 = any_object_which_provides_BytesIO_like_interface() - results_arr, error_obj = await mrd.download_ranges( - my_buff4 = any_object_which_provides_BytesIO_like_interface() results_arr, error_obj = await mrd.download_ranges( [ - # (start_byte, bytes_to_read, writeable_buffer) # (start_byte, bytes_to_read, writeable_buffer) (0, 100, my_buff1), (100, 20, my_buff2), (200, 123, my_buff3), (300, 789, my_buff4), - (100, 20, my_buff2), - (200, 123, my_buff3), - (300, 789, my_buff4), ] ) if error_obj: @@ -101,17 +94,6 @@ class AsyncMultiRangeDownloader: for result in results_arr: print("downloaded bytes", result) - if error_obj: - print("Error occurred: ") - print(error_obj) - print( - "please issue call to `download_ranges` with updated" - "`read_ranges` based on diff of (bytes_requested - bytes_written)" - ) - - for result in results_arr: - print("downloaded bytes", result) - """ diff --git a/samples/snippets/experimental/storage_download_ranges_async.py b/samples/snippets/experimental/storage_download_ranges_async.py new file mode 100644 index 000000000..f53f2f521 --- /dev/null +++ b/samples/snippets/experimental/storage_download_ranges_async.py @@ -0,0 +1,53 @@ +from google.cloud.storage._experimental.asyncio.async_multi_range_downloader import ( + AsyncMultiRangeDownloader, +) +from google.cloud.storage._experimental.asyncio.async_grpc_client import ( + AsyncGrpcClient, +) +from io import BytesIO +import asyncio +import argparse + + +async def test_mrd(bucket_name, object_name, generation_number=None): + client = AsyncGrpcClient()._grpc_client + + mrd = AsyncMultiRangeDownloader(client, bucket_name, object_name, generation_number) + await mrd.open() + # create buffers. + # Make sure buffer desitnation has enough space to accomodate bytes requetsed. + # Buffers could be in-memory or on disk + my_buff1 = open(f"sample_file_to_write_contents.txt", "wb") + my_buff2 = BytesIO() + my_buff3 = BytesIO() + my_buff4 = BytesIO() + results_arr, error_obj = await mrd.download_ranges( + [ + (0, 100, my_buff1), + (100, 20, my_buff2), + (200, 123, my_buff3), + (300, 789, my_buff4), + ] + ) + if error_obj: + print("Error occurred: ") + print(error_obj) + print( + "please issue call to `download_ranges` with updated" + "`read_ranges` based on diff of (bytes_requested - bytes_written)" + ) + + for result in results_arr: + print("downloaded bytes", result) + + # close MRD + await mrd.close() + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--bucket_name", type=str, required=True) + parser.add_argument("--object_name", type=str, required=True) + parser.add_argument("--generation_number", type=int, default=None) + args = parser.parse_args() + asyncio.run(test_mrd(args.bucket_name, args.object_name, args.generation_number))