diff options
author | Johannes Erdfelt <johannes@erdfelt.com> | 2015-01-15 07:37:20 -0800 |
---|---|---|
committer | Johannes Erdfelt <johannes@erdfelt.com> | 2015-02-23 11:08:43 -0800 |
commit | 9e246542f53c6f470054a90585421ac725690bd7 (patch) | |
tree | 3bb454d484e2c1356bbd602e367a90b2b87bd2f8 | |
parent | 2108076362cc76130ae61e14c7a0120a1f0a59c8 (diff) | |
download | alembic-9e246542f53c6f470054a90585421ac725690bd7.tar.gz |
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
-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' |