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 # License for the specific language governing permissions and limitations
# under the License. # under the License.
import urllib
from keystoneclient import base from keystoneclient import base
@ -48,12 +50,23 @@ class TenantManager(base.ManagerWithFind):
return self._create('/tenants', params, "tenant") return self._create('/tenants', params, "tenant")
def list(self): def list(self, limit=None, marker=None):
""" """
Get a list of tenants. Get a list of tenants.
:rtype: list of :class:`Tenant` :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, def update(self, tenant_id, tenant_name=None, description=None,
enabled=None): enabled=None):

@ -14,6 +14,8 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
import urllib
from keystoneclient import base from keystoneclient import base
@ -90,14 +92,25 @@ class UserManager(base.ManagerWithFind):
""" """
return self._delete("/users/%s" % base.getid(user)) 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) Get a list of users (optionally limited to a tenant)
:rtype: list of :class:`User` :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: if not tenant_id:
return self._list("/users", "users") return self._list("/users%s" % query, "users")
else: 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() tenant_list = self.client.tenants.list()
[self.assertTrue(isinstance(t, tenants.Tenant)) for t in tenant_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): def test_update(self):
req_body = {"tenant": {"id": 4, req_body = {"tenant": {"id": 4,
"name": "tenantX", "name": "tenantX",

@ -114,6 +114,54 @@ class UserTests(utils.TestCase):
user_list = self.client.users.list() user_list = self.client.users.list()
[self.assertTrue(isinstance(u, users.User)) for u in user_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): def test_update(self):
req_1 = {"user": {"password": "swordfish", "id": 2}} req_1 = {"user": {"password": "swordfish", "id": 2}}
req_2 = {"user": {"id": 2, "email": "gabriel@example.com"}} req_2 = {"user": {"id": 2, "email": "gabriel@example.com"}}