From 42fda206e9de45a4beda8688b06e1ba29a685722 Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Thu, 9 Sep 2021 15:14:06 +0000 Subject: [PATCH] Replace "Inspector.from_engine()" with "sqlalchemy.inspect()" Since SQLAlchemy 1.4, the method "Inspector.from_engine()" is deprecated. Error message: "The from_engine() method on Inspector is deprecated and will be removed in a future release. Please use the sqlalchemy.inspect() function on an Engine or Connection in order to acquire an Inspector. (deprecated since: 1.4)" Minimum version of SQLAlchemy required is bumped to 1.4.23. Change-Id: I6cf5944ccb3a0532cbf123ddc0d7df6b6de80af1 Closes-Bug: #1943155 --- lower-constraints.txt | 2 +- neutron/db/migration/__init__.py | 13 +++++-------- .../2e5352a0ad4d_add_missing_foreign_keys.py | 4 ++-- ...56f5_add_unique_ha_router_agent_port_bindings.py | 2 +- .../7d9d8eeec6ad_rename_tenant_to_project.py | 3 +-- .../89ab9a816d70_rename_ml2_network_segments.py | 4 ++-- .../expand/030a959ceafa_uniq_routerports0port_id.py | 2 +- ...461a21bcfc_uniq_floatingips0floating_network_.py | 2 +- .../expand/a9c43481023c_extend_ml2_port_bindings.py | 3 +-- .../d72db3e25539_modify_uniq_port_forwarding.py | 3 +-- .../expand/d8bdf05313f4_add_in_use_to_subnet.py | 3 +-- .../ussuri/expand/f4b9654dd40c_ovn_backend.py | 3 +-- ...10820fc498_add_unique_quotas_project_resource.py | 2 +- neutron/tests/functional/db/test_migrations.py | 5 ++--- neutron/tests/unit/db/test_migration.py | 5 ++--- requirements.txt | 2 +- 16 files changed, 24 insertions(+), 34 deletions(-) diff --git a/lower-constraints.txt b/lower-constraints.txt index 7cf92a45590..881519e501e 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -117,7 +117,7 @@ simplejson==3.5.1 smmap==0.9.0 snowballstemmer==1.2.1 sqlalchemy-migrate==0.11.0 -SQLAlchemy==1.3.23 +SQLAlchemy==1.4.23 sqlparse==0.2.2 statsd==3.2.1 stestr==1.0.0 diff --git a/neutron/db/migration/__init__.py b/neutron/db/migration/__init__.py index 8de462ea1d7..41a229531ad 100644 --- a/neutron/db/migration/__init__.py +++ b/neutron/db/migration/__init__.py @@ -18,7 +18,6 @@ import functools from alembic import context from alembic import op import sqlalchemy as sa -from sqlalchemy.engine import reflection from neutron._i18n import _ @@ -84,8 +83,7 @@ def schema_has_table(table_name): This method cannot be executed in offline mode. """ - bind = op.get_bind() - insp = sa.engine.reflection.Inspector.from_engine(bind) + insp = sa.inspect(op.get_bind()) return table_name in insp.get_table_names() @@ -95,8 +93,7 @@ def schema_has_column(table_name, column_name): This method cannot be executed in offline mode. """ - bind = op.get_bind() - insp = sa.engine.reflection.Inspector.from_engine(bind) + insp = sa.inspect(op.get_bind()) # first check that the table exists if not schema_has_table(table_name): return @@ -218,7 +215,7 @@ def create_table_if_not_exist_psql(table_name, values): def get_unique_constraints_map(table): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) return { tuple(sorted(cons['column_names'])): cons['name'] for cons in inspector.get_unique_constraints(table) @@ -262,7 +259,7 @@ def create_foreign_keys(table, foreign_keys): @contextlib.contextmanager def remove_fks_from_table(table, remove_unique_constraints=False): try: - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) foreign_keys = inspector.get_foreign_keys(table) remove_foreign_keys(table, foreign_keys) if remove_unique_constraints: @@ -273,7 +270,7 @@ def remove_fks_from_table(table, remove_unique_constraints=False): def pk_on_alembic_version_table(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) pk = inspector.get_pk_constraint('alembic_version') if not pk['constrained_columns']: op.create_primary_key(op.f('pk_alembic_version'), diff --git a/neutron/db/migration/alembic_migrations/versions/liberty/contract/2e5352a0ad4d_add_missing_foreign_keys.py b/neutron/db/migration/alembic_migrations/versions/liberty/contract/2e5352a0ad4d_add_missing_foreign_keys.py index b02d5208a0d..70095eb30e0 100644 --- a/neutron/db/migration/alembic_migrations/versions/liberty/contract/2e5352a0ad4d_add_missing_foreign_keys.py +++ b/neutron/db/migration/alembic_migrations/versions/liberty/contract/2e5352a0ad4d_add_missing_foreign_keys.py @@ -14,7 +14,7 @@ # from alembic import op -from sqlalchemy.engine import reflection +import sqlalchemy from neutron.db import migration @@ -35,7 +35,7 @@ TABLE_NAME = 'flavorserviceprofilebindings' def upgrade(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sqlalchemy.inspect(op.get_bind()) fk_constraints = inspector.get_foreign_keys(TABLE_NAME) for fk in fk_constraints: fk['options']['ondelete'] = 'CASCADE' diff --git a/neutron/db/migration/alembic_migrations/versions/mitaka/expand/1df244e556f5_add_unique_ha_router_agent_port_bindings.py b/neutron/db/migration/alembic_migrations/versions/mitaka/expand/1df244e556f5_add_unique_ha_router_agent_port_bindings.py index 1fe3ee6b4e0..95596efb167 100644 --- a/neutron/db/migration/alembic_migrations/versions/mitaka/expand/1df244e556f5_add_unique_ha_router_agent_port_bindings.py +++ b/neutron/db/migration/alembic_migrations/versions/mitaka/expand/1df244e556f5_add_unique_ha_router_agent_port_bindings.py @@ -60,7 +60,7 @@ def check_sanity(connection): def get_duplicate_l3_ha_port_bindings(connection): - insp = sa.engine.reflection.Inspector.from_engine(connection) + insp = sa.inspect(connection) if 'ha_router_agent_port_bindings' not in insp.get_table_names(): return {} session = sa.orm.Session(bind=connection.connect()) diff --git a/neutron/db/migration/alembic_migrations/versions/newton/contract/7d9d8eeec6ad_rename_tenant_to_project.py b/neutron/db/migration/alembic_migrations/versions/newton/contract/7d9d8eeec6ad_rename_tenant_to_project.py index 023412c88d5..c39f60a5499 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/contract/7d9d8eeec6ad_rename_tenant_to_project.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/contract/7d9d8eeec6ad_rename_tenant_to_project.py @@ -41,8 +41,7 @@ def get_inspector(): return _INSPECTOR else: - bind = op.get_bind() - _INSPECTOR = sa.engine.reflection.Inspector.from_engine(bind) + _INSPECTOR = sa.inspect(op.get_bind()) return _INSPECTOR diff --git a/neutron/db/migration/alembic_migrations/versions/newton/contract/89ab9a816d70_rename_ml2_network_segments.py b/neutron/db/migration/alembic_migrations/versions/newton/contract/89ab9a816d70_rename_ml2_network_segments.py index e7c0d3c3168..6f4eac687ab 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/contract/89ab9a816d70_rename_ml2_network_segments.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/contract/89ab9a816d70_rename_ml2_network_segments.py @@ -11,7 +11,7 @@ # under the License. from alembic import op -from sqlalchemy.engine import reflection +import sqlalchemy """Rename ml2_network_segments table @@ -45,7 +45,7 @@ def upgrade(): def delete_foreign_key_constraint(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sqlalchemy.inspect(op.get_bind()) fk_constraints = inspector.get_foreign_keys(TABLE_NAME) for fk in fk_constraints: if fk['referred_table'] == OLD_REFERRED_TABLE_NAME: diff --git a/neutron/db/migration/alembic_migrations/versions/newton/expand/030a959ceafa_uniq_routerports0port_id.py b/neutron/db/migration/alembic_migrations/versions/newton/expand/030a959ceafa_uniq_routerports0port_id.py index 427abfe28c6..332c6498544 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/expand/030a959ceafa_uniq_routerports0port_id.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/expand/030a959ceafa_uniq_routerports0port_id.py @@ -58,7 +58,7 @@ def check_sanity(connection): def get_duplicate_port_records_in_routerport_database(connection): - insp = sa.engine.reflection.Inspector.from_engine(connection) + insp = sa.inspect(connection) if 'routerports' not in insp.get_table_names(): return [] session = sa.orm.Session(bind=connection.connect()) diff --git a/neutron/db/migration/alembic_migrations/versions/newton/expand/6b461a21bcfc_uniq_floatingips0floating_network_.py b/neutron/db/migration/alembic_migrations/versions/newton/expand/6b461a21bcfc_uniq_floatingips0floating_network_.py index e9990b23870..ec789b42bbe 100644 --- a/neutron/db/migration/alembic_migrations/versions/newton/expand/6b461a21bcfc_uniq_floatingips0floating_network_.py +++ b/neutron/db/migration/alembic_migrations/versions/newton/expand/6b461a21bcfc_uniq_floatingips0floating_network_.py @@ -60,7 +60,7 @@ def check_sanity(connection): def get_duplicate_floating_ip_for_one_fixed_ip(connection): - insp = sa.engine.reflection.Inspector.from_engine(connection) + insp = sa.inspect(connection) if 'floatingips' not in insp.get_table_names(): return [] session = sa.orm.Session(bind=connection.connect()) diff --git a/neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py b/neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py index 227809184fa..feb9236b856 100644 --- a/neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py +++ b/neutron/db/migration/alembic_migrations/versions/ocata/expand/a9c43481023c_extend_ml2_port_bindings.py @@ -16,7 +16,6 @@ from alembic import op from neutron_lib import constants import sqlalchemy as sa -from sqlalchemy.engine.reflection import Inspector as insp from neutron.db import migration @@ -51,7 +50,7 @@ def upgrade(): op.execute("ALTER TABLE ml2_port_bindings DROP PRIMARY KEY," "ADD PRIMARY KEY(port_id, host);") else: - inspector = insp.from_engine(bind) + inspector = sa.inspect(bind) pk_constraint = inspector.get_pk_constraint(ML2_PORT_BINDING) op.drop_constraint(pk_constraint.get('name'), ML2_PORT_BINDING, type_='primary') diff --git a/neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_port_forwarding.py b/neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_port_forwarding.py index 470a69bbbca..03b5387d97f 100644 --- a/neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_port_forwarding.py +++ b/neutron/db/migration/alembic_migrations/versions/stein/expand/d72db3e25539_modify_uniq_port_forwarding.py @@ -23,7 +23,6 @@ Create Date: 2018-10-12 19:51:11.981394 from alembic import op import sqlalchemy as sa -from sqlalchemy.engine import reflection from neutron.db import migration @@ -35,7 +34,7 @@ TABLE_NAME = 'portforwardings' def upgrade(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) foreign_keys = inspector.get_foreign_keys(TABLE_NAME) migration.remove_foreign_keys(TABLE_NAME, foreign_keys) diff --git a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/d8bdf05313f4_add_in_use_to_subnet.py b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/d8bdf05313f4_add_in_use_to_subnet.py index 0838f9ab02e..dd4f8815afc 100644 --- a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/d8bdf05313f4_add_in_use_to_subnet.py +++ b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/d8bdf05313f4_add_in_use_to_subnet.py @@ -15,7 +15,6 @@ from alembic import op import sqlalchemy as sa -from sqlalchemy.engine import reflection from neutron.db import migration @@ -40,7 +39,7 @@ COLUMN_IN_USE = 'in_use' def upgrade(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) # NOTE(ralonsoh): bug #1865891 is present in stable releases. Although is # not possible to backport a patch implementing a DB change [1], we are # planning to migrate this patch to a stable branch in a private diff --git a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/f4b9654dd40c_ovn_backend.py b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/f4b9654dd40c_ovn_backend.py index 57e5761f03e..3397a07e39a 100644 --- a/neutron/db/migration/alembic_migrations/versions/ussuri/expand/f4b9654dd40c_ovn_backend.py +++ b/neutron/db/migration/alembic_migrations/versions/ussuri/expand/f4b9654dd40c_ovn_backend.py @@ -15,7 +15,6 @@ from alembic import op import sqlalchemy as sa -from sqlalchemy.engine import reflection """ovn backend @@ -35,7 +34,7 @@ OVN_HASH_RING = 'ovn_hash_ring' def upgrade(): - inspector = reflection.Inspector.from_engine(op.get_bind()) + inspector = sa.inspect(op.get_bind()) table_names = inspector.get_table_names() if OVN_REVISION_NUMBERS in table_names and OVN_HASH_RING in table_names: op.alter_column(OVN_REVISION_NUMBERS, 'revision_number', diff --git a/neutron/db/migration/alembic_migrations/versions/wallaby/expand/f010820fc498_add_unique_quotas_project_resource.py b/neutron/db/migration/alembic_migrations/versions/wallaby/expand/f010820fc498_add_unique_quotas_project_resource.py index 58db62a134e..71af3451a61 100644 --- a/neutron/db/migration/alembic_migrations/versions/wallaby/expand/f010820fc498_add_unique_quotas_project_resource.py +++ b/neutron/db/migration/alembic_migrations/versions/wallaby/expand/f010820fc498_add_unique_quotas_project_resource.py @@ -47,7 +47,7 @@ class DuplicateQuotas(exceptions.Conflict): def get_duplicate_quotas(connection): - insp = sa.engine.reflection.Inspector.from_engine(connection) + insp = sa.inspect(connection) if 'quotas' not in insp.get_table_names(): return [] session = sa.orm.Session(bind=connection.connect()) diff --git a/neutron/tests/functional/db/test_migrations.py b/neutron/tests/functional/db/test_migrations.py index 206b4dc3c09..e5a311e5a5a 100644 --- a/neutron/tests/functional/db/test_migrations.py +++ b/neutron/tests/functional/db/test_migrations.py @@ -175,8 +175,7 @@ class _TestModelsMigrations(test_migrations.ModelsMigrationsSync): # Remove some difference that are not mistakes just specific of # dialects, etc def remove_unrelated_errors(self, element): - insp = sqlalchemy.engine.reflection.Inspector.from_engine( - self.get_engine()) + insp = sqlalchemy.inspect(self.get_engine()) dialect = self.get_engine().dialect.name if isinstance(element, tuple): if dialect == 'mysql' and element[0] == 'remove_index': @@ -351,7 +350,7 @@ class TestModelsMigrationsMysql(testlib_api.MySQLTestCaseMixin, self.alembic_config.attributes['connection'] = connection migration.do_alembic_command(self.alembic_config, 'upgrade', 'heads') - insp = sqlalchemy.engine.reflection.Inspector.from_engine(engine) + insp = sqlalchemy.inspect(engine) # Test that table creation on MySQL only builds InnoDB tables tables = insp.get_table_names() self.assertGreater(len(tables), 0, diff --git a/neutron/tests/unit/db/test_migration.py b/neutron/tests/unit/db/test_migration.py index 76ce43d0540..581a8c412fb 100644 --- a/neutron/tests/unit/db/test_migration.py +++ b/neutron/tests/unit/db/test_migration.py @@ -81,15 +81,14 @@ class TestDbMigration(base.BaseTestCase): self.mock_alembic_is_offline = mock.patch( 'alembic.context.is_offline_mode', return_value=False).start() self.mock_alembic_is_offline.return_value = False - self.mock_sa_inspector = mock.patch( - 'sqlalchemy.engine.reflection.Inspector').start() + self.mock_sa_inspector = mock.patch('sqlalchemy.inspect').start() def _prepare_mocked_sqlalchemy_inspector(self): mock_inspector = mock.MagicMock() mock_inspector.get_table_names.return_value = ['foo', 'bar'] mock_inspector.get_columns.return_value = [{'name': 'foo_column'}, {'name': 'bar_column'}] - self.mock_sa_inspector.from_engine.return_value = mock_inspector + self.mock_sa_inspector.return_value = mock_inspector def test_schema_has_table(self): self._prepare_mocked_sqlalchemy_inspector() diff --git a/requirements.txt b/requirements.txt index bb43eb04ec8..69db24152a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,7 +19,7 @@ netifaces>=0.10.4 # MIT neutron-lib>=2.15.0 # Apache-2.0 python-neutronclient>=6.7.0 # Apache-2.0 tenacity>=6.0.0 # Apache-2.0 -SQLAlchemy>=1.3.23 # MIT +SQLAlchemy>=1.4.23 # MIT WebOb>=1.8.2 # MIT keystoneauth1>=3.14.0 # Apache-2.0 alembic>=1.6.5 # MIT