diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-10-01 12:14:34 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-10-01 12:14:34 -0400 |
| commit | 3d4d93332951a790e7d74afc5a3e13ed2523fe90 (patch) | |
| tree | f46fca43a18e7cc99d9333381c070b06404dc6fc /lib/sqlalchemy | |
| parent | 94d421ca2f2d9f45b5feb4419a34b97a50b8d90b (diff) | |
| download | sqlalchemy-3d4d93332951a790e7d74afc5a3e13ed2523fe90.tar.gz | |
- add support for removal of instance methods as event listeners, taking
into account the id() of the function itself and self, [ticket:2832]
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/event/registry.py | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/sqlalchemy/event/registry.py b/lib/sqlalchemy/event/registry.py index 330650e56..868dc28ed 100644 --- a/lib/sqlalchemy/event/registry.py +++ b/lib/sqlalchemy/event/registry.py @@ -12,6 +12,7 @@ from __future__ import absolute_import import weakref import collections +import types from .. import exc @@ -130,13 +131,16 @@ class _EventKey(object): self.target = target self.identifier = identifier self.fn = fn + if isinstance(fn, types.MethodType): + self.fn_key = id(fn.__func__), id(fn.__self__) + else: + self.fn_key = id(fn) self.fn_wrap = _fn_wrap self.dispatch_target = dispatch_target @property def _key(self): - return (id(self.target), self.identifier, id(self.fn)) - + return (id(self.target), self.identifier, self.fn_key) def with_wrapper(self, fn_wrap): if fn_wrap is self._listen_fn: |
