diff options
| author | iElectric <unknown> | 2009-08-10 12:24:01 +0200 |
|---|---|---|
| committer | iElectric <unknown> | 2009-08-10 12:24:01 +0200 |
| commit | ccf7be33721e4584206cde292b07479aa6b47f1d (patch) | |
| tree | a9889e43157ca4cf9fab26a085747d9b99b43620 /migrate/versioning/script | |
| parent | e529a662500e9c4d7d55d80c887a8b2437d838cb (diff) | |
| parent | a186d2edf204ca0f048747436a92ac8c57120c14 (diff) | |
| download | sqlalchemy-migrate-ccf7be33721e4584206cde292b07479aa6b47f1d.tar.gz | |
merge
Diffstat (limited to 'migrate/versioning/script')
| -rw-r--r-- | migrate/versioning/script/base.py | 3 | ||||
| -rw-r--r-- | migrate/versioning/script/py.py | 29 | ||||
| -rw-r--r-- | migrate/versioning/script/sql.py | 20 |
3 files changed, 34 insertions, 18 deletions
diff --git a/migrate/versioning/script/base.py b/migrate/versioning/script/base.py index 1c6cca9..0a9d1b7 100644 --- a/migrate/versioning/script/base.py +++ b/migrate/versioning/script/base.py @@ -1,13 +1,12 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- - import logging from migrate.versioning.config import operations from migrate.versioning import pathed, exceptions -log = logging.getLogger(__name__) +log = logging.getLogger(__name__) class BaseScript(pathed.Pathed): """Base class for other types of scripts. diff --git a/migrate/versioning/script/py.py b/migrate/versioning/script/py.py index 9f5d514..74d4903 100644 --- a/migrate/versioning/script/py.py +++ b/migrate/versioning/script/py.py @@ -2,6 +2,8 @@ # -*- coding: utf-8 -*- import shutil +import warnings +import logging from StringIO import StringIO import migrate @@ -12,6 +14,9 @@ from migrate.versioning.script import base from migrate.versioning.util import import_path, load_model, construct_engine +log = logging.getLogger(__name__) +__all__ = ['PythonScript'] + class PythonScript(base.BaseScript): """Base for Python scripts""" @@ -83,16 +88,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: @@ -129,13 +129,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,8 +150,7 @@ class PythonScript(base.BaseScript): return self._module def _func(self, funcname): - try: - return getattr(self.module, funcname) - except AttributeError: - msg = "The function %s is not defined in this script" + if not hasattr(self.module, funcname): + msg = "Function '%s' is not defined in this script" raise exceptions.ScriptError(msg % funcname) + return getattr(self.module, funcname) diff --git a/migrate/versioning/script/sql.py b/migrate/versioning/script/sql.py index 851fdf2..ed80764 100644 --- a/migrate/versioning/script/sql.py +++ b/migrate/versioning/script/sql.py @@ -1,14 +1,30 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- +import logging +import shutil from migrate.versioning.script import base +from migrate.versioning.template import Template +log = logging.getLogger(__name__) + 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) + + src = Template(opts.pop('templates_path', None)).get_sql_script(theme=opts.pop('templates_theme', None)) + shutil.copy(src, path) + return cls(path) + # 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 +37,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) |
