mirror of
https://github.com/status-im/PyGithub.git
synced 2026-08-31 19:01:15 +00:00
52 lines
1.6 KiB
Python
52 lines
1.6 KiB
Python
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.__pages = 0
|
|
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 and self.__pages < 9:
|
|
self.__pages += 1
|
|
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
|