@@ -237,7 +237,6 @@ def list_blobs(self, remote_path, recursive=True, names_only=False):
237237
238238 client = _storage_client ()
239239 bucket = client .bucket (bucket_name )
240- properties = {}
241240
242241 if recursive :
243242 delimiter = None
@@ -249,23 +248,37 @@ def list_blobs(self, remote_path, recursive=True, names_only=False):
249248 else :
250249 fields = None
251250
252- iterator = bucket .list_blobs (
253- prefix = path , delimiter = delimiter , fields = fields )
254- for blob in iterator :
255- properties ['bucket' ] = bucket_name
256- properties ['name' ] = blob .name
257- properties ['updated' ] = blob .updated
258- properties ['size' ] = blob .size
259-
260- yield properties
261-
262- if not recursive :
263- # When doing delimiter listings, the "directories" will be in `prefixes`.
264- for prefix in iterator .prefixes :
265- properties ['bucket' ] = bucket_name
266- properties ['name' ] = prefix
251+ iterations = 0
252+ while True :
253+ iterations += 1
254+ iterator = bucket .list_blobs (
255+ prefix = path , delimiter = delimiter , fields = fields )
256+ for blob in iterator :
257+ properties = {
258+ 'bucket' : bucket_name ,
259+ 'name' : blob .name ,
260+ 'updated' : blob .updated ,
261+ 'size' : blob .size ,
262+ }
263+
267264 yield properties
268265
266+ if not recursive :
267+ # When doing delimiter listings, the "directories" will be in
268+ # `prefixes`.
269+ for prefix in iterator .prefixes :
270+ properties = {
271+ 'bucket' : bucket_name ,
272+ 'name' : prefix ,
273+ }
274+ yield properties
275+
276+ next_page_token = iterator .next_page_token
277+ if next_page_token is None :
278+ break
279+ if iterations % 50 == 0 :
280+ logs .error ('Might be infinite looping.' )
281+
269282 def copy_file_from (self , remote_path , local_path ):
270283 """Copy file from a remote path to a local path."""
271284 client = _storage_client ()
0 commit comments