@@ -386,6 +386,51 @@ def _invalidate(self):
386386 self ._entity = None
387387
388388
389+ class DefaultPaginationClient (DefaultClient ):
390+ """ Client to handle API endpoints with pagination.
391+ List of endpoints supporting pagination with per_page size:
392+ - accounts 500
393+ limits per app plan 50 - not implemented in client
394+ application list for all services 500 - not implemented in client
395+ - backend mapping rules 500
396+ - backend method list 500
397+ - backend metric 500
398+ - backend 500
399+ - service 500
400+ invoice list by account 20 - not implemented by standard "list" method
401+ - invoice list 20
402+ - all cms 100
403+ """
404+ def __init__ (self , * args , per_page = 500 , ** kwargs ):
405+ self .per_page = per_page
406+ super ().__init__ (* args , ** kwargs )
407+
408+ def _list (self , ** kwargs ):
409+ """ List all objects via paginated API endpoint """
410+ kwargs = kwargs .copy ()
411+ kwargs .setdefault ("params" , {})
412+ if "page" in kwargs ["params" ] or self .per_page is None :
413+ return super ()._list (** kwargs )
414+ pagenum = 1
415+
416+ kwargs ["params" ]["page" ] = pagenum
417+ kwargs ["params" ]["per_page" ] = self .per_page
418+
419+ page = super ()._list (** kwargs )
420+ ret_list = page
421+
422+ while len (page ):
423+ pagenum += 1
424+ kwargs ["params" ]["page" ] = pagenum
425+ page = super ()._list (** kwargs )
426+ ret_list += page
427+
428+ return ret_list
429+
430+ def __iter__ (self ):
431+ return self ._list ()
432+
433+
389434class DefaultPlanClient (DefaultClient ):
390435 def set_default (self , entity_id : int , ** kwargs ) -> 'DefaultPlanResource' :
391436 """Sets default plan for the entity
@@ -429,7 +474,7 @@ def is_default(self) -> bool:
429474 return self ['default' ] is True
430475
431476
432- class DefaultStateClient (DefaultClient ):
477+ class DefaultStateClient (DefaultPaginationClient ):
433478 def set_state (self , entity_id , state : str , ** kwargs ):
434479 """Sets the state for the resource
435480 Args:
0 commit comments