summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/event.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-04-02 13:29:11 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2011-04-02 13:29:11 -0400
commit0b52a5ae744acad5c58f382049ecdbd954fc7ee6 (patch)
tree5988e2a0790a21ef5c4841374b741cddac2a5fcb /lib/sqlalchemy/event.py
parenteb4a843318b4fa76d238c43a293d64af64ca1148 (diff)
downloadsqlalchemy-0b52a5ae744acad5c58f382049ecdbd954fc7ee6.tar.gz
- Added @event.listens_for() decorator, given
target + event name, applies the decorated function as a listener. [ticket:2106] - remove usage of globals from test.base.test_events
Diffstat (limited to 'lib/sqlalchemy/event.py')
-rw-r--r--lib/sqlalchemy/event.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py
index b2e5cd00f..4be227c51 100644
--- a/lib/sqlalchemy/event.py
+++ b/lib/sqlalchemy/event.py
@@ -13,6 +13,21 @@ NO_RETVAL = util.symbol('NO_RETVAL')
def listen(target, identifier, fn, *args, **kw):
"""Register a listener function for the given target.
+
+ e.g.::
+
+ from sqlalchemy import event
+ from sqlalchemy.schema import UniqueConstraint
+
+ def unique_constraint_name(const, table):
+ const.name = "uq_%s_%s" % (
+ table.name,
+ list(const.columns)[0].name
+ )
+ event.listen(
+ UniqueConstraint,
+ "after_parent_attach",
+ unique_constraint_name)
"""
@@ -24,6 +39,26 @@ def listen(target, identifier, fn, *args, **kw):
raise exc.InvalidRequestError("No such event '%s' for target '%s'" %
(identifier,target))
+def listens_for(target, identifier, *args, **kw):
+ """Decorate a function as a listener for the given target + identifier.
+
+ e.g.::
+
+ from sqlalchemy import event
+ from sqlalchemy.schema import UniqueConstraint
+
+ @event.listens_for(UniqueConstraint, "after_parent_attach")
+ def unique_constraint_name(const, table):
+ const.name = "uq_%s_%s" % (
+ table.name,
+ list(const.columns)[0].name
+ )
+ """
+ def decorate(fn):
+ listen(target, identifier, fn, *args, **kw)
+ return fn
+ return decorate
+
def remove(target, identifier, fn):
"""Remove an event listener.