From 416fdb1674daf72ef215c6abfed3e08343f1e05e Mon Sep 17 00:00:00 2001 From: Gord Thompson Date: Thu, 29 Apr 2021 12:57:06 -0600 Subject: Fix ForeignKeyConstraint.copy() error Fixed an issue with the (deprecated in 1.4) :meth:`_schema.ForeignKeyConstraint.copy` method that caused an error when invoked with the ``schema`` argument. Fixes: #6353 Change-Id: I03330d9ec254d64377f2b2e86af69a4eaff43ac6 --- lib/sqlalchemy/sql/schema.py | 12 ++++++------ lib/sqlalchemy/util/compat.py | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index f2c1c86ec..6ab58c301 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -2138,10 +2138,10 @@ class ForeignKey(DialectKWArgs, SchemaItem): "The :meth:`_schema.ForeignKey.copy` method is deprecated " "and will be removed in a future release.", ) - def copy(self, schema=None): - return self._copy(schema) + def copy(self, schema=None, **kw): + return self._copy(schema=schema, **kw) - def _copy(self, schema=None): + def _copy(self, schema=None, **kw): """Produce a copy of this :class:`_schema.ForeignKey` object. The new :class:`_schema.ForeignKey` will not be bound @@ -3309,7 +3309,7 @@ class ColumnCollectionConstraint(ColumnCollectionMixin, Constraint): "is deprecated and will be removed in a future release.", ) def copy(self, target_table=None, **kw): - return self._copy(target_table, **kw) + return self._copy(target_table=target_table, **kw) def _copy(self, target_table=None, **kw): # ticket #5276 @@ -3439,7 +3439,7 @@ class CheckConstraint(ColumnCollectionConstraint): "and will be removed in a future release.", ) def copy(self, target_table=None, **kw): - return self._copy(target_table, **kw) + return self._copy(target_table=target_table, **kw) def _copy(self, target_table=None, **kw): if target_table is not None: @@ -3732,7 +3732,7 @@ class ForeignKeyConstraint(ColumnCollectionConstraint): "and will be removed in a future release.", ) def copy(self, schema=None, target_table=None, **kw): - return self._copy(target_table, **kw) + return self._copy(schema=schema, target_table=target_table, **kw) def _copy(self, schema=None, target_table=None, **kw): fkc = ForeignKeyConstraint( diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py index ca92fb125..727b77f7e 100644 --- a/lib/sqlalchemy/util/compat.py +++ b/lib/sqlalchemy/util/compat.py @@ -228,6 +228,10 @@ if py3k: from abc import ABC + def _qualname(fn): + return fn.__qualname__ + + else: import base64 import ConfigParser as configparser # noqa @@ -338,6 +342,17 @@ else: TYPE_CHECKING = False + def _qualname(meth): + """return __qualname__ equivalent for a method on a class""" + + for cls in meth.im_class.__mro__: + if meth.__name__ in cls.__dict__: + break + else: + return meth.__name__ + + return "%s.%s" % (cls.__name__, meth.__name__) + if py3k: -- cgit v1.2.1