summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriElectric <unknown>2010-04-24 21:40:16 +0200
committeriElectric <unknown>2010-04-24 21:40:16 +0200
commite4868841d5922f6313821ff49d3e70426816d4fb (patch)
tree76d8c2f33abffa261f665d2c18affdf6d8a3e4c6
parent42ab0ba79630b0820c55d9f2cbe85492b307f160 (diff)
downloadsqalchemy-migrate-e4868841d5922f6313821ff49d3e70426816d4fb.tar.gz
partly fix SA0.6 tests on postgres
-rw-r--r--migrate/changeset/schema.py4
-rw-r--r--migrate/versioning/genmodel.py8
-rw-r--r--migrate/versioning/schema.py4
-rw-r--r--setup.py2
-rw-r--r--test-requirements.pip2
-rw-r--r--tests/changeset/test_changeset.py18
-rw-r--r--tests/fixture/database.py9
-rw-r--r--tests/versioning/test_schemadiff.py13
-rw-r--r--tests/versioning/test_util.py14
9 files changed, 41 insertions, 33 deletions
diff --git a/migrate/changeset/schema.py b/migrate/changeset/schema.py
index a3a0d1f..b25c9a0 100644
--- a/migrate/changeset/schema.py
+++ b/migrate/changeset/schema.py
@@ -403,7 +403,7 @@ class ChangesetTable(object):
def drop_column(self, column, *p, **kw):
"""Drop a column, given its name or definition.
-
+
API to :meth:`ChangesetColumn.drop`
:param column: Column to be droped
@@ -417,7 +417,7 @@ class ChangesetTable(object):
# That column isn't part of the table. We don't need
# its entire definition to drop the column, just its
# name, so create a dummy column with the same name.
- column = sqlalchemy.Column(str(column))
+ column = sqlalchemy.Column(str(column), sqlalchemy.Integer())
column.drop(table=self, *p, **kw)
def rename(self, name, *args, **kwargs):
diff --git a/migrate/versioning/genmodel.py b/migrate/versioning/genmodel.py
index 1715175..066e0c9 100644
--- a/migrate/versioning/genmodel.py
+++ b/migrate/versioning/genmodel.py
@@ -9,9 +9,11 @@
import sys
import logging
-import migrate
import sqlalchemy
+import migrate
+import migrate.changeset
+
log = logging.getLogger(__name__)
HEADER = """
@@ -37,7 +39,6 @@ class ModelGenerator(object):
self.diff = diff
self.declarative = declarative
-
def column_repr(self, col):
kwarg = []
if col.key != col.name:
@@ -174,9 +175,6 @@ class ModelGenerator(object):
def applyModel(self):
"""Apply model to current database."""
- # Yuck! We have to import from changeset to apply the
- # monkey-patch to allow column adding/dropping.
- from migrate.changeset import schema
def dbCanHandleThisChange(missingInDatabase, missingInModel, diffDecl):
if missingInDatabase and not missingInModel and not diffDecl:
diff --git a/migrate/versioning/schema.py b/migrate/versioning/schema.py
index 8014bcb..eb3beba 100644
--- a/migrate/versioning/schema.py
+++ b/migrate/versioning/schema.py
@@ -45,9 +45,9 @@ class ControlledSchema(object):
self.table.c.repository_id == str(self.repository.id)))
data = list(result)[0]
- except Exception:
+ except:
cls, exc, tb = sys.exc_info()
- raise exceptions.DatabaseNotControlledError, exc.message, tb
+ raise exceptions.DatabaseNotControlledError, exc.__str__(), tb
self.version = data['version']
return data
diff --git a/setup.py b/setup.py
index dd9ddc0..7ba7842 100644
--- a/setup.py
+++ b/setup.py
@@ -14,7 +14,7 @@ try:
except ImportError:
pass
-test_requirements = ['nose >= 0.10', 'ScriptTest']
+test_requirements = ['nose >= 0.10', 'ScriptTest==1.0.1']
required_deps = ['sqlalchemy >= 0.5', 'decorator', 'tempita']
readme_file = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'README'))
diff --git a/test-requirements.pip b/test-requirements.pip
index c500481..e659a36 100644
--- a/test-requirements.pip
+++ b/test-requirements.pip
@@ -3,4 +3,4 @@ nose
-e git://github.com/cmheisel/nose-xcover.git#egg=nosexcover
pytz
psycopg2
-scripttest
+scripttest==1.0.1
diff --git a/tests/changeset/test_changeset.py b/tests/changeset/test_changeset.py
index 8e9dcc2..999f88f 100644
--- a/tests/changeset/test_changeset.py
+++ b/tests/changeset/test_changeset.py
@@ -41,7 +41,7 @@ class TestAddDropColumn(fixture.DB):
# number of cols should be correct in table object and in database
self.refresh_table(self.table_name)
result = len(self.table.c)
-
+
self.assertEquals(result, num_of_expected_cols),
if col_k.get('primary_key', None):
# new primary key: check its length too
@@ -273,7 +273,7 @@ class TestAddDropColumn(fixture.DB):
col.create(self.table)
self.table.insert(values={'id': 10}).execute()
- row = self.table.select(autocommit=True).execute().fetchone()
+ row = self._select_row()
self.assertEqual(u'foobar', row['data'])
col.drop()
@@ -287,7 +287,7 @@ class TestAddDropColumn(fixture.DB):
col.create(self.table, populate_default=True)
self.table.insert(values={'id': 10}).execute()
- row = self.table.select(autocommit=True).execute().fetchone()
+ row = self._select_row()
self.assertEqual(u'foobar', row['data'])
col.drop()
@@ -509,7 +509,7 @@ class TestColumnChange(fixture.DB):
# TextClause returned by autoload
self.assert_(default in str(self.table.c.data.server_default.arg))
self.engine.execute(self.table.insert(), id=12)
- row = self.table.select(autocommit=True).execute().fetchone()
+ row = self._select_row()
self.assertEqual(row['data'], default)
# Column object
@@ -526,15 +526,17 @@ class TestColumnChange(fixture.DB):
# server_default isn't necessarily None for Oracle
#self.assert_(self.table.c.data.server_default is None,self.table.c.data.server_default)
self.engine.execute(self.table.insert(), id=11)
- row = self.table.select(self.table.c.id == 11, autocommit=True).execute().fetchone()
+ if SQLA_06:
+ row = self.table.select(self.table.c.id == 11).execution_options(autocommit=True).execute().fetchone()
+ else:
+ row = self.table.select(self.table.c.id == 11, autocommit=True).execute().fetchone()
self.assert_(row['data'] is None, row['data'])
-
@fixture.usedb(not_supported='firebird')
def test_null(self):
"""Can change a column's null constraint"""
self.assertEquals(self.table.c.data.nullable, True)
-
+
# Column object
self.table.c.data.alter(Column('data', String(40), nullable=False))
self.table.nullable = None
@@ -607,7 +609,7 @@ class TestColumnChange(fixture.DB):
# insert data and assert default
self.table.insert(values={'id': 10}).execute()
- row = self.table.select(autocommit=True).execute().fetchone()
+ row = self._select_row()
self.assertEqual(u'foobar', row['data_new'])
diff --git a/tests/fixture/database.py b/tests/fixture/database.py
index f9a4980..5fac0ef 100644
--- a/tests/fixture/database.py
+++ b/tests/fixture/database.py
@@ -8,6 +8,7 @@ from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.orm import create_session
from sqlalchemy.pool import StaticPool
+from migrate.changeset import SQLA_06
from migrate.versioning.util import Memoize
from tests.fixture.base import Base
from tests.fixture.pathed import Pathed
@@ -131,6 +132,14 @@ class DB(Base):
def _not_supported(self, url):
return not self._supported(url)
+ def _select_row(self):
+ """Select rows, used in multiple tests"""
+ if SQLA_06:
+ row = self.table.select().execution_options(autocommit=True).execute().fetchone()
+ else:
+ row = self.table.select(autocommit=True).execute().fetchone()
+ return row
+
def refresh_table(self, name=None):
"""Reload the table from the database
Assumes we're working with only a single table, self.table, and
diff --git a/tests/versioning/test_schemadiff.py b/tests/versioning/test_schemadiff.py
index c35a9b5..fd29ebe 100644
--- a/tests/versioning/test_schemadiff.py
+++ b/tests/versioning/test_schemadiff.py
@@ -3,7 +3,9 @@ import os
import sqlalchemy
from sqlalchemy import *
from nose.tools import eq_
+
from migrate.versioning import genmodel, schemadiff
+from migrate.changeset import schema
from tests import fixture
@@ -37,22 +39,19 @@ class TestSchemaDiff(fixture.DB):
def _applyLatestModel(self):
diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version'])
genmodel.ModelGenerator(diff).applyModel()
-
+
@fixture.usedb()
def test_rundiffs(self):
-
- # Yuck! We have to import from changeset to apply the monkey-patch to allow column adding/dropping.
- from migrate.changeset import schema
-
+
def assertDiff(isDiff, tablesMissingInDatabase, tablesMissingInModel, tablesWithDiff):
diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version'])
eq_(bool(diff), isDiff)
eq_( ([t.name for t in diff.tablesMissingInDatabase], [t.name for t in diff.tablesMissingInModel], [t.name for t in diff.tablesWithDiff]),
(tablesMissingInDatabase, tablesMissingInModel, tablesWithDiff) )
-
+
# Model is defined but database is empty.
assertDiff(True, [self.table_name], [], [])
-
+
# Check Python upgrade and downgrade of database from updated model.
diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version'])
decls, upgradeCommands, downgradeCommands = genmodel.ModelGenerator(diff).toUpgradeDowngradePython()
diff --git a/tests/versioning/test_util.py b/tests/versioning/test_util.py
index f913285..0ccb6de 100644
--- a/tests/versioning/test_util.py
+++ b/tests/versioning/test_util.py
@@ -19,12 +19,12 @@ class TestUtil(fixture.Pathed):
self.assert_(engine.name == 'sqlite')
# keyword arg
- engine = construct_engine(url, engine_arg_assert_unicode=True)
- self.assertTrue(engine.dialect.assert_unicode)
+ engine = construct_engine(url, engine_arg_encoding=True)
+ self.assertTrue(engine.dialect.encoding)
# dict
- engine = construct_engine(url, engine_dict={'assert_unicode': True})
- self.assertTrue(engine.dialect.assert_unicode)
+ engine = construct_engine(url, engine_dict={'encoding': True})
+ self.assertTrue(engine.dialect.encoding)
# engine parameter
engine_orig = create_engine('sqlite://')
@@ -32,9 +32,9 @@ class TestUtil(fixture.Pathed):
self.assertEqual(engine, engine_orig)
# test precedance
- engine = construct_engine(url, engine_dict={'assert_unicode': False},
- engine_arg_assert_unicode=True)
- self.assertTrue(engine.dialect.assert_unicode)
+ engine = construct_engine(url, engine_dict={'encoding': False},
+ engine_arg_encoding=True)
+ self.assertTrue(engine.dialect.encoding)
# deprecated echo=True parameter
engine = construct_engine(url, echo='True')