diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-10-12 17:21:08 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-10-12 17:21:08 -0400 |
| commit | c30e6d063e6dcec7d6f8ab28692049aaf387a5fa (patch) | |
| tree | 865e54515ddcfea9a554d2c458379d85d9599138 /lib/sqlalchemy/event.py | |
| parent | 40af03f8879412051518df8aadd8886c6c33aac0 (diff) | |
| download | sqlalchemy-c30e6d063e6dcec7d6f8ab28692049aaf387a5fa.tar.gz | |
- [feature] Improvements to event listening for
mapped classes allows that unmapped classes
can be specified for instance- and mapper-events.
The established events will be automatically
set up on subclasses of that class when the
propagate=True flag is passed, and the
events will be set up for that class itself
if and when it is ultimately mapped.
[ticket:2585]
- [bug] The instrumentation events class_instrument(),
class_uninstrument(), and attribute_instrument()
will now fire off only for descendant classes
of the class assigned to listen(). Previously,
an event listener would be assigned to listen
for all classes in all cases regardless of the
"target" argument passed. [ticket:2590]
Diffstat (limited to 'lib/sqlalchemy/event.py')
| -rw-r--r-- | lib/sqlalchemy/event.py | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py index 633cb96f8..c702d9d34 100644 --- a/lib/sqlalchemy/event.py +++ b/lib/sqlalchemy/event.py @@ -148,6 +148,12 @@ class _Dispatch(object): getattr(self, ls.name).\ for_modify(self)._update(ls, only_propagate=only_propagate) + @util.hybridmethod + def _clear(self): + for attr in dir(self): + if _is_event_name(attr): + getattr(self, attr).for_modify(self).clear() + def _event_descriptors(target): return [getattr(target, k) for k in dir(target) if _is_event_name(k)] @@ -170,7 +176,6 @@ def _create_dispatcher_class(cls, classname, bases, dict_): cls.dispatch = dispatch_cls = type("%sDispatch" % classname, (dispatch_base, ), {}) dispatch_cls._listen = cls._listen - dispatch_cls._clear = cls._clear for k in dict_: if _is_event_name(k): @@ -218,9 +223,7 @@ class Events(object): @classmethod def _clear(cls): - for attr in dir(cls.dispatch): - if _is_event_name(attr): - getattr(cls.dispatch, attr).clear() + cls.dispatch._clear() class _DispatchDescriptor(object): """Class-level attributes on :class:`._Dispatch` classes.""" |
