diff --git a/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py b/rhodecode/lib/dbmigrate/migrate/changeset/__init__.py index 4bd973b5..66262993 100644 --- 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 _sa_version 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 index 59a8ff81..20b57a27 100644 --- a/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/ansisql.py @@ -97,7 +97,6 @@ class ANSIColumnGenerator(AlterTableVisitor, SchemaGenerator): 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 index 0a69545d..fe00b183 100644 --- a/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py +++ b/rhodecode/lib/dbmigrate/migrate/changeset/constraint.py @@ -111,7 +111,7 @@ class ForeignKeyConstraint(ConstraintChangeset, schema.ForeignKeyConstraint): 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 index 529c2950..5d3fcb4f 100644 --- 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 index 72b3b534..36a26c50 100644 --- 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 index 402870fc..092fc4a7 100755 --- 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 index cb8c4094..31c8cd96 100644 --- a/rhodecode/lib/dbmigrate/migrate/exceptions.py +++ b/rhodecode/lib/dbmigrate/migrate/exceptions.py @@ -27,6 +27,10 @@ class InvalidVersionError(ControlledSchemaError): """Invalid version number.""" +class VersionNotFoundError(KeyError): + """Specified version is not present.""" + + class DatabaseNotControlledError(ControlledSchemaError): """Database should be under version control, but it's not."""