Files
PyGithub/github/GithubObjects/PaginatedList.py
T

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