From: Johannes Erdfelt Date: Thu, 15 Jan 2015 15:37:20 +0000 (-0800) Subject: Raise exception if autogenerate is tried with as_sql=True X-Git-Tag: rel_0_7_5~2^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9e246542f53c6f470054a90585421ac725690bd7;p=thirdparty%2Fsqlalchemy%2Falembic.git Raise exception if autogenerate is tried with as_sql=True This configuration is nonsensical since autogenerate needs to query the database for schema information. Fixes issue #266 --- diff --git a/alembic/autogenerate/api.py b/alembic/autogenerate/api.py index cc5debe8..18a44a8d 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 a458fafe..1eeeb917 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'