summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-03-26 21:40:05 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2011-03-26 21:40:05 -0400
commitebd0fdad737c2ee79e9cde90f350a705307be578 (patch)
tree279925102029d3c4747d693fa2027c09c18ae87f
parente3dbb87d94e9caaec66bb141852fcd53caec3dea (diff)
downloadsqlalchemy-ebd0fdad737c2ee79e9cde90f350a705307be578.tar.gz
- convert @provide_metadata to use self access
- having occasional issues with BasicEntity grabbing, if it persists may have to pass an explicit base class into setup_classes()/setup_mappers()
-rw-r--r--test/dialect/test_firebird.py3
-rw-r--r--test/dialect/test_mssql.py5
-rw-r--r--test/dialect/test_oracle.py4
-rw-r--r--test/dialect/test_postgresql.py9
-rw-r--r--test/dialect/test_sqlite.py2
-rw-r--r--test/engine/_base.py10
-rw-r--r--test/engine/test_execute.py1
-rw-r--r--test/engine/test_reflection.py3
-rw-r--r--test/lib/engines.py6
-rw-r--r--test/lib/testing.py24
-rw-r--r--test/orm/_fixtures.py1
-rw-r--r--test/orm/test_mapper.py1
-rw-r--r--test/orm/test_query.py1
-rw-r--r--test/sql/test_defaults.py12
-rw-r--r--test/sql/test_metadata.py1
-rw-r--r--test/sql/test_types.py23
16 files changed, 68 insertions, 38 deletions
diff --git a/test/dialect/test_firebird.py b/test/dialect/test_firebird.py
index c1b4c590c..430b85d18 100644
--- a/test/dialect/test_firebird.py
+++ b/test/dialect/test_firebird.py
@@ -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
diff --git a/test/dialect/test_mssql.py b/test/dialect/test_mssql.py
index 789805074..3e3690c12 100644
--- a/test/dialect/test_mssql.py
+++ b/test/dialect/test_mssql.py
@@ -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))
diff --git a/test/dialect/test_oracle.py b/test/dialect/test_oracle.py
index d20819104..a3fd69a25 100644
--- a/test/dialect/test_oracle.py
+++ b/test/dialect/test_oracle.py
@@ -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.
diff --git a/test/dialect/test_postgresql.py b/test/dialect/test_postgresql.py
index 60a10b4b4..956fc9ebc 100644
--- a/test/dialect/test_postgresql.py
+++ b/test/dialect/test_postgresql.py
@@ -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)),
diff --git a/test/dialect/test_sqlite.py b/test/dialect/test_sqlite.py
index e802f3995..fb98d2f0a 100644
--- a/test/dialect/test_sqlite.py
+++ b/test/dialect/test_sqlite.py
@@ -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())
diff --git a/test/engine/_base.py b/test/engine/_base.py
index 387c937b6..23892ffd6 100644
--- a/test/engine/_base.py
+++ b/test/engine/_base.py
@@ -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]])
diff --git a/test/engine/test_execute.py b/test/engine/test_execute.py
index 44a9316cc..f70d56527 100644
--- a/test/engine/test_execute.py
+++ b/test/engine/test_execute.py
@@ -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
diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py
index 1124b4a47..8c806e39a 100644
--- a/test/engine/test_reflection.py
+++ b/test/engine/test_reflection.py
@@ -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()
diff --git a/test/lib/engines.py b/test/lib/engines.py
index 1acbdaf27..8e251b351 100644
--- a/test/lib/engines.py
+++ b/test/lib/engines.py
@@ -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):
diff --git a/test/lib/testing.py b/test/lib/testing.py
index e4edb8a86..e815a2dff 100644
--- a/test/lib/testing.py
+++ b/test/lib/testing.py
@@ -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."""
diff --git a/test/orm/_fixtures.py b/test/orm/_fixtures.py
index 41c354e4a..ae8da5ec8 100644
--- a/test/orm/_fixtures.py
+++ b/test/orm/_fixtures.py
@@ -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__ = ()
diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py
index b4c338ddd..f86f38fde 100644
--- a/test/orm/test_mapper.py
+++ b/test/orm/test_mapper.py
@@ -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')
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index 9a799bba2..164294e95 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -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)
diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py
index 74998a77c..2ba131ddc 100644
--- a/test/sql/test_defaults.py
+++ b/test/sql/test_defaults.py
@@ -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),
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index 09f1869a4..7040cacff 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -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)))
diff --git a/test/sql/test_types.py b/test/sql/test_types.py
index adfe2a8a9..9c8f66328 100644
--- a/test/sql/test_types.py
+++ b/test/sql/test_types.py
@@ -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)