partly fix SA0.6 tests on postgres

This commit is contained in:
iElectric 2010-04-24 21:40:16 +02:00
parent 42ab0ba796
commit e4868841d5
9 changed files with 41 additions and 33 deletions

View File

@ -417,7 +417,7 @@ class ChangesetTable(object):
# That column isn't part of the table. We don't need # That column isn't part of the table. We don't need
# its entire definition to drop the column, just its # its entire definition to drop the column, just its
# name, so create a dummy column with the same name. # 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) column.drop(table=self, *p, **kw)
def rename(self, name, *args, **kwargs): def rename(self, name, *args, **kwargs):

View File

@ -9,9 +9,11 @@
import sys import sys
import logging import logging
import migrate
import sqlalchemy import sqlalchemy
import migrate
import migrate.changeset
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
HEADER = """ HEADER = """
@ -37,7 +39,6 @@ class ModelGenerator(object):
self.diff = diff self.diff = diff
self.declarative = declarative self.declarative = declarative
def column_repr(self, col): def column_repr(self, col):
kwarg = [] kwarg = []
if col.key != col.name: if col.key != col.name:
@ -174,9 +175,6 @@ class ModelGenerator(object):
def applyModel(self): def applyModel(self):
"""Apply model to current database.""" """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): def dbCanHandleThisChange(missingInDatabase, missingInModel, diffDecl):
if missingInDatabase and not missingInModel and not diffDecl: if missingInDatabase and not missingInModel and not diffDecl:

View File

@ -45,9 +45,9 @@ class ControlledSchema(object):
self.table.c.repository_id == str(self.repository.id))) self.table.c.repository_id == str(self.repository.id)))
data = list(result)[0] data = list(result)[0]
except Exception: except:
cls, exc, tb = sys.exc_info() cls, exc, tb = sys.exc_info()
raise exceptions.DatabaseNotControlledError, exc.message, tb raise exceptions.DatabaseNotControlledError, exc.__str__(), tb
self.version = data['version'] self.version = data['version']
return data return data

View File

@ -14,7 +14,7 @@ try:
except ImportError: except ImportError:
pass pass
test_requirements = ['nose >= 0.10', 'ScriptTest'] test_requirements = ['nose >= 0.10', 'ScriptTest==1.0.1']
required_deps = ['sqlalchemy >= 0.5', 'decorator', 'tempita'] required_deps = ['sqlalchemy >= 0.5', 'decorator', 'tempita']
readme_file = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'README')) readme_file = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'README'))

View File

@ -3,4 +3,4 @@ nose
-e git://github.com/cmheisel/nose-xcover.git#egg=nosexcover -e git://github.com/cmheisel/nose-xcover.git#egg=nosexcover
pytz pytz
psycopg2 psycopg2
scripttest scripttest==1.0.1

View File

@ -273,7 +273,7 @@ class TestAddDropColumn(fixture.DB):
col.create(self.table) col.create(self.table)
self.table.insert(values={'id': 10}).execute() 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']) self.assertEqual(u'foobar', row['data'])
col.drop() col.drop()
@ -287,7 +287,7 @@ class TestAddDropColumn(fixture.DB):
col.create(self.table, populate_default=True) col.create(self.table, populate_default=True)
self.table.insert(values={'id': 10}).execute() 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']) self.assertEqual(u'foobar', row['data'])
col.drop() col.drop()
@ -509,7 +509,7 @@ class TestColumnChange(fixture.DB):
# TextClause returned by autoload # TextClause returned by autoload
self.assert_(default in str(self.table.c.data.server_default.arg)) self.assert_(default in str(self.table.c.data.server_default.arg))
self.engine.execute(self.table.insert(), id=12) 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) self.assertEqual(row['data'], default)
# Column object # Column object
@ -526,10 +526,12 @@ class TestColumnChange(fixture.DB):
# server_default isn't necessarily None for Oracle # 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.assert_(self.table.c.data.server_default is None,self.table.c.data.server_default)
self.engine.execute(self.table.insert(), id=11) 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']) self.assert_(row['data'] is None, row['data'])
@fixture.usedb(not_supported='firebird') @fixture.usedb(not_supported='firebird')
def test_null(self): def test_null(self):
"""Can change a column's null constraint""" """Can change a column's null constraint"""
@ -607,7 +609,7 @@ class TestColumnChange(fixture.DB):
# insert data and assert default # insert data and assert default
self.table.insert(values={'id': 10}).execute() 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']) self.assertEqual(u'foobar', row['data_new'])

View File

@ -8,6 +8,7 @@ from sqlalchemy import create_engine, Table, MetaData
from sqlalchemy.orm import create_session from sqlalchemy.orm import create_session
from sqlalchemy.pool import StaticPool from sqlalchemy.pool import StaticPool
from migrate.changeset import SQLA_06
from migrate.versioning.util import Memoize from migrate.versioning.util import Memoize
from tests.fixture.base import Base from tests.fixture.base import Base
from tests.fixture.pathed import Pathed from tests.fixture.pathed import Pathed
@ -131,6 +132,14 @@ class DB(Base):
def _not_supported(self, url): def _not_supported(self, url):
return not self._supported(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): def refresh_table(self, name=None):
"""Reload the table from the database """Reload the table from the database
Assumes we're working with only a single table, self.table, and Assumes we're working with only a single table, self.table, and

View File

@ -3,7 +3,9 @@ import os
import sqlalchemy import sqlalchemy
from sqlalchemy import * from sqlalchemy import *
from nose.tools import eq_ from nose.tools import eq_
from migrate.versioning import genmodel, schemadiff from migrate.versioning import genmodel, schemadiff
from migrate.changeset import schema
from tests import fixture from tests import fixture
@ -41,9 +43,6 @@ class TestSchemaDiff(fixture.DB):
@fixture.usedb() @fixture.usedb()
def test_rundiffs(self): 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): def assertDiff(isDiff, tablesMissingInDatabase, tablesMissingInModel, tablesWithDiff):
diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version']) diff = schemadiff.getDiffOfModelAgainstDatabase(self.meta, self.engine, excludeTables=['migrate_version'])
eq_(bool(diff), isDiff) eq_(bool(diff), isDiff)

View File

@ -19,12 +19,12 @@ class TestUtil(fixture.Pathed):
self.assert_(engine.name == 'sqlite') self.assert_(engine.name == 'sqlite')
# keyword arg # keyword arg
engine = construct_engine(url, engine_arg_assert_unicode=True) engine = construct_engine(url, engine_arg_encoding=True)
self.assertTrue(engine.dialect.assert_unicode) self.assertTrue(engine.dialect.encoding)
# dict # dict
engine = construct_engine(url, engine_dict={'assert_unicode': True}) engine = construct_engine(url, engine_dict={'encoding': True})
self.assertTrue(engine.dialect.assert_unicode) self.assertTrue(engine.dialect.encoding)
# engine parameter # engine parameter
engine_orig = create_engine('sqlite://') engine_orig = create_engine('sqlite://')
@ -32,9 +32,9 @@ class TestUtil(fixture.Pathed):
self.assertEqual(engine, engine_orig) self.assertEqual(engine, engine_orig)
# test precedance # test precedance
engine = construct_engine(url, engine_dict={'assert_unicode': False}, engine = construct_engine(url, engine_dict={'encoding': False},
engine_arg_assert_unicode=True) engine_arg_encoding=True)
self.assertTrue(engine.dialect.assert_unicode) self.assertTrue(engine.dialect.encoding)
# deprecated echo=True parameter # deprecated echo=True parameter
engine = construct_engine(url, echo='True') engine = construct_engine(url, echo='True')