diff options
Diffstat (limited to 'migrate')
-rw-r--r-- | migrate/versioning/util/__init__.py | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/migrate/versioning/util/__init__.py b/migrate/versioning/util/__init__.py index 6e41067..f5f8edc 100644 --- a/migrate/versioning/util/__init__.py +++ b/migrate/versioning/util/__init__.py @@ -6,6 +6,7 @@ from decorator import decorator from pkg_resources import EntryPoint from sqlalchemy import create_engine +from sqlalchemy.engine import Engine from migrate.versioning import exceptions from migrate.versioning.util.keyedinstance import KeyedInstance @@ -84,18 +85,18 @@ def catch_known_errors(f, *a, **kw): except exceptions.PathFoundError, e: raise exceptions.KnownError("The path %s already exists" % e.args[0]) -def construct_engine(url, **opts): +def construct_engine(engine, **opts): """.. versionadded:: 0.5.4 Constructs and returns SQLAlchemy engine. Currently, there are 2 ways to pass create_engine options to :mod:`migrate.versioning.api` functions: - :param url: connection string + :param engine: connection string or a existing engine :param engine_dict: python dictionary of options to pass to `create_engine` :param engine_arg_*: keyword parameters to pass to `create_engine` (evaluated with :func:`migrate.versioning.util.guess_obj_type`) :type engine_dict: dict - :type url: string + :type engine: string or Engine instance :type engine_arg_*: string :returns: SQLAlchemy Engine @@ -104,7 +105,11 @@ def construct_engine(url, **opts): keyword parameters override ``engine_dict`` values. """ - + if isinstance(engine, Engine): + return engine + elif not isinstance(engine, basestring): + raise ValueError("you need to pass either an existing engine or a database uri") + # get options for create_engine if opts.get('engine_dict') and isinstance(opts['engine_dict'], dict): kwargs = opts['engine_dict'] @@ -124,4 +129,4 @@ def construct_engine(url, **opts): if key.startswith('engine_arg_'): kwargs[key[11:]] = guess_obj_type(value) - return create_engine(url, **kwargs) + return create_engine(engine, **kwargs) |