diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-08-12 17:50:37 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-08-12 17:50:37 -0400 |
| commit | f6198d9abf453182f4b111e0579a7a4ef1614e79 (patch) | |
| tree | e258eafc9db70c4745d98a56b55b439732aebf91 /test/engine | |
| parent | e8c2a2738b6c15cb12e7571b9e12c15cc2f200c9 (diff) | |
| download | sqlalchemy-f6198d9abf453182f4b111e0579a7a4ef1614e79.tar.gz | |
- A large refactoring of the ``sqlalchemy.sql`` package has reorganized
the import structure of many core modules.
``sqlalchemy.schema`` and ``sqlalchemy.types``
remain in the top-level package, but are now just lists of names
that pull from within ``sqlalchemy.sql``. Their implementations
are now broken out among ``sqlalchemy.sql.type_api``, ``sqlalchemy.sql.sqltypes``,
``sqlalchemy.sql.schema`` and ``sqlalchemy.sql.ddl``, the last of which was
moved from ``sqlalchemy.engine``. ``sqlalchemy.sql.expression`` is also
a namespace now which pulls implementations mostly from ``sqlalchemy.sql.elements``,
``sqlalchemy.sql.selectable``, and ``sqlalchemy.sql.dml``.
Most of the "factory" functions
used to create SQL expression objects have been moved to classmethods
or constructors, which are exposed in ``sqlalchemy.sql.expression``
using a programmatic system. Care has been taken such that all the
original import namespaces remain intact and there should be no impact
on any existing applications. The rationale here was to break out these
very large modules into smaller ones, provide more manageable lists
of function names, to greatly reduce "import cycles" and clarify the
up-front importing of names, and to remove the need for redundant
functions and documentation throughout the expression package.
Diffstat (limited to 'test/engine')
| -rw-r--r-- | test/engine/test_bind.py | 42 | ||||
| -rw-r--r-- | test/engine/test_ddlemit.py | 176 |
2 files changed, 15 insertions, 203 deletions
diff --git a/test/engine/test_bind.py b/test/engine/test_bind.py index 973cf4d84..8f6c547f1 100644 --- a/test/engine/test_bind.py +++ b/test/engine/test_bind.py @@ -1,7 +1,7 @@ """tests the "bind" attribute/argument across schema and SQL, including the deprecated versions of these arguments""" -from sqlalchemy.testing import eq_, assert_raises +from sqlalchemy.testing import assert_raises, assert_raises_message from sqlalchemy import engine, exc from sqlalchemy import MetaData, ThreadLocalMetaData from sqlalchemy import Integer, text @@ -44,7 +44,7 @@ class BindTest(fixtures.TestBase): testing.db.connect() ): for args in [ - ([], {'bind':bind}), + ([], {'bind': bind}), ([bind], {}) ]: metadata.create_all(*args[0], **args[1]) @@ -56,18 +56,13 @@ class BindTest(fixtures.TestBase): def test_create_drop_err_metadata(self): metadata = MetaData() - table = Table('test_table', metadata, Column('foo', Integer)) + Table('test_table', metadata, Column('foo', Integer)) for meth in [metadata.create_all, metadata.drop_all]: - try: - meth() - assert False - except exc.UnboundExecutionError as e: - eq_(str(e), - "The MetaData is not bound to an Engine or " - "Connection. Execution can not proceed without a " - "database to execute against. Either execute with " - "an explicit connection or assign the MetaData's " - ".bind to enable implicit execution.") + assert_raises_message( + exc.UnboundExecutionError, + "MetaData object is not bound to an Engine or Connection.", + meth + ) def test_create_drop_err_table(self): metadata = MetaData() @@ -79,23 +74,16 @@ class BindTest(fixtures.TestBase): table.create, table.drop, ]: - try: - meth() - assert False - except exc.UnboundExecutionError as e: - eq_( - str(e), - "The Table 'test_table' " - "is not bound to an Engine or Connection. " - "Execution can not proceed without a database to execute " - "against. Either execute with an explicit connection or " - "assign this Table's .metadata.bind to enable implicit " - "execution.") + assert_raises_message( + exc.UnboundExecutionError, + "Table object 'test_table' is not bound to an Engine or Connection.", + meth + ) @testing.uses_deprecated() def test_create_drop_bound(self): - for meta in (MetaData,ThreadLocalMetaData): + for meta in (MetaData, ThreadLocalMetaData): for bind in ( testing.db, testing.db.connect() @@ -136,7 +124,7 @@ class BindTest(fixtures.TestBase): try: for args in ( ([bind], {}), - ([], {'bind':bind}), + ([], {'bind': bind}), ): metadata = MetaData(*args[0], **args[1]) table = Table('test_table', metadata, diff --git a/test/engine/test_ddlemit.py b/test/engine/test_ddlemit.py deleted file mode 100644 index e773d0ced..000000000 --- a/test/engine/test_ddlemit.py +++ /dev/null @@ -1,176 +0,0 @@ -from sqlalchemy.testing import fixtures -from sqlalchemy.engine.ddl import SchemaGenerator, SchemaDropper -from sqlalchemy.engine import default -from sqlalchemy import MetaData, Table, Column, Integer, Sequence -from sqlalchemy import schema -from sqlalchemy.testing.mock import Mock - -class EmitDDLTest(fixtures.TestBase): - def _mock_connection(self, item_exists): - def has_item(connection, name, schema): - return item_exists(name) - - return Mock(dialect=Mock( - supports_sequences=True, - has_table=Mock(side_effect=has_item), - has_sequence=Mock(side_effect=has_item) - ) - ) - - def _mock_create_fixture(self, checkfirst, tables, - item_exists=lambda item: False): - connection = self._mock_connection(item_exists) - - return SchemaGenerator(connection.dialect, connection, - checkfirst=checkfirst, - tables=tables) - - def _mock_drop_fixture(self, checkfirst, tables, - item_exists=lambda item: True): - connection = self._mock_connection(item_exists) - - return SchemaDropper(connection.dialect, connection, - checkfirst=checkfirst, - tables=tables) - - def _table_fixture(self): - m = MetaData() - - return (m, ) + tuple( - Table('t%d' % i, m, Column('x', Integer)) - for i in range(1, 6) - ) - - def _table_seq_fixture(self): - m = MetaData() - - s1 = Sequence('s1') - s2 = Sequence('s2') - t1 = Table('t1', m, Column("x", Integer, s1, primary_key=True)) - t2 = Table('t2', m, Column("x", Integer, s2, primary_key=True)) - - return m, t1, t2, s1, s2 - - - def test_create_seq_checkfirst(self): - m, t1, t2, s1, s2 = self._table_seq_fixture() - generator = self._mock_create_fixture(True, [t1, t2], - item_exists=lambda t: t not in ("t1", "s1") - ) - - self._assert_create([t1, s1], generator, m) - - - def test_drop_seq_checkfirst(self): - m, t1, t2, s1, s2 = self._table_seq_fixture() - generator = self._mock_drop_fixture(True, [t1, t2], - item_exists=lambda t: t in ("t1", "s1") - ) - - self._assert_drop([t1, s1], generator, m) - - def test_create_collection_checkfirst(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_create_fixture(True, [t2, t3, t4], - item_exists=lambda t: t not in ("t2", "t4") - ) - - self._assert_create_tables([t2, t4], generator, m) - - def test_drop_collection_checkfirst(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_drop_fixture(True, [t2, t3, t4], - item_exists=lambda t: t in ("t2", "t4") - ) - - self._assert_drop_tables([t2, t4], generator, m) - - def test_create_collection_nocheck(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_create_fixture(False, [t2, t3, t4], - item_exists=lambda t: t not in ("t2", "t4") - ) - - self._assert_create_tables([t2, t3, t4], generator, m) - - def test_create_empty_collection(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_create_fixture(True, [], - item_exists=lambda t: t not in ("t2", "t4") - ) - - self._assert_create_tables([], generator, m) - - def test_drop_empty_collection(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_drop_fixture(True, [], - item_exists=lambda t: t in ("t2", "t4") - ) - - self._assert_drop_tables([], generator, m) - - def test_drop_collection_nocheck(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_drop_fixture(False, [t2, t3, t4], - item_exists=lambda t: t in ("t2", "t4") - ) - - self._assert_drop_tables([t2, t3, t4], generator, m) - - def test_create_metadata_checkfirst(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_create_fixture(True, None, - item_exists=lambda t: t not in ("t2", "t4") - ) - - self._assert_create_tables([t2, t4], generator, m) - - def test_drop_metadata_checkfirst(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_drop_fixture(True, None, - item_exists=lambda t: t in ("t2", "t4") - ) - - self._assert_drop_tables([t2, t4], generator, m) - - def test_create_metadata_nocheck(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_create_fixture(False, None, - item_exists=lambda t: t not in ("t2", "t4") - ) - - self._assert_create_tables([t1, t2, t3, t4, t5], generator, m) - - def test_drop_metadata_nocheck(self): - m, t1, t2, t3, t4, t5 = self._table_fixture() - generator = self._mock_drop_fixture(False, None, - item_exists=lambda t: t in ("t2", "t4") - ) - - self._assert_drop_tables([t1, t2, t3, t4, t5], generator, m) - - def _assert_create_tables(self, elements, generator, argument): - self._assert_ddl(schema.CreateTable, elements, generator, argument) - - def _assert_drop_tables(self, elements, generator, argument): - self._assert_ddl(schema.DropTable, elements, generator, argument) - - def _assert_create(self, elements, generator, argument): - self._assert_ddl( - (schema.CreateTable, schema.CreateSequence), - elements, generator, argument) - - def _assert_drop(self, elements, generator, argument): - self._assert_ddl( - (schema.DropTable, schema.DropSequence), - elements, generator, argument) - - def _assert_ddl(self, ddl_cls, elements, generator, argument): - generator.traverse_single(argument) - for call_ in generator.connection.execute.mock_calls: - c = call_[1][0] - assert isinstance(c, ddl_cls) - assert c.element in elements, "element %r was not expected"\ - % c.element - elements.remove(c.element) - assert not elements, "elements remain in list: %r" % elements |
