diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py b/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py @@ -12,10 +12,11 @@ from sqlalchemy import __version__ as _s warnings.simplefilter('always', DeprecationWarning) -_sa_version = tuple(int(re.match("\d+", x).group(0)) - for x in _sa_version.split(".")) +_sa_version = tuple(int(re.match("\d+", x).group(0)) for x in _sa_version.split(".")) SQLA_07 = _sa_version >= (0, 7) SQLA_08 = _sa_version >= (0, 8) +SQLA_09 = _sa_version >= (0, 9) +SQLA_10 = _sa_version >= (1, 0) del re del _sa_version @@ -23,8 +24,8 @@ del _sa_version from rhodecode.lib.dbmigrate.migrate.changeset.schema import * from rhodecode.lib.dbmigrate.migrate.changeset.constraint import * -sqlalchemy.schema.Table.__bases__ += (ChangesetTable,) -sqlalchemy.schema.Column.__bases__ += (ChangesetColumn,) -sqlalchemy.schema.Index.__bases__ += (ChangesetIndex,) +sqlalchemy.schema.Table.__bases__ += (ChangesetTable, ) +sqlalchemy.schema.Column.__bases__ += (ChangesetColumn, ) +sqlalchemy.schema.Index.__bases__ += (ChangesetIndex, ) -sqlalchemy.schema.DefaultClause.__bases__ += (ChangesetDefaultClause,) +sqlalchemy.schema.DefaultClause.__bases__ += (ChangesetDefaultClause, ) diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py b/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py @@ -97,7 +97,6 @@ class ANSIColumnGenerator(AlterTableVisi table = self.start_alter_table(column) self.append("ADD ") - self.append(self.get_column_specification(column)) for cons in column.constraints: diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py b/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py @@ -111,7 +111,7 @@ class ForeignKeyConstraint(ConstraintCha refcolnames, reftable = self._normalize_columns(refcolumns, table_name=True) super(ForeignKeyConstraint, self).__init__( - colnames, refcolnames, *args,**kwargs + colnames, refcolnames, *args, **kwargs ) if table is not None: self._set_parent(table) diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/databases/sqlite.py b/rhodecode/lib/dbmigrate/migrate/changeset/databases/sqlite.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/databases/sqlite.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/databases/sqlite.py @@ -3,11 +3,15 @@ .. _`SQLite`: http://www.sqlite.org/ """ -from UserDict import DictMixin +try: # Python 3 + from collections.abc import MutableMapping as DictMixin +except ImportError: # Python 2 + from UserDict import DictMixin from copy import copy import re from sqlalchemy.databases import sqlite as sa_base +from sqlalchemy.schema import ForeignKeyConstraint from sqlalchemy.schema import UniqueConstraint from rhodecode.lib.dbmigrate.migrate import exceptions diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/schema.py b/rhodecode/lib/dbmigrate/migrate/changeset/schema.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/schema.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/schema.py @@ -1,10 +1,13 @@ """ Schema module providing common schema operations. """ +import abc +try: # Python 3 + from collections.abc import MutableMapping as DictMixin +except ImportError: # Python 2 + from UserDict import DictMixin import warnings -from UserDict import DictMixin - import sqlalchemy from sqlalchemy.schema import ForeignKeyConstraint diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/util.py b/rhodecode/lib/dbmigrate/migrate/changeset/util.py --- a/rhodecode/lib/dbmigrate/migrate/changeset/util.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/util.py @@ -1,6 +1,17 @@ """ Safe quoting method """ +from rhodecode.lib.dbmigrate.migrate.changeset import SQLA_10 + + +def fk_column_names(constraint): + if SQLA_10: + return [ + constraint.columns[key].name for key in constraint.column_keys] + else: + return [ + element.parent.name for element in constraint.elements] + def safe_quote(obj): # this is the SQLA 0.9 approach diff --git a/rhodecode/lib/dbmigrate/migrate/exceptions.py b/rhodecode/lib/dbmigrate/migrate/exceptions.py --- a/rhodecode/lib/dbmigrate/migrate/exceptions.py +++ b/rhodecode/lib/dbmigrate/migrate/exceptions.py @@ -27,6 +27,10 @@ class InvalidVersionError(ControlledSche """Invalid version number.""" +class VersionNotFoundError(KeyError): + """Specified version is not present.""" + + class DatabaseNotControlledError(ControlledSchemaError): """Database should be under version control, but it's not."""