From 8eea21c00de96b86f5018e3c9e242bf4b6169b2f Mon Sep 17 00:00:00 2001 From: Isaac Prior Date: Fri, 14 Jun 2019 15:16:19 +0100 Subject: [PATCH] Fix sqlalchemy deprecation error Running unit tests fails with the error: monasca_api.tests.test_a_repository.TestAlarmRepoDB.test_should_count ...FAILED 'Textual column expression 'metric_name' should be explicitly declared with text('metric_name'), or use column('metric_name') for more specificity' Using strings as SQL fragments was deprecated in v1.0: (https://docs.sqlalchemy.org/en/13/changelog/migration_10.html#warnings-emitted-when-coercing-full-sql-fragments-into-text) Deprecation warnings now throw exceptions as of v1.3: (https://docs.sqlalchemy.org/en/13/changelog/migration_13.html#deprecation-warnings-are-emitted-for-all-deprecated-elements-new-deprecations-added) This patch modifies the sql query to make use of column constructor. Change-Id: Ic258a3f453e95844249eaa763aa507d6be0d132e --- monasca_api/common/repositories/sqla/alarms_repository.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/monasca_api/common/repositories/sqla/alarms_repository.py b/monasca_api/common/repositories/sqla/alarms_repository.py index 4affadb6f..e9507e815 100644 --- a/monasca_api/common/repositories/sqla/alarms_repository.py +++ b/monasca_api/common/repositories/sqla/alarms_repository.py @@ -22,7 +22,7 @@ from monasca_api.common.repositories import alarms_repository from monasca_api.common.repositories import exceptions from monasca_api.common.repositories.sqla import models from monasca_api.common.repositories.sqla import sql_repository -from sqlalchemy import (MetaData, update, delete, select, text, +from sqlalchemy import (MetaData, update, delete, select, text, column, bindparam, func, literal_column, asc, desc) from sqlalchemy import or_ @@ -492,7 +492,7 @@ class AlarmsRepository(sql_repository.SQLRepository, query_from = query_from.join(sub_query, sub_query.c.alarm_id == a.c.id) query_columns = [func.count().label('count')] - query_columns.extend(group_by_columns) + query_columns.extend([column(col) for col in group_by_columns]) query = (select(query_columns) .select_from(query_from)