diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-02 13:29:11 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-04-02 13:29:11 -0400 |
| commit | 0b52a5ae744acad5c58f382049ecdbd954fc7ee6 (patch) | |
| tree | 5988e2a0790a21ef5c4841374b741cddac2a5fcb /lib/sqlalchemy/event.py | |
| parent | eb4a843318b4fa76d238c43a293d64af64ca1148 (diff) | |
| download | sqlalchemy-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.py | 35 |
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. |
