summaryrefslogtreecommitdiff
path: root/migrate/versioning/script
diff options
context:
space:
mode:
authoriElectric <unknown>2009-07-08 22:03:00 +0200
committeriElectric <unknown>2009-07-08 22:03:00 +0200
commit67af81806d96f4071d2ac6bc0d956b4e2e8879dc (patch)
tree5e566be9a24cbece0cfa6a0c52a03d6d01e7cede /migrate/versioning/script
parent286a912e34823483ae0fd767721fb5221d7b7ea1 (diff)
downloadsqlalchemy-migrate-67af81806d96f4071d2ac6bc0d956b4e2e8879dc.tar.gz
add tests for plain API, fixed some small bugs
Diffstat (limited to 'migrate/versioning/script')
-rw-r--r--migrate/versioning/script/py.py21
-rw-r--r--migrate/versioning/script/sql.py12
2 files changed, 20 insertions, 13 deletions
diff --git a/migrate/versioning/script/py.py b/migrate/versioning/script/py.py
index 15f68b0..3eaec29 100644
--- a/migrate/versioning/script/py.py
+++ b/migrate/versioning/script/py.py
@@ -1,6 +1,7 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+import warnings
import shutil
from StringIO import StringIO
@@ -11,6 +12,7 @@ from migrate.versioning.template import template
from migrate.versioning.script import base
from migrate.versioning.util import import_path, load_model, construct_engine
+__all__ = ['PythonScript']
class PythonScript(base.BaseScript):
"""Base for Python scripts"""
@@ -88,16 +90,11 @@ class PythonScript(base.BaseScript):
:param path: Script location
:type path: string
-
:raises: :exc:`InvalidScriptError <migrate.versioning.exceptions.InvalidScriptError>`
:returns: Python module
"""
# Try to import and get the upgrade() func
- try:
- module = import_path(path)
- except:
- # If the script itself has errors, that's not our problem
- raise
+ module = import_path(path)
try:
assert callable(module.upgrade)
except Exception, e:
@@ -134,13 +131,15 @@ class PythonScript(base.BaseScript):
op = 'downgrade'
else:
raise exceptions.ScriptError("%d is not a valid step" % step)
+
funcname = base.operations[op]
-
- func = self._func(funcname)
+ script_func = self._func(funcname)
+
try:
- func(engine)
+ script_func(engine)
except TypeError:
- print "upgrade/downgrade functions must accept engine parameter (since ver 0.5.5)"
+ warnings.warn("upgrade/downgrade functions must accept engine"
+ " parameter (since version > 0.5.4)")
raise
@property
@@ -148,7 +147,7 @@ class PythonScript(base.BaseScript):
"""Calls :meth:`migrate.versioning.script.py.verify_module`
and returns it.
"""
- if not hasattr(self, '_module'):
+ if not getattr(self, '_module', None):
self._module = self.verify_module(self.path)
return self._module
diff --git a/migrate/versioning/script/sql.py b/migrate/versioning/script/sql.py
index 851fdf2..97dc505 100644
--- a/migrate/versioning/script/sql.py
+++ b/migrate/versioning/script/sql.py
@@ -7,8 +7,16 @@ from migrate.versioning.script import base
class SqlScript(base.BaseScript):
"""A file containing plain SQL statements."""
+ @classmethod
+ def create(cls, path, **opts):
+ """Create an empty migration script at specified path
+
+ :returns: :class:`SqlScript instance <migrate.versioning.script.sql.SqlScript>`"""
+ cls.require_notfound(path)
+ open(path, "w").close()
+
# TODO: why is step parameter even here?
- def run(self, engine, step=None):
+ def run(self, engine, step=None, executemany=True):
"""Runs SQL script through raw dbapi execute call"""
text = self.source()
# Don't rely on SA's autocommit here
@@ -21,7 +29,7 @@ class SqlScript(base.BaseScript):
# HACK: SQLite doesn't allow multiple statements through
# its execute() method, but it provides executescript() instead
dbapi = conn.engine.raw_connection()
- if getattr(dbapi, 'executescript', None):
+ if executemany and getattr(dbapi, 'executescript', None):
dbapi.executescript(text)
else:
conn.execute(text)