From: Mike Bayer Date: Mon, 3 Feb 2020 17:20:10 +0000 (-0500) Subject: Use inspect(), not Inspector.from_engine() X-Git-Tag: rel_1_4_0~4^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=57dc69601d33e07c488d95d9efed7a40efa16854;p=thirdparty%2Fsqlalchemy%2Falembic.git Use inspect(), not Inspector.from_engine() The internal inspection routines no longer use SQLAlchemy's ``Inspector.from_engine()`` method, which is expected to be deprecated in 1.4. The ``inspect()`` function is now used. Change-Id: I81ea16e5d750d8c48d8db1a5098815988ea60f6c --- diff --git a/alembic/autogenerate/api.py b/alembic/autogenerate/api.py index db929d07..2902f80a 100644 --- a/alembic/autogenerate/api.py +++ b/alembic/autogenerate/api.py @@ -3,7 +3,7 @@ automatically.""" import contextlib -from sqlalchemy.engine.reflection import Inspector +from sqlalchemy import inspect from . import compare from . import render @@ -316,7 +316,7 @@ class AutogenContext(object): @util.memoized_property def inspector(self): - return Inspector.from_engine(self.connection) + return inspect(self.connection) @contextlib.contextmanager def _within_batch(self): diff --git a/alembic/autogenerate/compare.py b/alembic/autogenerate/compare.py index 92df3fc5..8429b661 100644 --- a/alembic/autogenerate/compare.py +++ b/alembic/autogenerate/compare.py @@ -3,9 +3,9 @@ import logging import re from sqlalchemy import event +from sqlalchemy import inspect from sqlalchemy import schema as sa_schema from sqlalchemy import types as sqltypes -from sqlalchemy.engine.reflection import Inspector from sqlalchemy.util import OrderedSet from alembic.ddl.base import _fk_spec @@ -34,7 +34,7 @@ def _produce_net_changes(autogen_context, upgrade_ops): connection = autogen_context.connection include_schemas = autogen_context.opts.get("include_schemas", False) - inspector = Inspector.from_engine(connection) + inspector = inspect(connection) default_schema = connection.dialect.default_schema_name if include_schemas: diff --git a/docs/build/unreleased/inspect.rst b/docs/build/unreleased/inspect.rst new file mode 100644 index 00000000..8f601fbc --- /dev/null +++ b/docs/build/unreleased/inspect.rst @@ -0,0 +1,7 @@ +.. change:: + :tags: change + + The internal inspection routines no longer use SQLAlchemy's + ``Inspector.from_engine()`` method, which is expected to be deprecated in + 1.4. The ``inspect()`` function is now used. + diff --git a/tests/_autogen_fixtures.py b/tests/_autogen_fixtures.py index 0f3a6cf4..29169627 100644 --- a/tests/_autogen_fixtures.py +++ b/tests/_autogen_fixtures.py @@ -4,6 +4,7 @@ from sqlalchemy import Column from sqlalchemy import event from sqlalchemy import ForeignKey from sqlalchemy import Index +from sqlalchemy import inspect from sqlalchemy import Integer from sqlalchemy import MetaData from sqlalchemy import Numeric @@ -12,7 +13,6 @@ from sqlalchemy import Table from sqlalchemy import Text from sqlalchemy import text from sqlalchemy import UniqueConstraint -from sqlalchemy.engine.reflection import Inspector from alembic import autogenerate from alembic import util @@ -187,9 +187,7 @@ class _ComparesFKs(object): eq_([elem.column.name for elem in diff[1].elements], target_columns) if conditional_name is not None: if conditional_name == "servergenerated": - fks = Inspector.from_engine(self.bind).get_foreign_keys( - source_table - ) + fks = inspect(self.bind).get_foreign_keys(source_table) server_fk_name = fks[0]["name"] eq_(diff[1].name, server_fk_name) else: diff --git a/tests/test_autogen_diffs.py b/tests/test_autogen_diffs.py index ca818e6d..470aaaf6 100644 --- a/tests/test_autogen_diffs.py +++ b/tests/test_autogen_diffs.py @@ -10,6 +10,7 @@ from sqlalchemy import DECIMAL from sqlalchemy import ForeignKey from sqlalchemy import ForeignKeyConstraint from sqlalchemy import Index +from sqlalchemy import inspect from sqlalchemy import INTEGER from sqlalchemy import Integer from sqlalchemy import MetaData @@ -24,7 +25,6 @@ from sqlalchemy import TypeDecorator from sqlalchemy import UniqueConstraint from sqlalchemy import VARCHAR from sqlalchemy.dialects import sqlite -from sqlalchemy.engine.reflection import Inspector from sqlalchemy.types import NULLTYPE from sqlalchemy.types import VARBINARY @@ -546,7 +546,7 @@ class AutogenerateDiffTest(ModelOne, AutogenTest, TestBase): def test_dont_barf_on_already_reflected(self): from sqlalchemy.util import OrderedSet - inspector = Inspector.from_engine(self.bind) + inspector = inspect(self.bind) uo = ops.UpgradeOps(ops=[]) autogenerate.compare._compare_tables( OrderedSet([(None, "extra"), (None, "user")]), diff --git a/tests/test_batch.py b/tests/test_batch.py index 1d768416..a344d0c4 100644 --- a/tests/test_batch.py +++ b/tests/test_batch.py @@ -11,13 +11,13 @@ from sqlalchemy import ForeignKey from sqlalchemy import ForeignKeyConstraint from sqlalchemy import func from sqlalchemy import Index +from sqlalchemy import inspect from sqlalchemy import Integer from sqlalchemy import MetaData from sqlalchemy import PrimaryKeyConstraint from sqlalchemy import String from sqlalchemy import Table from sqlalchemy import UniqueConstraint -from sqlalchemy.engine.reflection import Inspector from sqlalchemy.schema import CreateIndex from sqlalchemy.schema import CreateTable from sqlalchemy.sql import column @@ -1153,7 +1153,7 @@ class BatchRoundTripTest(TestBase): type_=Integer, existing_type=Boolean(create_constraint=True, name="ck1"), ) - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) eq_( [ @@ -1202,7 +1202,7 @@ class BatchRoundTripTest(TestBase): self._boolean_fixture() with self.op.batch_alter_table("hasbool") as batch_op: batch_op.drop_column("x") - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) assert "x" not in (c["name"] for c in insp.get_columns("hasbool")) @@ -1212,7 +1212,7 @@ class BatchRoundTripTest(TestBase): batch_op.alter_column( "x", type_=Boolean(create_constraint=True, name="ck1") ) - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) if exclusions.against(config, "sqlite"): eq_( @@ -1253,7 +1253,7 @@ class BatchRoundTripTest(TestBase): batch_op.alter_column("data", type_=String(30)) batch_op.create_index("ix_data", ["data"]) - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) eq_( set( (ix["name"], tuple(ix["column_names"])) @@ -1297,7 +1297,7 @@ class BatchRoundTripTest(TestBase): "data", new_column_name="newdata", existing_type=String(50) ) - insp = Inspector.from_engine(self.conn) + insp = inspect(self.conn) eq_( [ ( @@ -1344,9 +1344,8 @@ class BatchRoundTripTest(TestBase): "data", new_column_name="newdata", existing_type=String(50) ) - insp = Inspector.from_engine(self.conn) + insp = inspect(self.conn) - insp = Inspector.from_engine(self.conn) eq_( [ ( @@ -1394,7 +1393,7 @@ class BatchRoundTripTest(TestBase): batch_op.drop_column("id") batch_op.add_column(Column("id", Integer)) - pk_const = Inspector.from_engine(self.conn).get_pk_constraint("foo") + pk_const = inspect(self.conn).get_pk_constraint("foo") eq_(pk_const["constrained_columns"], []) def test_drop_pk_col_readd_pk_col(self): @@ -1403,7 +1402,7 @@ class BatchRoundTripTest(TestBase): batch_op.drop_column("id") batch_op.add_column(Column("id", Integer, primary_key=True)) - pk_const = Inspector.from_engine(self.conn).get_pk_constraint("foo") + pk_const = inspect(self.conn).get_pk_constraint("foo") eq_(pk_const["constrained_columns"], ["id"]) def test_drop_pk_col_readd_col_also_pk_const(self): @@ -1414,7 +1413,7 @@ class BatchRoundTripTest(TestBase): batch_op.add_column(Column("id", Integer)) batch_op.create_primary_key("newpk", ["id"]) - pk_const = Inspector.from_engine(self.conn).get_pk_constraint("foo") + pk_const = inspect(self.conn).get_pk_constraint("foo") eq_(pk_const["constrained_columns"], ["id"]) def test_add_pk_constraint(self): @@ -1422,7 +1421,7 @@ class BatchRoundTripTest(TestBase): with self.op.batch_alter_table("nopk", recreate="always") as batch_op: batch_op.create_primary_key("newpk", ["a", "b"]) - pk_const = Inspector.from_engine(self.conn).get_pk_constraint("nopk") + pk_const = inspect(self.conn).get_pk_constraint("nopk") with config.requirements.reflects_pk_names.fail_if(): eq_(pk_const["name"], "newpk") eq_(pk_const["constrained_columns"], ["a", "b"]) @@ -1463,7 +1462,7 @@ class BatchRoundTripTest(TestBase): "bar", naming_convention=naming_convention ) as batch_op: batch_op.drop_constraint("fk_bar_foo_id_foo", type_="foreignkey") - eq_(Inspector.from_engine(self.conn).get_foreign_keys("bar"), []) + eq_(inspect(self.conn).get_foreign_keys("bar"), []) def test_drop_column_fk_recreate(self): with self.op.batch_alter_table("foo", recreate="always") as batch_op: @@ -1612,7 +1611,7 @@ class BatchRoundTripTest(TestBase): ) def test_create_drop_index(self): - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) eq_(insp.get_indexes("foo"), []) with self.op.batch_alter_table("foo", recreate="always") as batch_op: @@ -1628,7 +1627,7 @@ class BatchRoundTripTest(TestBase): ] ) - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) eq_( [ dict( @@ -1644,7 +1643,7 @@ class BatchRoundTripTest(TestBase): with self.op.batch_alter_table("foo", recreate="always") as batch_op: batch_op.drop_index("ix_data") - insp = Inspector.from_engine(config.db) + insp = inspect(config.db) eq_(insp.get_indexes("foo"), []) diff --git a/tests/test_script_production.py b/tests/test_script_production.py index aca16a3f..60335120 100644 --- a/tests/test_script_production.py +++ b/tests/test_script_production.py @@ -4,7 +4,7 @@ import re from dateutil import tz import sqlalchemy as sa -from sqlalchemy.engine.reflection import Inspector +from sqlalchemy import inspect from alembic import autogenerate from alembic import command @@ -555,10 +555,7 @@ def downgrade(): with self._env_fixture(process_revision_directives, m): command.upgrade(self.cfg, "heads") - eq_( - Inspector.from_engine(self.engine).get_table_names(), - ["alembic_version"], - ) + eq_(inspect(self.engine).get_table_names(), ["alembic_version"]) command.revision( self.cfg, message="some message", autogenerate=True @@ -567,16 +564,13 @@ def downgrade(): command.upgrade(self.cfg, "model1@head") eq_( - Inspector.from_engine(self.engine).get_table_names(), + inspect(self.engine).get_table_names(), ["alembic_version", "t"], ) command.upgrade(self.cfg, "model2@head") - eq_( - Inspector.from_engine(self.engine).get_table_names(), - ["alembic_version"], - ) + eq_(inspect(self.engine).get_table_names(), ["alembic_version"]) def test_programmatic_command_option(self): def process_revision_directives(context, rev, generate_revisions): diff --git a/tests/test_sqlite.py b/tests/test_sqlite.py index ef87c8de..76bf65d7 100644 --- a/tests/test_sqlite.py +++ b/tests/test_sqlite.py @@ -3,12 +3,12 @@ from sqlalchemy import Column from sqlalchemy import DateTime from sqlalchemy import Float from sqlalchemy import func +from sqlalchemy import inspect from sqlalchemy import Integer from sqlalchemy import MetaData from sqlalchemy import String from sqlalchemy import Table from sqlalchemy import text -from sqlalchemy.engine.reflection import Inspector from sqlalchemy.sql import column from alembic import autogenerate @@ -130,7 +130,7 @@ class SQLiteDefaultCompareTest(TestBase): t1.create(self.bind) - insp = Inspector.from_engine(self.bind) + insp = inspect(self.bind) cols = insp.get_columns(t1.name) insp_col = Column( "somecol", cols[0]["type"], server_default=text(cols[0]["default"]) @@ -151,7 +151,7 @@ class SQLiteDefaultCompareTest(TestBase): def _compare_default(self, t1, t2, col, rendered): t1.create(self.bind, checkfirst=True) - insp = Inspector.from_engine(self.bind) + insp = inspect(self.bind) cols = insp.get_columns(t1.name) ctx = self.autogen_context.migration_context diff --git a/tests/test_version_table.py b/tests/test_version_table.py index b2e4acdb..34bdfabf 100644 --- a/tests/test_version_table.py +++ b/tests/test_version_table.py @@ -1,8 +1,8 @@ from sqlalchemy import Column +from sqlalchemy import inspect from sqlalchemy import MetaData from sqlalchemy import String from sqlalchemy import Table -from sqlalchemy.engine.reflection import Inspector from alembic import migration from alembic.testing import assert_raises @@ -88,7 +88,7 @@ class TestMigrationContext(TestBase): connection=self.connection, opts={"version_table": "version_table"} ) eq_(context.get_current_revision(), None) - insp = Inspector(self.connection) + insp = inspect(self.connection) assert "version_table" not in insp.get_table_names() def test_get_current_revision(self): @@ -155,8 +155,7 @@ class TestMigrationContext(TestBase): def test_stamp_api_creates_table(self): context = self.make_one(connection=self.connection) assert ( - "alembic_version" - not in Inspector(self.connection).get_table_names() + "alembic_version" not in inspect(self.connection).get_table_names() ) script = mock.Mock( @@ -168,9 +167,7 @@ class TestMigrationContext(TestBase): context.stamp(script, "b") eq_(context.get_current_heads(), ("a", "b")) - assert ( - "alembic_version" in Inspector(self.connection).get_table_names() - ) + assert "alembic_version" in inspect(self.connection).get_table_names() class UpdateRevTest(TestBase):