NSXv3 Client: Add paginated response

Change-Id: I8fb23fb239c0c2d9f5d08085dabcb2e96384b8fd
This commit is contained in:
Roey Chen 2016-11-27 03:53:43 -08:00
parent 6bd068859e
commit 3650b33e4d
2 changed files with 15 additions and 5 deletions

View File

@ -27,6 +27,7 @@ LOG = log.getLogger(__name__)
ERRORS = {requests.codes.NOT_FOUND: exceptions.ResourceNotFound,
requests.codes.PRECONDITION_FAILED: exceptions.StaleRevision}
DEFAULT_ERROR = exceptions.ManagerError
NULL_CURSOR_PREFIX = '0000'
class RESTClient(object):
@ -54,8 +55,8 @@ class RESTClient(object):
default_headers=self._default_headers,
client_obj=self)
def list(self, headers=None):
return self.url_list('')
def list(self, resource='', headers=None):
return self.url_list(resource, headers=headers)
def get(self, uuid, headers=None):
return self.url_get(uuid, headers=headers)
@ -70,7 +71,16 @@ class RESTClient(object):
return self.url_post(resource, body, headers=headers)
def url_list(self, url, headers=None):
return self.url_get(url, headers=headers)
concatenate_response = self.url_get(url, headers=headers)
cursor = concatenate_response.get('cursor', NULL_CURSOR_PREFIX)
op = '&' if urlparse.urlparse(url).query else '?'
url += op + 'cursor='
while cursor and not cursor.startswith(NULL_CURSOR_PREFIX):
page = self.url_get(url + cursor, headers=headers)
concatenate_response['results'].extend(page.get('results', []))
cursor = page.get('cursor', NULL_CURSOR_PREFIX)
return concatenate_response
def url_get(self, url, headers=None):
return self._rest_call(url, method='GET', headers=headers)

View File

@ -159,7 +159,7 @@ class NsxLibNsGroup(utils.NsxLibApiBase):
return self.client.create('ns-groups', body)
def list(self):
return self.client.get(
return self.client.list(
'ns-groups?populate_references=false').get('results', [])
def update(self, nsgroup_id, display_name=None, description=None,
@ -370,7 +370,7 @@ class NsxLibFirewallSection(utils.NsxLibApiBase):
def list(self):
resource = 'firewall/sections'
return self.client.get(resource).get('results', [])
return self.client.list(resource).get('results', [])
def delete(self, section_id):
resource = 'firewall/sections/%s?cascade=true' % section_id