Restore pagination

This commit is contained in:
Vincent Jacques
2012-05-05 10:00:18 +02:00
parent 1f4dbae94a
commit bddf2051b5
34 changed files with 401 additions and 213 deletions
+49
View File
@@ -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