]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- convert @provide_metadata to use self access
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Mar 2011 01:40:05 +0000 (21:40 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 27 Mar 2011 01:40:05 +0000 (21:40 -0400)
- having occasional issues with BasicEntity grabbing, if it persists
may have to pass an explicit base class into setup_classes()/setup_mappers()

16 files changed:
test/dialect/test_firebird.py
test/dialect/test_mssql.py
test/dialect/test_oracle.py
test/dialect/test_postgresql.py
test/dialect/test_sqlite.py
test/engine/_base.py
test/engine/test_execute.py
test/engine/test_reflection.py
test/lib/engines.py
test/lib/testing.py
test/orm/_fixtures.py
test/orm/test_mapper.py
test/orm/test_query.py
test/sql/test_defaults.py
test/sql/test_metadata.py
test/sql/test_types.py

index c1b4c590caada7effbcaae31cd74324f8401bc86..430b85d181fcb51201c8190839b51abadc38043c 100644 (file)
@@ -324,6 +324,7 @@ class TypesTest(TestBase):
 
     @testing.provide_metadata
     def test_infinite_float(self):
+        metadata = self.metadata
         t = Table('t', metadata, 
             Column('data', Float)
         )
@@ -339,6 +340,7 @@ class MiscTest(TestBase):
 
     @testing.provide_metadata
     def test_strlen(self):
+        metadata = self.metadata
 
         # On FB the length() function is implemented by an external UDF,
         # strlen().  Various SA tests fail because they pass a parameter
@@ -370,6 +372,7 @@ class MiscTest(TestBase):
 
     @testing.provide_metadata
     def test_rowcount_flag(self):
+        metadata = self.metadata
         engine = engines.testing_engine(options={'enable_rowcount'
                 : True})
         assert engine.dialect.supports_sane_rowcount
index 789805074834a8c3672b51fd1dcddf14cc6978bf..3e3690c1237b0ecb5be6fa3c9d4457836681a65f 100644 (file)
@@ -485,6 +485,7 @@ class ReflectionTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_identity(self):
+        metadata = self.metadata
         table = Table(
             'identity_test', metadata,
             Column('col1', Integer, Sequence('fred', 2, 3), primary_key=True)
@@ -501,6 +502,7 @@ class ReflectionTest(TestBase, ComparesTables):
     @testing.emits_warning("Did not recognize")
     @testing.provide_metadata
     def test_skip_types(self):
+        metadata = self.metadata
         testing.db.execute("""
             create table foo (id integer primary key, data xml)
         """)
@@ -510,6 +512,7 @@ class ReflectionTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_indexes_cols(self):
+        metadata = self.metadata
 
         t1 = Table('t', metadata, Column('x', Integer), Column('y', Integer))
         Index('foo', t1.c.x, t1.c.y)
@@ -525,6 +528,7 @@ class ReflectionTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_indexes_cols_with_commas(self):
+        metadata = self.metadata
 
         t1 = Table('t', metadata, 
                         Column('x, col', Integer, key='x'), 
@@ -543,6 +547,7 @@ class ReflectionTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_indexes_cols_with_spaces(self):
+        metadata = self.metadata
 
         t1 = Table('t', metadata, Column('x col', Integer, key='x'), 
                                     Column('y', Integer))
index d208191041179c8145af2a99a220270cf7057594..a3fd69a259526db62dca01535f13c22fce15efc3 100644 (file)
@@ -702,6 +702,7 @@ class TypesTest(TestBase, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_rowid(self):
+        metadata = self.metadata
         t = Table('t1', metadata,
             Column('x', Integer)
         )
@@ -804,6 +805,7 @@ class TypesTest(TestBase, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_numerics_broken_inspection(self):
+        metadata = self.metadata
         """Numeric scenarios where Oracle type info is 'broken',
         returning us precision, scale of the form (0, 0) or (0, -127).
         We convert to Decimal and let int()/float() processors take over.
@@ -1076,6 +1078,7 @@ class EuroNumericTest(TestBase):
 
     @testing.provide_metadata
     def test_output_type_handler(self):
+        metadata = self.metadata
         for stmt, exp, kw in [
             ("SELECT 0.1 FROM DUAL", decimal.Decimal("0.1"), {}),
             ("SELECT 15 FROM DUAL", 15, {}),
@@ -1285,6 +1288,7 @@ class ExecuteTest(TestBase):
 
     @testing.provide_metadata
     def test_limit_offset_for_update(self):
+        metadata = self.metadata
         # oracle can't actually do the ROWNUM thing with FOR UPDATE
         # very well.
 
index 60a10b4b41db7b833a15cba3baa3246b4059b283..956fc9ebcb6627c06569f33415f3308ca3735451 100644 (file)
@@ -32,6 +32,7 @@ class SequenceTest(TestBase, AssertsCompiledSQL):
     @testing.only_on('postgresql', 'foo')
     @testing.provide_metadata
     def test_reverse_eng_name(self):
+        metadata = self.metadata
         engine = engines.testing_engine(options=dict(implicit_returning=False))
         for tname, cname in [
             ('tb1' * 30, 'abc'),
@@ -284,6 +285,7 @@ class FloatCoercionTest(TablesTest, AssertsExecutionResults):
 
     @testing.provide_metadata
     def test_arrays(self):
+        metadata = self.metadata
         t1 = Table('t', metadata, 
             Column('x', postgresql.ARRAY(Float)),
             Column('y', postgresql.ARRAY(postgresql.REAL)),
@@ -525,6 +527,7 @@ class NumericInterpretationTest(TestBase):
 
     @testing.provide_metadata
     def test_numeric_default(self):
+        metadata = self.metadata
         # pg8000 appears to fail when the value is 0, 
         # returns an int instead of decimal.
         t =Table('t', metadata, 
@@ -1207,6 +1210,7 @@ class MiscTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_date_reflection(self):
+        metadata = self.metadata
         t1 = Table('pgdate', metadata, Column('date1',
                    DateTime(timezone=True)), Column('date2',
                    DateTime(timezone=False)))
@@ -1309,6 +1313,7 @@ class MiscTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_renamed_sequence_reflection(self):
+        metadata = self.metadata
         t = Table('t', metadata, Column('id', Integer, primary_key=True))
         metadata.create_all()
         m2 = MetaData(testing.db)
@@ -1454,6 +1459,7 @@ class MiscTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_index_reflection(self):
+        metadata = self.metadata
         """ Reflecting partial & expression-based indexes should warn
         """
 
@@ -1621,6 +1627,7 @@ class TimePrecisionTest(TestBase, AssertsCompiledSQL):
     @testing.only_on('postgresql', 'DB specific feature')
     @testing.provide_metadata
     def test_reflection(self):
+        metadata = self.metadata
         t1 = Table(
             't1',
             metadata,
@@ -1778,6 +1785,7 @@ class ArrayTest(TestBase, AssertsExecutionResults):
 
     @testing.provide_metadata
     def test_tuple_flag(self):
+        metadata = self.metadata
         assert_raises_message(
             exc.ArgumentError, 
             "mutable must be set to False if as_tuple is True.",
@@ -2031,6 +2039,7 @@ class SpecialTypesTest(TestBase, ComparesTables, AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_bit_reflection(self):
+        metadata = self.metadata
         t1 = Table('t1', metadata,
         Column('bit1', postgresql.BIT()),
         Column('bit5', postgresql.BIT(5)),
index e802f3995ccfaf07c05ad693477771e0c132c445..fb98d2f0a16fbc5ba91e888c47925d5f3884d9cc 100644 (file)
@@ -101,6 +101,7 @@ class TestTypes(TestBase, AssertsExecutionResults):
 
     @testing.provide_metadata
     def test_type_reflection(self):
+        metadata = self.metadata
 
         # (ask_for, roundtripped_as_if_different)
 
@@ -156,6 +157,7 @@ class TestTypes(TestBase, AssertsExecutionResults):
     @testing.emits_warning('Did not recognize')
     @testing.provide_metadata
     def test_unknown_reflection(self):
+        metadata = self.metadata
         t = Table('t', metadata,
             Column('x', sqltypes.BINARY(16)),
             Column('y', sqltypes.BINARY())
index 387c937b66680ea3f7a8a5733a9a818cae881640..23892ffd63611df226b62ad6b27925bf7d0b9827 100644 (file)
@@ -71,18 +71,18 @@ class TablesTest(testing.TestBase):
         if cls.run_define_tables == 'once':
             cls.define_tables(cls.metadata)
             if cls.run_create_tables == 'once':
-                cls.metadata.create_all()
+                cls.metadata.create_all(cls.bind)
             cls.tables.update(cls.metadata.tables)
 
     def _setup_each_tables(self):
         if self.run_define_tables == 'each':
             self.tables.clear()
             if self.run_create_tables == 'each':
-                drop_all_tables(self.metadata)
+                drop_all_tables(self.metadata, self.bind)
             self.metadata.clear()
             self.define_tables(self.metadata)
             if self.run_create_tables == 'each':
-                self.metadata.create_all()
+                self.metadata.create_all(self.bind)
             self.tables.update(self.metadata.tables)
 
     def _setup_each_inserts(self):
@@ -120,7 +120,7 @@ class TablesTest(testing.TestBase):
     @classmethod
     def _teardown_once_metadata_bind(cls):
         if cls.run_create_tables:
-            cls.metadata.drop_all()
+            drop_all_tables(cls.metadata, cls.bind)
 
         if cls.run_dispose_bind == 'once':
             cls.dispose_bind(cls.bind)
@@ -174,7 +174,7 @@ class TablesTest(testing.TestBase):
         for table in self.metadata.sorted_tables:
             if table not in headers:
                 continue
-            table.bind.execute(
+            self.bind.execute(
                 table.insert(),
                 [dict(zip(headers[table], column_values))
                  for column_values in rows[table]])
index 44a9316ccd621564fd3fe4326688713d449407b2..f70d565278dd4cf0f5abe1c3c69a3927faa89458 100644 (file)
@@ -384,6 +384,7 @@ class ResultProxyTest(TestBase):
 
     @testing.provide_metadata
     def test_no_rowcount_on_selects_inserts(self):
+        metadata = self.metadata
         """assert that rowcount is only called on deletes and updates.
 
         This because cursor.rowcount can be expensive on some dialects
index 1124b4a47a5df106f99ae43827f91e883a795122..8c806e39ae0966250c588db06e686a467e95294b 100644 (file)
@@ -329,6 +329,7 @@ class ReflectionTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_override_composite_fk(self):
+        metadata = self.metadata
         """Test double-remove of composite foreign key, when replaced."""
 
         a = Table('a',
@@ -764,6 +765,7 @@ class ReflectionTest(TestBase, ComparesTables):
     @testing.requires.views
     @testing.provide_metadata
     def test_views(self):
+        metadata = self.metadata
         users, addresses = createTables(metadata, None)
         try:
             metadata.create_all()
@@ -785,6 +787,7 @@ class ReflectionTest(TestBase, ComparesTables):
     @testing.requires.views
     @testing.provide_metadata
     def test_reflect_all_with_views(self):
+        metadata = self.metadata
         users, addresses = createTables(metadata, None)
         try:
             metadata.create_all()
index 1acbdaf274ebdefcebb47a254ea4d56efa693179..8e251b3514abe80ddbe4d20d8fbf7f00017a1030 100644 (file)
@@ -42,9 +42,11 @@ class ConnectionKiller(object):
 
 testing_reaper = ConnectionKiller()
 
-def drop_all_tables(metadata):
+def drop_all_tables(metadata, bind):
     testing_reaper.close_all()
-    metadata.drop_all()
+    if hasattr(bind, 'close'):
+        bind.close()
+    metadata.drop_all(bind)
 
 @decorator
 def assert_conns_closed(fn, *args, **kw):
index e4edb8a86d5f79febd9840d911d413b59cb00170..e815a2dff06ea86e0b31e2713f2c3b90c3ac80c1 100644 (file)
@@ -536,30 +536,20 @@ def assert_raises_message(except_cls, msg, callable_, *args, **kwargs):
 def fail(msg):
     assert False, msg
 
-def fixture(table, columns, *rows):
-    """Insert data into table after creation."""
-    def onload(event, schema_item, connection):
-        insert = table.insert()
-        column_names = [col.key for col in columns]
-        connection.execute(insert, [dict(zip(column_names, column_values))
-                                    for column_values in rows])
-    table.append_ddl_listener('after-create', onload)
 
 @decorator
 def provide_metadata(fn, *args, **kw):
-    """Provides a bound MetaData object for a single test, 
-    drops it afterwards."""
+    """Provide bound MetaData for a single test, dropping afterwards."""
+
     metadata = schema.MetaData(db)
-    context = dict(fn.func_globals)
-    context['metadata'] = metadata
-    # jython bug #1034
-    rebound = types.FunctionType(
-        fn.func_code, context, fn.func_name, fn.func_defaults,
-        fn.func_closure)
+    self = args[0]
+    prev_meta = getattr(self, 'metadata', None)
+    self.metadata = metadata
     try:
-        return rebound(*args, **kw)
+        return fn(*args, **kw)
     finally:
         metadata.drop_all()
+        self.metadata = prev_meta
 
 class adict(dict):
     """Dict keys available as attributes.  Shadows."""
index 41c354e4a543c326bf7108e57c1c6e4c0f912ae9..ae8da5ec86787c261ce4d9a741752359cb3292b2 100644 (file)
@@ -3,7 +3,6 @@ from sqlalchemy import util
 from test.lib.schema import Table
 from test.lib.schema import Column
 from sqlalchemy.orm import attributes
-from test.lib.testing import fixture
 from test.orm import _base
 
 __all__ = ()
index b4c338ddda4452687d13367f524ca44126e11023..f86f38fdef1d6b661d12eb12d227cc28328b5974 100644 (file)
@@ -599,6 +599,7 @@ class MapperTest(_fixtures.FixtureTest):
             )
     @testing.provide_metadata
     def test_prop_filters_defaults(self):
+        metadata = self.metadata
         t = Table('t', metadata,
                Column('id', Integer(), primary_key=True, test_needs_autoincrement=True),
                Column('x', Integer(), nullable=False, server_default='0')
index 9a799bba20881059e8db53c419e5f8e873b928e6..164294e956ddc8fce94385f9a24fb98e66cd5765 100644 (file)
@@ -1960,6 +1960,7 @@ class UpdateDeleteTest(_base.MappedTest):
 
     @testing.provide_metadata
     def test_update_attr_names(self):
+        metadata = self.metadata
         data = Table('data', metadata,
             Column('id', Integer, primary_key=True, test_needs_autoincrement=True),
             Column('counter', Integer, nullable=False, default=0)
index 74998a77c50bb0268e949011998d408c6bc99146..2ba131ddc8c919b51d4286ac768078beaab9cb2a 100644 (file)
@@ -652,6 +652,7 @@ class SequenceExecTest(testing.TestBase):
     def test_func_embedded_whereclause(self):
         """test can use next_value() in whereclause"""
 
+        metadata = self.metadata
         t1 = Table('t', metadata,
             Column('x', Integer)
         )
@@ -669,6 +670,7 @@ class SequenceExecTest(testing.TestBase):
     def test_func_embedded_valuesbase(self):
         """test can use next_value() in values() of _ValuesBase"""
 
+        metadata = self.metadata
         t1 = Table('t', metadata,
             Column('x', Integer)
         )
@@ -686,6 +688,7 @@ class SequenceExecTest(testing.TestBase):
         """test inserted_primary_key contains [None] when 
         pk_col=next_value(), implicit returning is not used."""
 
+        metadata = self.metadata
         e = engines.testing_engine(options={'implicit_returning':False})
         s = Sequence("my_sequence")
         metadata.bind = e
@@ -704,6 +707,7 @@ class SequenceExecTest(testing.TestBase):
         """test inserted_primary_key contains the result when 
         pk_col=next_value(), when implicit returning is used."""
 
+        metadata = self.metadata
         e = engines.testing_engine(options={'implicit_returning':True})
         s = Sequence("my_sequence")
         metadata.bind = e
@@ -800,6 +804,7 @@ class SequenceTest(testing.TestBase, testing.AssertsCompiledSQL):
 
     @testing.provide_metadata
     def test_table_overrides_metadata_create(self):
+        metadata = self.metadata
         s1 = Sequence("s1", metadata=metadata)
         s2 = Sequence("s2", metadata=metadata)
         s3 = Sequence("s3")
@@ -915,6 +920,7 @@ class SpecialTypePKTest(testing.TestBase):
 
     @testing.provide_metadata
     def _run_test(self, *arg, **kw):
+        metadata = self.metadata
         implicit_returning = kw.pop('implicit_returning', True)
         kw['primary_key'] = True
         if kw.get('autoincrement', True):
@@ -983,6 +989,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
         like this.   Testing that all backends do the same thing here.
 
         """
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', String(10), server_default='key_one', primary_key=True),
                 Column('data', String(10)),
@@ -1000,6 +1007,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
     @testing.provide_metadata
     def test_string_default_on_insert_with_returning(self):
         """With implicit_returning, we get a string PK default back no problem."""
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', String(10), server_default='key_one', primary_key=True),
                 Column('data', String(10))
@@ -1014,6 +1022,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
 
     @testing.provide_metadata
     def test_int_default_none_on_insert(self):
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', Integer, 
                         server_default='5', primary_key=True),
@@ -1036,6 +1045,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
             )
     @testing.provide_metadata
     def test_autoincrement_reflected_from_server_default(self):
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', Integer, 
                         server_default='5', primary_key=True),
@@ -1051,6 +1061,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
 
     @testing.provide_metadata
     def test_int_default_none_on_insert_reflected(self):
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', Integer, 
                         server_default='5', primary_key=True),
@@ -1078,6 +1089,7 @@ class ServerDefaultsOnPKTest(testing.TestBase):
     @testing.requires.returning
     @testing.provide_metadata
     def test_int_default_on_insert_with_returning(self):
+        metadata = self.metadata
         t = Table('x', metadata, 
                 Column('y', Integer, 
                         server_default='5', primary_key=True),
index 09f1869a43b758b30bdb0e5ed583eab2db439f1c..7040cacffde7553c4acecd49d2015c842fe04610 100644 (file)
@@ -130,6 +130,7 @@ class MetaDataTest(TestBase, ComparesTables):
 
     @testing.provide_metadata
     def test_dupe_tables(self):
+        metadata = self.metadata
         t1 = Table('table1', metadata, 
             Column('col1', Integer, primary_key=True),
             Column('col2', String(20)))
index adfe2a8a94d8ea819afd4f9b5c6a1c1de77e02e4..9c8f66328cd31d295284fd80d8e61c85cc177146 100644 (file)
@@ -14,6 +14,7 @@ from test.lib import *
 from test.lib.util import picklers
 from sqlalchemy.util.compat import decimal
 from test.lib.util import round_decimal
+from test.engine import _base
 
 class AdaptTest(TestBase):
     def _all_dialect_modules(self):
@@ -182,12 +183,11 @@ class PickleMetadataTest(TestBase):
                 mt = loads(dumps(meta))
 
 
-class UserDefinedTest(TestBase, AssertsCompiledSQL):
+class UserDefinedTest(_base.TablesTest, AssertsCompiledSQL):
     """tests user-defined types."""
 
     def test_processing(self):
-
-        global users
+        users = self.tables.users
         users.insert().execute(
             user_id=2, goofy='jack', goofy2='jack', goofy4=u'jack',
             goofy7=u'jack', goofy8=12, goofy9=12)
@@ -270,6 +270,7 @@ class UserDefinedTest(TestBase, AssertsCompiledSQL):
     def test_type_coerce(self):
         """test ad-hoc usage of custom types with type_coerce()."""
 
+        metadata = self.metadata
         class MyType(types.TypeDecorator):
             impl = String
 
@@ -323,9 +324,7 @@ class UserDefinedTest(TestBase, AssertsCompiledSQL):
         )
 
     @classmethod
-    def setup_class(cls):
-        global users, metadata
-
+    def define_tables(cls, metadata):
         class MyType(types.UserDefinedType):
             def get_col_spec(self):
                 return "VARCHAR(100)"
@@ -409,8 +408,7 @@ class UserDefinedTest(TestBase, AssertsCompiledSQL):
             def copy(self):
                 return MyUnicodeType(self.impl.length)
 
-        metadata = MetaData(testing.db)
-        users = Table('type_users', metadata,
+        Table('users', metadata,
             Column('user_id', Integer, primary_key = True),
             # totall custom type
             Column('goofy', MyType, nullable = False),
@@ -424,11 +422,6 @@ class UserDefinedTest(TestBase, AssertsCompiledSQL):
             Column('goofy9', MyNewIntSubClass, nullable = False),
         )
 
-        metadata.create_all()
-
-    @classmethod
-    def teardown_class(cls):
-        metadata.drop_all()
 
 class UnicodeTest(TestBase, AssertsExecutionResults):
     """tests the Unicode type.  also tests the TypeDecorator with instances in the types package."""
@@ -1465,6 +1458,7 @@ class NumericRawSQLTest(TestBase):
     @testing.fails_on('sqlite', "Doesn't provide Decimal results natively")
     @testing.provide_metadata
     def test_decimal_fp(self):
+        metadata = self.metadata
         t = self._fixture(metadata, Numeric(10, 5), decimal.Decimal("45.5"))
         val = testing.db.execute("select val from t").scalar()
         assert isinstance(val, decimal.Decimal)
@@ -1473,6 +1467,7 @@ class NumericRawSQLTest(TestBase):
     @testing.fails_on('sqlite', "Doesn't provide Decimal results natively")
     @testing.provide_metadata
     def test_decimal_int(self):
+        metadata = self.metadata
         t = self._fixture(metadata, Numeric(10, 5), decimal.Decimal("45"))
         val = testing.db.execute("select val from t").scalar()
         assert isinstance(val, decimal.Decimal)
@@ -1480,6 +1475,7 @@ class NumericRawSQLTest(TestBase):
 
     @testing.provide_metadata
     def test_ints(self):
+        metadata = self.metadata
         t = self._fixture(metadata, Integer, 45)
         val = testing.db.execute("select val from t").scalar()
         assert isinstance(val, (int, long))
@@ -1487,6 +1483,7 @@ class NumericRawSQLTest(TestBase):
 
     @testing.provide_metadata
     def test_float(self):
+        metadata = self.metadata
         t = self._fixture(metadata, Float, 46.583)
         val = testing.db.execute("select val from t").scalar()
         assert isinstance(val, float)