diff options
-rw-r--r-- | alembic/autogenerate/api.py | 7 | ||||
-rw-r--r-- | tests/test_autogenerate.py | 15 |
2 files changed, 22 insertions, 0 deletions
diff --git a/alembic/autogenerate/api.py b/alembic/autogenerate/api.py index cc5debe..18a44a8 100644 --- a/alembic/autogenerate/api.py +++ b/alembic/autogenerate/api.py @@ -106,6 +106,13 @@ def compare_metadata(context, metadata): instance. """ + # as_sql=True is nonsensical here. autogenerate requires a connection + # it can use to run queries against to get the database schema. + if context.opts.get('as_sql', False) is True: + raise util.CommandError( + "autogenerate can't use as_sql=True as it prevents querying " + "the database for schema information") + autogen_context, connection = _autogen_context(context, None) diffs = [] diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index a458faf..1eeeb91 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -15,6 +15,7 @@ from alembic.testing.mock import Mock from alembic.testing.env import staging_env, clear_staging_env from alembic.testing import eq_ from alembic.ddl.base import _fk_spec +from alembic.util import CommandError py3k = sys.version_info >= (3, ) @@ -1350,6 +1351,20 @@ class CompareMetadataTest(ModelOne, AutogenTest, TestBase): eq_(diffs[2][1][5], False) eq_(diffs[2][1][6], True) + def test_compare_metadata_as_sql(self): + context = MigrationContext.configure( + connection=self.bind.connect(), + opts={'as_sql': True} + ) + metadata = self.m2 + + try: + autogenerate.compare_metadata(context, metadata) + except CommandError: + pass + else: + assert False, "unexpected success" + class PGCompareMetaData(ModelOne, AutogenTest, TestBase): __only_on__ = 'postgresql' |