summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/event/api.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-07-26 19:11:33 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-07-26 19:11:33 -0400
commitc903f071a82ce8784a4aa7f5e0d4264443e1944b (patch)
tree38fa94349896a54bce2ddcfa11b7bf4365381a17 /lib/sqlalchemy/event/api.py
parent4505425a38b079a8e2a59fdbe31bc033de25e871 (diff)
downloadsqlalchemy-c903f071a82ce8784a4aa7f5e0d4264443e1944b.tar.gz
- add event.contains() function to the event package, returns True
if the given target/event/fn is set up to listen. - repair mutable package which is doing some conditional event listening
Diffstat (limited to 'lib/sqlalchemy/event/api.py')
-rw-r--r--lib/sqlalchemy/event/api.py34
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/sqlalchemy/event/api.py b/lib/sqlalchemy/event/api.py
index 3a6c46e6a..33a6b817f 100644
--- a/lib/sqlalchemy/event/api.py
+++ b/lib/sqlalchemy/event/api.py
@@ -11,6 +11,15 @@ CANCEL = util.symbol('CANCEL')
NO_RETVAL = util.symbol('NO_RETVAL')
+def _event_key(target, identifier, fn):
+ for evt_cls in _registrars[identifier]:
+ tgt = evt_cls._accept_with(target)
+ if tgt is not None:
+ return _EventKey(target, identifier, fn, tgt)
+ else:
+ raise exc.InvalidRequestError("No such event '%s' for target '%s'" %
+ (identifier, target))
+
def listen(target, identifier, fn, *args, **kw):
"""Register a listener function for the given target.
@@ -31,14 +40,7 @@ def listen(target, identifier, fn, *args, **kw):
"""
- for evt_cls in _registrars[identifier]:
- tgt = evt_cls._accept_with(target)
- if tgt is not None:
- _EventKey(target, identifier, fn, tgt).listen(*args, **kw)
- break
- else:
- raise exc.InvalidRequestError("No such event '%s' for target '%s'" %
- (identifier, target))
+ _event_key(target, identifier, fn).listen(*args, **kw)
def listens_for(target, identifier, *args, **kw):
@@ -87,13 +89,13 @@ def remove(target, identifier, fn):
.. versionadded:: 0.9.0
"""
- for evt_cls in _registrars[identifier]:
- tgt = evt_cls._accept_with(target)
- if tgt is not None:
- _EventKey(target, identifier, fn, tgt).remove()
- break
- else:
- raise exc.InvalidRequestError("No such event '%s' for target '%s'" %
- (identifier, target))
+ _event_key(target, identifier, fn).remove()
+
+def contains(target, identifier, fn):
+ """Return True if the given target/ident/fn is set up to listen.
+ .. versionadded:: 0.9.0
+
+ """
+ return _event_key(target, identifier, fn).contains()