diff options
| author | Ziad Sawalha <github@highbridgellc.com> | 2011-06-14 23:33:57 -0500 |
|---|---|---|
| committer | Ziad Sawalha <github@highbridgellc.com> | 2011-06-14 23:33:57 -0500 |
| commit | ffd23970d416e1e8eab3dbe6daecd80ed81c2be1 (patch) | |
| tree | b34c09cd6469010baa2c66b05cf6ca30ab897e87 /keystone | |
| parent | 610e997fe665715a463177141c61b79f0df2e217 (diff) | |
Support for GET /v2.0/users and add cdn back to sampledata for v1.0 support
Diffstat (limited to 'keystone')
| -rwxr-xr-x | keystone/db/sqlalchemy/api.py | 51 | ||||
| -rwxr-xr-x | keystone/logic/service.py | 25 | ||||
| -rwxr-xr-x | keystone/server.py | 11 |
3 files changed, 86 insertions, 1 deletions
diff --git a/keystone/db/sqlalchemy/api.py b/keystone/db/sqlalchemy/api.py index df1d4d4e..9341954b 100755 --- a/keystone/db/sqlalchemy/api.py +++ b/keystone/db/sqlalchemy/api.py @@ -488,6 +488,57 @@ def user_get(id, session=None): return result +def user_get_page(marker, limit, session=None): + if not session: + session = get_session() + + if marker: + return session.query(models.User).filter("id>:marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id.desc()).limit(limit).all() + else: + return session.query(models.User).order_by(\ + models.User.id.desc()).limit(limit).all() + + +def user_get_page_markers(marker, limit, session=None): + if not session: + session = get_session() + first = session.query(models.User).order_by(\ + models.User.id).first() + last = session.query(models.User).order_by(\ + models.User.id.desc()).first() + if first is None: + return (None, None) + if marker is None: + marker = first.id + next = session.query(models.User).filter("id > :marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id).limit(limit).all() + prev = session.query(models.User).filter("id < :marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id.desc()).limit(int(limit)).all() + if len(next) == 0: + next = last + else: + for t in next: + next = t + if len(prev) == 0: + prev = first + else: + for t in prev: + prev = t + if prev.id == marker: + prev = None + else: + prev = prev.id + if next.id == last.id: + next = None + else: + next = next.id + return (prev, next) + + def user_get_email(email, session=None): if not session: session = get_session() diff --git a/keystone/logic/service.py b/keystone/logic/service.py index ba40d247..4030e06b 100755 --- a/keystone/logic/service.py +++ b/keystone/logic/service.py @@ -210,7 +210,6 @@ class IdentityService(object): # # Tenant Group Operations # - def create_tenant_group(self, admin_token, tenant, group): self.__validate_token(admin_token) @@ -511,6 +510,30 @@ class IdentityService(object): return users.User_Update(None, duser.id, duser.tenant_id, duser.email, duser.enabled, ts) + ## + ## GET Users with Pagination + ## + def get_users(self, admin_token, marker, limit, url): + (token, user) = self.__validate_token(admin_token) + # If Global admin return all tenants. + us = [] + dusers = db_api.user_get_page(marker, limit) + for duser in dusers: + us.append(users.User(None, + duser.id, + duser.tenant_id, + duser.email, + duser.enabled)) + prev, next = db_api.user_get_page_markers(marker, limit) + links = [] + if prev: + links.append(atom.Link('prev', "%s?'marker=%s&limit=%s'" \ + % (url, prev, limit))) + if next: + links.append(atom.Link('next', "%s?'marker=%s&limit=%s'" \ + % (url, next, limit))) + return users.Users(us, links) + def update_user(self, admin_token, user_id, user): self.__validate_token(admin_token) diff --git a/keystone/server.py b/keystone/server.py index 1e481311..e58185d1 100755 --- a/keystone/server.py +++ b/keystone/server.py @@ -285,6 +285,13 @@ class UserController(wsgi.Controller): user)) @utils.wrap_error + def get_users(self, req): + marker, limit, url = get_marker_limit_and_url(req) + users = service.get_users(utils.get_auth_token(req), marker, + limit, url) + return utils.send_result(200, req, users) + + @utils.wrap_error def get_user(self, req, user_id): user = service.get_user(utils.get_auth_token(req), user_id) return utils.send_result(200, req, user) @@ -653,6 +660,10 @@ class KeystoneAdminAPI(wsgi.Router): controller=user_controller, action="create_user", conditions=dict(method=["PUT"])) + mapper.connect("/v2.0/users", + controller=user_controller, + action="get_users", + conditions=dict(method=["GET"])) mapper.connect("/v2.0/users/{user_id}", controller=user_controller, action="get_user", |
