From: Mike Bayer Date: Tue, 28 Jan 2014 17:31:08 +0000 (-0500) Subject: - changelog X-Git-Tag: rel_0_6_3~10 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eb5c4ca10e6b47b07ecd2961443b0ca578f8f04b;p=thirdparty%2Fsqlalchemy%2Falembic.git - changelog - reorg tests a bit - add test coverage for "include_schemas" in compare_metadata --- diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 508f293d..6140db72 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -5,6 +5,18 @@ Changelog .. changelog:: :version: 0.6.3 + .. change:: + :tags: bug + :pullreq: github:9 + + The :func:`.compare_metadata` public API function now takes into + account the settings for + :paramref:`.EnvironmentContext.configure.include_object`, + :paramref:`.EnvironmentContext.configure.include_symbol`, + and :paramref:`.EnvironmentContext.configure.include_schemas`, in the + same way that the ``--autogenerate`` command does. Pull + request courtesy Roman Podoliaka. + .. change:: :tags: bug :tickets: 168 diff --git a/tests/test_autogenerate.py b/tests/test_autogenerate.py index eb04d37b..49afbcb6 100644 --- a/tests/test_autogenerate.py +++ b/tests/test_autogenerate.py @@ -299,122 +299,6 @@ class AutogenerateDiffTest(ModelOne, AutogenTest, TestCase): eq_(diffs[7][0][5], True) eq_(diffs[7][0][6], False) - def test_compare_metadata(self): - metadata = self.m2 - connection = self.context.bind - - diffs = autogenerate.compare_metadata(self.context, metadata) - - eq_( - diffs[0], - ('add_table', metadata.tables['item']) - ) - - eq_(diffs[1][0], 'remove_table') - eq_(diffs[1][1].name, "extra") - - eq_(diffs[2][0], "add_column") - eq_(diffs[2][1], None) - eq_(diffs[2][2], "address") - eq_(diffs[2][3], metadata.tables['address'].c.street) - - eq_(diffs[3][0], "add_column") - eq_(diffs[3][1], None) - eq_(diffs[3][2], "order") - eq_(diffs[3][3], metadata.tables['order'].c.user_id) - - eq_(diffs[4][0][0], "modify_type") - eq_(diffs[4][0][1], None) - eq_(diffs[4][0][2], "order") - eq_(diffs[4][0][3], "amount") - eq_(repr(diffs[4][0][5]), "NUMERIC(precision=8, scale=2)") - eq_(repr(diffs[4][0][6]), "Numeric(precision=10, scale=2)") - - eq_(diffs[5][0], 'remove_column') - eq_(diffs[5][3].name, 'pw') - - eq_(diffs[6][0][0], "modify_default") - eq_(diffs[6][0][1], None) - eq_(diffs[6][0][2], "user") - eq_(diffs[6][0][3], "a1") - eq_(diffs[6][0][6].arg, "x") - - eq_(diffs[7][0][0], 'modify_nullable') - eq_(diffs[7][0][5], True) - eq_(diffs[7][0][6], False) - - def test_compare_metadata_include_object(self): - metadata = self.m2 - - def include_object(obj, name, type_, reflected, compare_to): - if type_ == "table": - return name in ("extra", "order") - elif type_ == "column": - return name != "amount" - else: - return True - - context = MigrationContext.configure( - connection=self.bind.connect(), - opts={ - 'compare_type': True, - 'compare_server_default': True, - 'target_metadata': self.m1, - 'upgrade_token': "upgrades", - 'downgrade_token': "downgrades", - 'include_object': include_object, - } - ) - - diffs = autogenerate.compare_metadata(context, metadata) - - eq_(diffs[0][0], 'remove_table') - eq_(diffs[0][1].name, "extra") - - eq_(diffs[1][0], "add_column") - eq_(diffs[1][1], None) - eq_(diffs[1][2], "order") - eq_(diffs[1][3], metadata.tables['order'].c.user_id) - - def test_compare_metadata_include_symbol(self): - metadata = self.m2 - - def include_symbol(table_name, schema_name): - return table_name in ('extra', 'order') - - context = MigrationContext.configure( - connection=self.bind.connect(), - opts={ - 'compare_type': True, - 'compare_server_default': True, - 'target_metadata': self.m1, - 'upgrade_token': "upgrades", - 'downgrade_token': "downgrades", - 'include_symbol': include_symbol, - } - ) - - diffs = autogenerate.compare_metadata(context, metadata) - - eq_(diffs[0][0], 'remove_table') - eq_(diffs[0][1].name, "extra") - - eq_(diffs[1][0], "add_column") - eq_(diffs[1][1], None) - eq_(diffs[1][2], "order") - eq_(diffs[1][3], metadata.tables['order'].c.user_id) - - eq_(diffs[2][0][0], "modify_type") - eq_(diffs[2][0][1], None) - eq_(diffs[2][0][2], "order") - eq_(diffs[2][0][3], "amount") - eq_(repr(diffs[2][0][5]), "NUMERIC(precision=8, scale=2)") - eq_(repr(diffs[2][0][6]), "Numeric(precision=10, scale=2)") - - eq_(diffs[2][1][0], 'modify_nullable') - eq_(diffs[2][1][2], 'order') - eq_(diffs[2][1][5], False) - eq_(diffs[2][1][6], True) def test_render_nothing(self): context = MigrationContext.configure( @@ -1348,3 +1232,156 @@ class AutogenerateDiffOrderTest(AutogenTest, TestCase): eq_(diffs[1][0], 'add_table') eq_(diffs[1][1].name, "child") + +class CompareMetadataTest(ModelOne, AutogenTest, TestCase): + def test_compare_metadata(self): + metadata = self.m2 + + diffs = autogenerate.compare_metadata(self.context, metadata) + + eq_( + diffs[0], + ('add_table', metadata.tables['item']) + ) + + eq_(diffs[1][0], 'remove_table') + eq_(diffs[1][1].name, "extra") + + eq_(diffs[2][0], "add_column") + eq_(diffs[2][1], None) + eq_(diffs[2][2], "address") + eq_(diffs[2][3], metadata.tables['address'].c.street) + + eq_(diffs[3][0], "add_column") + eq_(diffs[3][1], None) + eq_(diffs[3][2], "order") + eq_(diffs[3][3], metadata.tables['order'].c.user_id) + + eq_(diffs[4][0][0], "modify_type") + eq_(diffs[4][0][1], None) + eq_(diffs[4][0][2], "order") + eq_(diffs[4][0][3], "amount") + eq_(repr(diffs[4][0][5]), "NUMERIC(precision=8, scale=2)") + eq_(repr(diffs[4][0][6]), "Numeric(precision=10, scale=2)") + + eq_(diffs[5][0], 'remove_column') + eq_(diffs[5][3].name, 'pw') + + eq_(diffs[6][0][0], "modify_default") + eq_(diffs[6][0][1], None) + eq_(diffs[6][0][2], "user") + eq_(diffs[6][0][3], "a1") + eq_(diffs[6][0][6].arg, "x") + + eq_(diffs[7][0][0], 'modify_nullable') + eq_(diffs[7][0][5], True) + eq_(diffs[7][0][6], False) + + def test_compare_metadata_include_object(self): + metadata = self.m2 + + def include_object(obj, name, type_, reflected, compare_to): + if type_ == "table": + return name in ("extra", "order") + elif type_ == "column": + return name != "amount" + else: + return True + + context = MigrationContext.configure( + connection=self.bind.connect(), + opts={ + 'compare_type': True, + 'compare_server_default': True, + 'include_object': include_object, + } + ) + + diffs = autogenerate.compare_metadata(context, metadata) + + eq_(diffs[0][0], 'remove_table') + eq_(diffs[0][1].name, "extra") + + eq_(diffs[1][0], "add_column") + eq_(diffs[1][1], None) + eq_(diffs[1][2], "order") + eq_(diffs[1][3], metadata.tables['order'].c.user_id) + + def test_compare_metadata_include_symbol(self): + metadata = self.m2 + + def include_symbol(table_name, schema_name): + return table_name in ('extra', 'order') + + context = MigrationContext.configure( + connection=self.bind.connect(), + opts={ + 'compare_type': True, + 'compare_server_default': True, + 'include_symbol': include_symbol, + } + ) + + diffs = autogenerate.compare_metadata(context, metadata) + + eq_(diffs[0][0], 'remove_table') + eq_(diffs[0][1].name, "extra") + + eq_(diffs[1][0], "add_column") + eq_(diffs[1][1], None) + eq_(diffs[1][2], "order") + eq_(diffs[1][3], metadata.tables['order'].c.user_id) + + eq_(diffs[2][0][0], "modify_type") + eq_(diffs[2][0][1], None) + eq_(diffs[2][0][2], "order") + eq_(diffs[2][0][3], "amount") + eq_(repr(diffs[2][0][5]), "NUMERIC(precision=8, scale=2)") + eq_(repr(diffs[2][0][6]), "Numeric(precision=10, scale=2)") + + eq_(diffs[2][1][0], 'modify_nullable') + eq_(diffs[2][1][2], 'order') + eq_(diffs[2][1][5], False) + eq_(diffs[2][1][6], True) + +class PGCompareMetaData(ModelOne, AutogenTest, TestCase): + schema = "test_schema" + + @classmethod + def _get_bind(cls): + return db_for_dialect('postgresql') + + def test_compare_metadata_schema(self): + metadata = self.m2 + + context = MigrationContext.configure( + connection=self.bind.connect(), + opts={ + "include_schemas": True + } + ) + + diffs = autogenerate.compare_metadata(context, metadata) + + eq_( + diffs[0], + ('add_table', metadata.tables['test_schema.item']) + ) + + eq_(diffs[1][0], 'remove_table') + eq_(diffs[1][1].name, "extra") + + eq_(diffs[2][0], "add_column") + eq_(diffs[2][1], "test_schema") + eq_(diffs[2][2], "address") + eq_(diffs[2][3], metadata.tables['test_schema.address'].c.street) + + eq_(diffs[3][0], "add_column") + eq_(diffs[3][1], "test_schema") + eq_(diffs[3][2], "order") + eq_(diffs[3][3], metadata.tables['test_schema.order'].c.user_id) + + eq_(diffs[4][0][0], 'modify_nullable') + eq_(diffs[4][0][5], False) + eq_(diffs[4][0][6], True) +