assert re.search(msg, str(e)), "%r !~ %s" % (msg, e)
print str(e)
-def _testing_config():
- from alembic.config import Config
- if not os.access(staging_directory, os.F_OK):
- os.mkdir(staging_directory)
- return Config(os.path.join(staging_directory, 'test_alembic.ini'))
-
def op_fixture(dialect='default', as_sql=False):
impl = _impls[dialect]
class Impl(impl):
if os.access(pyc_path, os.F_OK):
os.unlink(pyc_path)
- open(path, 'w').write(txt)
+ with open(path, 'w') as f:
+ f.write(txt)
def _sqlite_testing_config():
dir_ = os.path.join(staging_directory, 'scripts')
""" % (dir_, dir_))
-def no_sql_testing_config(dialect="postgresql"):
+def _no_sql_testing_config(dialect="postgresql"):
"""use a postgresql url with no host so that connections guaranteed to fail"""
dir_ = os.path.join(staging_directory, 'scripts')
return _write_config_file("""
def _write_config_file(text):
cfg = _testing_config()
- open(cfg.config_file_name, 'w').write(text)
+ with open(cfg.config_file_name, 'w') as f:
+ f.write(text)
return cfg
+def _testing_config():
+ from alembic.config import Config
+ if not os.access(staging_directory, os.F_OK):
+ os.mkdir(staging_directory)
+ return Config(os.path.join(staging_directory, 'test_alembic.ini'))
+
def staging_env(create=True, template="generic"):
from alembic import command, script
from unittest import TestCase
from tests import staging_env, sqlite_db, clear_staging_env, eq_, \
eq_ignore_whitespace, requires_07
-
+import re
import sys
py3k = sys.version_info >= (3, )
eq_(diffs[1][0], 'remove_table')
eq_(diffs[1][1].name, "extra")
- eq_(diffs[2][0], 'remove_column')
- eq_(diffs[2][2].name, 'pw')
+ eq_(diffs[2][0], "add_column")
+ eq_(diffs[2][1], "address")
+ eq_(diffs[2][2], metadata.tables['address'].c.street)
+
+ eq_(diffs[3][0], "add_column")
+ eq_(diffs[3][1], "order")
+ eq_(diffs[3][2], metadata.tables['order'].c.user_id)
- eq_(diffs[3][0][0], "modify_default")
- eq_(diffs[3][0][1], "user")
- eq_(diffs[3][0][2], "a1")
- eq_(diffs[3][0][5].arg, "x")
+ eq_(diffs[4][0][0], "modify_type")
+ eq_(diffs[4][0][1], "order")
+ eq_(diffs[4][0][2], "amount")
+ eq_(repr(diffs[4][0][4]), "NUMERIC(precision=8, scale=2)")
+ eq_(repr(diffs[4][0][5]), "Numeric(precision=10, scale=2)")
- eq_(diffs[4][0][0], 'modify_nullable')
- eq_(diffs[4][0][4], True)
- eq_(diffs[4][0][5], False)
- eq_(diffs[5][0], "add_column")
- eq_(diffs[5][1], "order")
- eq_(diffs[5][2], metadata.tables['order'].c.user_id)
+ eq_(diffs[5][0], 'remove_column')
+ eq_(diffs[5][2].name, 'pw')
- eq_(diffs[6][0][0], "modify_type")
- eq_(diffs[6][0][1], "order")
- eq_(diffs[6][0][2], "amount")
- eq_(repr(diffs[6][0][4]), "NUMERIC(precision=8, scale=2)")
- eq_(repr(diffs[6][0][5]), "Numeric(precision=10, scale=2)")
+ eq_(diffs[6][0][0], "modify_default")
+ eq_(diffs[6][0][1], "user")
+ eq_(diffs[6][0][2], "a1")
+ eq_(diffs[6][0][5].arg, "x")
+
+ eq_(diffs[7][0][0], 'modify_nullable')
+ eq_(diffs[7][0][4], True)
+ eq_(diffs[7][0][5], False)
- eq_(diffs[6][1][0], 'modify_nullable')
- eq_(diffs[6][1][4], False)
- eq_(diffs[6][1][5], True)
- eq_(diffs[7][0], "add_column")
- eq_(diffs[7][1], "address")
- eq_(diffs[7][2], metadata.tables['address'].c.street)
def test_render_diffs(self):
"""test a full render including indentation"""
- # TODO: this test isn't going
- # to be so spectacular on Py3K...
-
metadata = self.m2
template_args = {}
autogenerate.produce_migration_diffs(template_args, self.autogen_context)
- eq_(template_args['upgrades'],
+ eq_(re.sub(r"u'", "'", template_args['upgrades']),
"""### commands auto generated by Alembic - please adjust! ###
create_table('item',
sa.Column('id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint([order_id], ['order.order_id'], ),
sa.PrimaryKeyConstraint('id')
)
- drop_table(%(u)s'extra')
- drop_column('user', %(u)s'pw')
+ drop_table('extra')
+ add_column('address', sa.Column('street', sa.String(length=50), nullable=True))
+ add_column('order', sa.Column('user_id', sa.Integer(), nullable=True))
+ alter_column('order', 'amount',
+ existing_type=sa.NUMERIC(precision=8, scale=2),
+ type_=sa.Numeric(precision=10, scale=2),
+ nullable=True,
+ existing_server_default='0')
+ drop_column('user', 'pw')
alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default='x',
alter_column('user', 'name',
existing_type=sa.VARCHAR(length=50),
nullable=False)
- add_column('order', sa.Column('user_id', sa.Integer(), nullable=True))
- alter_column('order', %(u)s'amount',
- existing_type=sa.NUMERIC(precision=8, scale=2),
- type_=sa.Numeric(precision=10, scale=2),
- nullable=True,
- existing_server_default='0')
- add_column('address', sa.Column('street', sa.String(length=50), nullable=True))
- ### end Alembic commands ###""" % {
- 'u':"" if py3k else 'u'
- })
-
- eq_(template_args['downgrades'],
+ ### end Alembic commands ###""")
+ eq_(re.sub(r"u'", "'", template_args['downgrades']),
"""### commands auto generated by Alembic - please adjust! ###
drop_table('item')
- create_table(%(u)s'extra',
- sa.Column(%(u)s'x', sa.CHAR(), nullable=True),
+ create_table('extra',
+ sa.Column('x', sa.CHAR(), nullable=True),
sa.PrimaryKeyConstraint()
)
- add_column('user', sa.Column(%(u)s'pw', sa.VARCHAR(length=50), nullable=True))
+ drop_column('address', 'street')
+ drop_column('order', 'user_id')
+ alter_column('order', 'amount',
+ existing_type=sa.Numeric(precision=10, scale=2),
+ type_=sa.NUMERIC(precision=8, scale=2),
+ nullable=False,
+ existing_server_default='0')
+ add_column('user', sa.Column('pw', sa.VARCHAR(length=50), nullable=True))
alter_column('user', 'a1',
existing_type=sa.TEXT(),
server_default=None,
alter_column('user', 'name',
existing_type=sa.VARCHAR(length=50),
nullable=True)
- drop_column('order', 'user_id')
- alter_column('order', %(u)s'amount',
- existing_type=sa.Numeric(precision=10, scale=2),
- type_=sa.NUMERIC(precision=8, scale=2),
- nullable=False,
- existing_server_default='0')
- drop_column('address', 'street')
- ### end Alembic commands ###""" % {
- 'u':"" if py3k else 'u'
- })
+ ### end Alembic commands ###""")
def test_skip_null_type_comparison_reflected(self):
diff = []