summaryrefslogtreecommitdiff
path: root/tests/__init__.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-01-24 15:25:28 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-01-24 15:25:28 -0500
commit14d05f4b062c1cd237447f66467e234ee30ab3f7 (patch)
tree7e10d7647decd0f424d60d06532299578242f1e1 /tests/__init__.py
parenta851daaa1b2a4efa5990f55c3c97282cafdab9e1 (diff)
downloadalembic-14d05f4b062c1cd237447f66467e234ee30ab3f7.tar.gz
- [feature] The naming of revision files can
now be customized to be some combination of "rev id" and "slug", the latter of which is based on the revision message. By default, the pattern "<rev>_<slug>" is used for new files. New script files should include the "revision" variable for this to work, which is part of the newer script.py.mako scripts. [#24]
Diffstat (limited to 'tests/__init__.py')
-rw-r--r--tests/__init__.py42
1 files changed, 32 insertions, 10 deletions
diff --git a/tests/__init__.py b/tests/__init__.py
index 7e3e4b9..bb06ae7 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -11,7 +11,7 @@ from alembic.environment import EnvironmentContext
import re
import alembic
from alembic.operations import Operations
-from alembic.script import ScriptDirectory
+from alembic.script import ScriptDirectory, Script
from alembic import ddl
import StringIO
from alembic.ddl.impl import _impls
@@ -20,6 +20,7 @@ from nose import SkipTest
from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.util import decorator
import shutil
+import textwrap
staging_directory = os.path.join(os.path.dirname(__file__), 'scratch')
files_directory = os.path.join(os.path.dirname(__file__), 'files')
@@ -277,14 +278,33 @@ def staging_env(create=True, template="generic"):
def clear_staging_env():
shutil.rmtree(staging_directory, True)
+
+def write_script(scriptdir, rev_id, content):
+ old = scriptdir._revision_map[rev_id]
+ path = old.path
+ with open(path, 'w') as fp:
+ fp.write(textwrap.dedent(content))
+ pyc_path = util.pyc_file_from_path(path)
+ if os.access(pyc_path, os.F_OK):
+ os.unlink(pyc_path)
+ script = Script.from_path(path)
+ old = scriptdir._revision_map[script.revision]
+ if old.down_revision != script.down_revision:
+ raise Exception("Can't change down_revision "
+ "on a refresh operation.")
+ scriptdir._revision_map[script.revision] = script
+ script.nextrev = old.nextrev
+
+
def three_rev_fixture(cfg):
a = util.rev_id()
b = util.rev_id()
c = util.rev_id()
script = ScriptDirectory.from_config(cfg)
- script.generate_rev(a, None, refresh=True)
- script.write(a, """
+ script.generate_rev(a, "revision a", refresh=True)
+ write_script(script, a, """
+revision = '%s'
down_revision = None
from alembic import op
@@ -295,10 +315,11 @@ def upgrade():
def downgrade():
op.execute("DROP STEP 1")
-""")
+""" % a)
- script.generate_rev(b, None, refresh=True)
- script.write(b, """
+ script.generate_rev(b, "revision b", refresh=True)
+ write_script(script, b, """
+revision = '%s'
down_revision = '%s'
from alembic import op
@@ -309,10 +330,11 @@ def upgrade():
def downgrade():
op.execute("DROP STEP 2")
-""" % a)
+""" % (b, a))
- script.generate_rev(c, None, refresh=True)
- script.write(c, """
+ script.generate_rev(c, "revision c", refresh=True)
+ write_script(script, c, """
+revision = '%s'
down_revision = '%s'
from alembic import op
@@ -323,5 +345,5 @@ def upgrade():
def downgrade():
op.execute("DROP STEP 3")
-""" % b)
+""" % (c, b))
return a, b, c \ No newline at end of file