mirror of
https://github.com/status-im/PyGithub.git
synced 2026-09-02 03:41:08 +00:00
Restore pagination
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
class PaginatedListIterator:
|
||||
def __init__( self, list ):
|
||||
pass
|
||||
|
||||
def next( self ):
|
||||
return "foo"
|
||||
|
||||
class PaginatedList:
|
||||
def __init__( self, contentClass, requester, headers, data ):
|
||||
self.__requester = requester
|
||||
self.__contentClass = contentClass
|
||||
self.__fromData( headers, data )
|
||||
|
||||
def __iter__( self ):
|
||||
goOn = True
|
||||
while goOn:
|
||||
goOn = False
|
||||
for element in self.__list:
|
||||
yield element
|
||||
if self.__nextUrl is not None:
|
||||
goOn = True
|
||||
status, headers, data = self.__requester.request( "GET", self.__nextUrl, None, None )
|
||||
self.__fromData( headers, data )
|
||||
|
||||
def __getitem__( self, index ):
|
||||
return self.__list[ index ]
|
||||
|
||||
def __fromData( self, headers, data ):
|
||||
links = self.__parseLinkHeader( headers )
|
||||
if len( data ) > 0 and "next" in links:
|
||||
self.__nextUrl = links[ "next" ]
|
||||
else:
|
||||
self.__nextUrl = None
|
||||
|
||||
self.__list = [
|
||||
self.__contentClass( self.__requester, element, lazy = True )
|
||||
for element in data
|
||||
]
|
||||
|
||||
def __parseLinkHeader( self, headers ):
|
||||
links = {}
|
||||
if "link" in headers:
|
||||
linkHeaders = headers[ "link" ].split( "," )
|
||||
for linkHeader in linkHeaders:
|
||||
( url, rel ) = linkHeader.split( "; " )
|
||||
url = url[ 1 : -1 ]
|
||||
rel = rel[ 5 : -1 ]
|
||||
links[ rel ] = url
|
||||
return links
|
||||
Reference in New Issue
Block a user