From 2f8625efbdd5ceba2c5d7b5444a8e263547a1f9f Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Fri, 4 Jun 2021 16:22:17 +0000 Subject: [PATCH] Make DB queries compatible with SQLAlchemy 1.4.x Change-Id: I25eae9e6de8534b40493caf23cc49602a44efd26 Closes-Bug: #1930908 --- keystone/common/sql/core.py | 8 ++++++++ keystone/identity/shadow_backends/sql.py | 3 ++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/keystone/common/sql/core.py b/keystone/common/sql/core.py index ed84e5893e..89169aaf3d 100644 --- a/keystone/common/sql/core.py +++ b/keystone/common/sql/core.py @@ -119,6 +119,10 @@ ModelBase.__init__ = initialize_decorator(ModelBase.__init__) class JsonBlob(sql_types.TypeDecorator): impl = sql.Text + # NOTE(ralonsoh): set to True as any other TypeDecorator in SQLAlchemy + # https://docs.sqlalchemy.org/en/14/core/custom_types.html# \ + # sqlalchemy.types.TypeDecorator.cache_ok + cache_ok = True def process_bind_param(self, value, dialect): return jsonutils.dumps(value) @@ -144,6 +148,10 @@ class DateTimeInt(sql_types.TypeDecorator): impl = sql.BigInteger epoch = datetime.datetime.fromtimestamp(0, tz=pytz.UTC) + # NOTE(ralonsoh): set to True as any other TypeDecorator in SQLAlchemy + # https://docs.sqlalchemy.org/en/14/core/custom_types.html# \ + # sqlalchemy.types.TypeDecorator.cache_ok + cache_ok = True def process_bind_param(self, value, dialect): if value is None: diff --git a/keystone/identity/shadow_backends/sql.py b/keystone/identity/shadow_backends/sql.py index 1d817c0387..3e04b332dc 100644 --- a/keystone/identity/shadow_backends/sql.py +++ b/keystone/identity/shadow_backends/sql.py @@ -98,7 +98,8 @@ class ShadowUsers(base.ShadowUsersDriverBase): x for x in hints.filters if x['name'] not in ('idp_id', 'protocol_id', 'unique_id')] - query = query.filter(sqlalchemy.and_(*statements)) + if statements: + query = query.filter(sqlalchemy.and_(*statements)) return query def get_federated_users(self, hints):