]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
- changelog
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 28 Jan 2014 17:31:08 +0000 (12:31 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 28 Jan 2014 17:31:08 +0000 (12:31 -0500)
- reorg tests a bit
- add test coverage for "include_schemas" in compare_metadata

docs/build/changelog.rst
tests/test_autogenerate.py

index 508f293d708c9c18f825a341fad8fe01698440c9..6140db7278ac14384de0f72e20b45d7ab88d8069 100644 (file)
@@ -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
index eb04d37b1e1ee2728fe6fdd8e7f56809684e6260..49afbcb677442090636fcf2835555673f932aba1 100644 (file)
@@ -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)
+