From: Mike Bayer Date: Mon, 30 Jan 2012 17:31:08 +0000 (-0500) Subject: - add test coverage for standalone MigrationContext / Operations X-Git-Tag: rel_0_2_0~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=68d380135c752e9bb1054ee0126269b9d64f6ebe;p=thirdparty%2Fsqlalchemy%2Falembic.git - add test coverage for standalone MigrationContext / Operations - ensure MigrationContext.configure can be used with a single connection argument --- diff --git a/alembic/migration.py b/alembic/migration.py index 2e817e64..544942cd 100644 --- a/alembic/migration.py +++ b/alembic/migration.py @@ -28,6 +28,18 @@ class MigrationContext(object): from alembic import context migration_context = context.migration_context + + A :class:`.MigrationContext` can be created programmatically + for usage outside of the usual Alembic migrations flow, + using the :meth:`.MigrationContext.configure` method:: + + conn = myengine.connect() + ctx = MigrationContext.configure(conn) + + The above context can then be used to produce + Alembic migration operations with an :class:`.Operations` + instance. + """ def __init__(self, dialect, connection, opts): @@ -69,7 +81,7 @@ class MigrationContext(object): connection=None, url=None, dialect_name=None, - opts=None, + opts={}, ): """Create a new :class:`.MigrationContext`. diff --git a/tests/__init__.py b/tests/__init__.py index bb06ae7f..e8baba87 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -35,6 +35,13 @@ def sqlite_db(): dir_ = os.path.join(staging_directory, 'scripts') return create_engine('sqlite:///%s/foo.db' % dir_) +def capture_db(): + buf = [] + def dump(sql, *multiparams, **params): + buf.append(str(sql.compile(dialect=engine.dialect))) + engine = create_engine("postgresql://", strategy="mock", executor=dump) + return engine, buf + _engs = {} def db_for_dialect(name): if name in _engs: diff --git a/tests/test_config.py b/tests/test_config.py index fb54e8aa..f0bd1674 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,5 +1,7 @@ from alembic import config -from tests import eq_ +from alembic.migration import MigrationContext +from alembic.operations import Operations +from tests import eq_, capture_db def test_config_no_file_main_option(): cfg = config.Config() @@ -15,4 +17,14 @@ def test_config_no_file_section_option(): eq_(cfg.get_section_option("foo", "url"), "postgresql://foo/bar") cfg.set_section_option("foo", "echo", "True") - eq_(cfg.get_section_option("foo", "echo"), "True") \ No newline at end of file + eq_(cfg.get_section_option("foo", "echo"), "True") + + +def test_standalone_op(): + eng, buf = capture_db() + + env = MigrationContext.configure(eng) + op = Operations(env) + + op.alter_column("t", "c", nullable=True) + eq_(buf, ['ALTER TABLE t ALTER COLUMN c DROP NOT NULL'])