@@ -321,10 +321,7 @@ async def zip(self, path: wb_path.WaterButlerPath, **kwargs) -> asyncio.StreamRe
321321
322322 :param path: ( :class:`.WaterButlerPath` ) The folder to compress
323323 """
324- kwargs ['minimal' ] = True
325- kwargs ['limit' ] = None
326-
327- return streams .ZipStreamReader (utils .ZipStreamGeneratorPaginated (self , path , ** kwargs )) # type: ignore
324+ return await super ().zip (path , ** kwargs , minimal = True )
328325
329326 async def metadata (self , path , ** kwargs ):
330327 if path .identifier is None :
@@ -526,22 +523,18 @@ async def copy(self,
526523 return meta_data , created
527524
528525 async def iter_children_pages (self , path , ** kwargs ):
529- url = self .build_url (
530- path .identifier ,
531- 'children' ,
532- user_id = self .auth .get ('id' ),
533- minimal = kwargs .get ('minimal' ),
534- limit = kwargs .get ('limit' ),
535- orm = True
536- )
526+ limit = kwargs .pop ('limit' , None )
527+ after = None
537528
538529 while True :
539- page , url = await self ._fetch_metadata_page ( url , path , ** kwargs )
530+ page = await self .metadata ( path , limit = limit , after = after , ** kwargs )
540531 yield page
541532
542- if not url :
533+ if not limit or len ( page ) < int ( limit ) :
543534 break
544535
536+ after = page [- 1 ].raw ['id' ]
537+
545538 # ========== private ==========
546539
547540 async def _item_metadata (self , path , revision = None ):
@@ -552,10 +545,20 @@ async def _item_metadata(self, path, revision=None):
552545 )
553546 return OsfStorageFileMetadata ((await resp .json ()), str (path ))
554547
555- async def _children_metadata (self , path , ** kwargs ):
548+ async def _children_metadata (self , path , limit = None , after = None , ** kwargs ):
549+ query = {
550+ 'user_id' : self .auth .get ('id' ),
551+ 'minimal' : kwargs .get ('minimal' , False ),
552+ }
553+ if limit is not None :
554+ query ['orm' ] = True
555+ query ['limit' ] = limit
556+ if after is not None :
557+ query ['after' ] = after
558+
556559 resp = await self .make_signed_request (
557560 'GET' ,
558- self .build_url (path .identifier , 'children' , user_id = self . auth . get ( 'id' ), minimal = kwargs . get ( 'minimal' , False ) ),
561+ self .build_url (path .identifier , 'children' , ** query ),
559562 expects = (200 , )
560563 )
561564 resp_json = await resp .json ()
@@ -568,36 +571,6 @@ async def _children_metadata(self, path, **kwargs):
568571 ret .append (OsfStorageFileMetadata (item , str (path .child (item ['name' ]))))
569572 return ret
570573
571- async def _fetch_metadata_page (self , url , path , ** kwargs ):
572- resp = await self .make_signed_request (
573- 'GET' ,
574- url ,
575- expects = (200 ,),
576- )
577- resp_json = await resp .json ()
578-
579- if kwargs .get ('limit' ) and len (resp_json ) < kwargs .get ('limit' ):
580- next_url = None
581- elif not kwargs .get ('limit' ):
582- next_url = None
583- else :
584- next_url = self .build_url (
585- path .identifier ,
586- 'children' ,
587- user_id = self .auth .get ('id' ),
588- minimal = kwargs .get ('minimal' ),
589- limit = kwargs .get ('limit' ),
590- after = resp_json [- 1 ]['id' ] if resp_json else None ,
591- orm = True
592- )
593- ret = []
594- for item in resp_json :
595- if item ['kind' ] == 'folder' :
596- ret .append (OsfStorageFolderMetadata (item , str (path .child (item ['name' ], folder = True ))))
597- else :
598- ret .append (OsfStorageFileMetadata (item , str (path .child (item ['name' ]))))
599- return ret , next_url
600-
601574 async def _delete_folder_contents (self , path , ** kwargs ):
602575 """Delete the contents of a folder. For use against provider root.
603576
0 commit comments