From d2e6f63fe107c17e344337b8db030733ed9bbb2e Mon Sep 17 00:00:00 2001 From: Dolph Mathews Date: Thu, 26 Jan 2012 15:29:34 -0600 Subject: Added shortcut for id=NULL queries (bug 916386) Change-Id: I9d7ae05f860d4a8f56bb9b7ab77221e201478393 --- keystone/backends/sqlalchemy/api/credentials.py | 6 +++-- .../backends/sqlalchemy/api/endpoint_template.py | 6 +++-- keystone/backends/sqlalchemy/api/role.py | 6 +++-- keystone/backends/sqlalchemy/api/service.py | 6 +++-- keystone/backends/sqlalchemy/api/tenant.py | 12 +++++++++ keystone/backends/sqlalchemy/api/token.py | 6 +++-- keystone/backends/sqlalchemy/api/user.py | 31 +++++++++++++--------- 7 files changed, 51 insertions(+), 22 deletions(-) diff --git a/keystone/backends/sqlalchemy/api/credentials.py b/keystone/backends/sqlalchemy/api/credentials.py index a3dd5bea..22105694 100755 --- a/keystone/backends/sqlalchemy/api/credentials.py +++ b/keystone/backends/sqlalchemy/api/credentials.py @@ -99,8 +99,10 @@ class CredentialsAPI(api.BaseCredentialsAPI): @staticmethod def _get(id, session=None): - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() return session.query(models.Credentials).filter_by(id=id).first() diff --git a/keystone/backends/sqlalchemy/api/endpoint_template.py b/keystone/backends/sqlalchemy/api/endpoint_template.py index 25fe0ed4..84fce454 100755 --- a/keystone/backends/sqlalchemy/api/endpoint_template.py +++ b/keystone/backends/sqlalchemy/api/endpoint_template.py @@ -61,8 +61,10 @@ class EndpointTemplateAPI(api.BaseEndpointTemplateAPI): session.delete(endpoint_template) def get(self, id, session=None): - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() return session.query(models.EndpointTemplates).\ filter_by(id=id).first() diff --git a/keystone/backends/sqlalchemy/api/role.py b/keystone/backends/sqlalchemy/api/role.py index 7ffe13e8..62198e76 100755 --- a/keystone/backends/sqlalchemy/api/role.py +++ b/keystone/backends/sqlalchemy/api/role.py @@ -89,8 +89,10 @@ class RoleAPI(api.BaseRoleAPI): ref.save(session=session) def get(self, id, session=None): - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() return RoleAPI.to_model( session.query(models.Role).filter_by(id=id).first()) diff --git a/keystone/backends/sqlalchemy/api/service.py b/keystone/backends/sqlalchemy/api/service.py index 0ffb4f28..3e546106 100644 --- a/keystone/backends/sqlalchemy/api/service.py +++ b/keystone/backends/sqlalchemy/api/service.py @@ -102,8 +102,10 @@ class ServiceAPI(api.BaseServiceAPI): service_ref.save(session=session) def get(self, id, session=None): - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() return ServiceAPI.to_model(session.query(models.Service). filter_by(id=id).first()) diff --git a/keystone/backends/sqlalchemy/api/tenant.py b/keystone/backends/sqlalchemy/api/tenant.py index 32432e5a..db516b15 100755 --- a/keystone/backends/sqlalchemy/api/tenant.py +++ b/keystone/backends/sqlalchemy/api/tenant.py @@ -81,6 +81,9 @@ class TenantAPI(api.BaseTenantAPI): For PK lookups from within the sqlalchemy backend, use ``_get_by_id()`` instead. """ + if id is None: + return None + session = session or get_session() result = session.query(models.Tenant).filter_by(uid=id).first() @@ -97,18 +100,27 @@ class TenantAPI(api.BaseTenantAPI): This is **only** for use within the sqlalchemy backend. """ + if id is None: + return None + session = session or get_session() return session.query(models.Tenant).filter_by(id=id).first() @staticmethod def id_to_uid(id, session=None): + if id is None: + return None + session = session or get_session() tenant = session.query(models.Tenant).filter_by(id=id).first() return tenant.uid if tenant else None @staticmethod def uid_to_id(uid, session=None): + if uid is None: + return None + session = session or get_session() tenant = session.query(models.Tenant).filter_by(uid=uid).first() return tenant.id if tenant else None diff --git a/keystone/backends/sqlalchemy/api/token.py b/keystone/backends/sqlalchemy/api/token.py index e2624a9c..869822bb 100755 --- a/keystone/backends/sqlalchemy/api/token.py +++ b/keystone/backends/sqlalchemy/api/token.py @@ -78,8 +78,10 @@ class TokenAPI(api.BaseTokenAPI): @staticmethod def _get(id, session=None): - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() result = session.query(models.Token).filter_by(id=id).first() diff --git a/keystone/backends/sqlalchemy/api/user.py b/keystone/backends/sqlalchemy/api/user.py index 156d79db..f5a64b18 100755 --- a/keystone/backends/sqlalchemy/api/user.py +++ b/keystone/backends/sqlalchemy/api/user.py @@ -80,11 +80,12 @@ class UserAPI(api.BaseUserAPI): return UserAPI.to_model(user_ref) def get(self, id, session=None): - if not session: - session = get_session() + if id is None: + return None - id = str(id) if id is not None else None - result = session.query(models.User).filter_by(uid=id).first() + session = session or get_session() + + result = session.query(models.User).filter_by(uid=str(id)).first() return UserAPI.to_model(result) @@ -95,24 +96,30 @@ class UserAPI(api.BaseUserAPI): - Queries by PK ID - Doesn't wrap result with domain layer models """ - if not session: - session = get_session() + if id is None: + return None + + session = session or get_session() - id = str(id) if id is not None else None - return session.query(models.User).filter_by(id=id).first() + # TODO(dolph): user ID's are NOT strings... why is this is being cast? + return session.query(models.User).filter_by(id=str(id)).first() @staticmethod def id_to_uid(id, session=None): + if id is None: + return None + session = session or get_session() - id = str(id) if id is not None else None - user = session.query(models.User).filter_by(id=id).first() + user = session.query(models.User).filter_by(id=str(id)).first() return user.uid if user else None @staticmethod def uid_to_id(uid, session=None): + if uid is None: + return None + session = session or get_session() - uid = str(uid) if uid is not None else None - user = session.query(models.User).filter_by(uid=uid).first() + user = session.query(models.User).filter_by(uid=str(uid)).first() return user.id if user else None def get_by_name(self, name, session=None): -- cgit