Add limit and marker to user_list and tenant_list

* This will ultimately enable seeing more than 10 users/tenants at a
   time in horizon :)

Change-Id: I54ab6305746a16fda8e57c9c67c48ea2d6b906c6
This commit is contained in:
Anthony Young 2012-01-26 16:13:09 -08:00
parent 8db366c448
commit d29168fa3f
4 changed files with 127 additions and 5 deletions

@ -14,6 +14,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import urllib
from keystoneclient import base
@ -48,12 +50,23 @@ class TenantManager(base.ManagerWithFind):
return self._create('/tenants', params, "tenant")
def list(self):
def list(self, limit=None, marker=None):
"""
Get a list of tenants.
:rtype: list of :class:`Tenant`
"""
return self._list("/tenants", "tenants")
params = {}
if limit:
params['limit'] = limit
if marker:
params['marker'] = marker
query = ""
if params:
query = "?" + urllib.urlencode(params)
return self._list("/tenants%s" % query, "tenants")
def update(self, tenant_id, tenant_name=None, description=None,
enabled=None):

@ -14,6 +14,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import urllib
from keystoneclient import base
@ -90,14 +92,25 @@ class UserManager(base.ManagerWithFind):
"""
return self._delete("/users/%s" % base.getid(user))
def list(self, tenant_id=None):
def list(self, tenant_id=None, limit=None, marker=None):
"""
Get a list of users (optionally limited to a tenant)
:rtype: list of :class:`User`
"""
params = {}
if limit:
params['limit'] = int(limit)
if marker:
params['marker'] = int(marker)
query = ""
if params:
query = "?" + urllib.urlencode(params)
if not tenant_id:
return self._list("/users", "users")
return self._list("/users%s" % query, "users")
else:
return self._list("/tenants/%s/users" % tenant_id, "users")
return self._list("/tenants/%s/users%s" % (tenant_id, query),
"users")

@ -116,6 +116,54 @@ class TenantTests(utils.TestCase):
tenant_list = self.client.tenants.list()
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list]
def test_list_limit(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_TENANTS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants?limit=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
tenant_list = self.client.tenants.list(limit=1)
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list]
def test_list_marker(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_TENANTS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants?marker=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
tenant_list = self.client.tenants.list(marker=1)
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list]
def test_list_limit_marker(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_TENANTS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/tenants?marker=1&limit=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
tenant_list = self.client.tenants.list(limit=1, marker=1)
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_list]
def test_update(self):
req_body = {"tenant": {"id": 4,
"name": "tenantX",

@ -114,6 +114,54 @@ class UserTests(utils.TestCase):
user_list = self.client.users.list()
[self.assertTrue(isinstance(u, users.User)) for u in user_list]
def test_list_limit(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_USERS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users?limit=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
user_list = self.client.users.list(limit=1)
[self.assertTrue(isinstance(u, users.User)) for u in user_list]
def test_list_marker(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_USERS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users?marker=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
user_list = self.client.users.list(marker=1)
[self.assertTrue(isinstance(u, users.User)) for u in user_list]
def test_list_limit_marker(self):
resp = httplib2.Response({
"status": 200,
"body": json.dumps(self.TEST_USERS),
})
httplib2.Http.request(urlparse.urljoin(self.TEST_URL,
'v2.0/users?marker=1&limit=1&fresh=1234'),
'GET',
headers=self.TEST_REQUEST_HEADERS) \
.AndReturn((resp, resp['body']))
self.mox.ReplayAll()
user_list = self.client.users.list(limit=1, marker=1)
[self.assertTrue(isinstance(u, users.User)) for u in user_list]
def test_update(self):
req_1 = {"user": {"password": "swordfish", "id": 2}}
req_2 = {"user": {"id": 2, "email": "gabriel@example.com"}}