super().__init__(element)
if isolate_from_table:
- element._create_rule = util.portable_instancemethod(
- self._create_rule_disable
- )
+ element._create_rule = self._create_rule_disable
class DropConstraint(_DropBase["Constraint"]):
super().__init__(element, if_exists=if_exists, **kw)
if isolate_from_table:
- element._create_rule = util.portable_instancemethod(
- self._create_rule_disable
- )
+ element._create_rule = self._create_rule_disable
class SetTableComment(_CreateDropBase["Table"]):
import datetime as dt
import decimal
import enum
+import functools
import json
import pickle
from typing import Any
if inherit_schema is not NO_ARG
else (schema is None and metadata is None)
)
- # breakpoint()
+
self._create_events = _create_events
if _create_events and self.metadata:
event.listen(
self.metadata,
"before_create",
- util.portable_instancemethod(self._on_metadata_create),
+ self._on_metadata_create,
)
event.listen(
self.metadata,
"after_drop",
- util.portable_instancemethod(self._on_metadata_drop),
+ self._on_metadata_drop,
)
if _adapted_from:
# on_table/metadata_create/drop in this method, which is used by
# "native" types with a separate CREATE/DROP e.g. Postgresql.ENUM
- parent._on_table_attach(util.portable_instancemethod(self._set_table))
+ parent._on_table_attach(self._set_table)
def _variant_mapping_for_set_table(self, column):
if column.type._variant_mapping:
event.listen(
table,
"before_create",
- util.portable_instancemethod(
- self._on_table_create, {"variant_mapping": variant_mapping}
+ functools.partial(
+ self._on_table_create, variant_mapping=variant_mapping
),
)
event.listen(
table,
"after_drop",
- util.portable_instancemethod(
- self._on_table_drop, {"variant_mapping": variant_mapping}
+ functools.partial(
+ self._on_table_drop, variant_mapping=variant_mapping
),
)
if self.metadata is None:
event.listen(
table.metadata,
"before_create",
- util.portable_instancemethod(
+ functools.partial(
self._on_metadata_create,
- {"variant_mapping": variant_mapping},
+ variant_mapping=variant_mapping,
),
)
event.listen(
table.metadata,
"after_drop",
- util.portable_instancemethod(
+ functools.partial(
self._on_metadata_drop,
- {"variant_mapping": variant_mapping},
+ variant_mapping=variant_mapping,
),
)
e = schema.CheckConstraint(
type_coerce(column, String()).in_(self.enums),
name=_NONE_NAME if self.name is None else self.name,
- _create_rule=util.portable_instancemethod(
+ _create_rule=functools.partial(
self._should_create_constraint,
- {"variant_mapping": variant_mapping},
+ variant_mapping=variant_mapping,
),
_type_bound=True,
)
e = schema.CheckConstraint(
type_coerce(column, self).in_([0, 1]),
name=_NONE_NAME if self.name is None else self.name,
- _create_rule=util.portable_instancemethod(
+ _create_rule=functools.partial(
self._should_create_constraint,
- {"variant_mapping": variant_mapping},
+ variant_mapping=variant_mapping,
),
_type_bound=True,
)
return "%s(%s)" % (obj.__class__.__name__, ", ".join(output))
-class portable_instancemethod:
- """Turn an instancemethod into a (parent, name) pair
- to produce a serializable callable.
-
- """
-
- __slots__ = "target", "name", "kwargs", "__weakref__"
-
- def __getstate__(self):
- return {
- "target": self.target,
- "name": self.name,
- "kwargs": self.kwargs,
- }
-
- def __setstate__(self, state):
- self.target = state["target"]
- self.name = state["name"]
- self.kwargs = state.get("kwargs", ())
-
- def __init__(self, meth, kwargs=()):
- self.target = meth.__self__
- self.name = meth.__name__
- self.kwargs = kwargs
-
- def __call__(self, *arg, **kw):
- kw.update(self.kwargs)
- return getattr(self.target, self.name)(*arg, **kw)
-
-
def class_hierarchy(cls):
"""Return an unordered sequence of all classes related to cls.