From: Mike Bayer Date: Sun, 8 Aug 2010 23:36:07 +0000 (-0400) Subject: getting attributes to work X-Git-Tag: rel_0_7b1~253^2~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1d9c824dae8e6b1819e9a636cef387ee9e30576;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git getting attributes to work --- diff --git a/lib/sqlalchemy/event.py b/lib/sqlalchemy/event.py index 91d1bb82f8..73be57b55c 100644 --- a/lib/sqlalchemy/event.py +++ b/lib/sqlalchemy/event.py @@ -18,9 +18,8 @@ def listen(fn, identifier, target, *args, **kw): # what to do for evt_cls in _registrars[identifier]: - evt = evt_cls.accept_with(target) - if evt: - evt.listen(fn, identifier, target, *args, **kw) + for tgt in evt_cls.accept_with(target): + tgt.events.listen(fn, identifier, tgt, *args, **kw) break class _DispatchMeta(type): @@ -48,9 +47,9 @@ class Events(object): isinstance(target.events, type) and \ issubclass(target.events, cls) ): - return target.events + return [target] else: - return None + return [] @classmethod def listen(cls, fn, identifier, target): diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index a09463a4f2..76a89a0d03 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -347,8 +347,9 @@ class AttributeImpl(object): else: self.is_equal = compare_function + attr = getattr(class_, key) for ext in util.to_list(extension or []): - ext._adapt_listener(self, ext) + ext._adapt_listener(attr, ext) if active_history: events.active_history = True diff --git a/test/orm/test_unitofwork.py b/test/orm/test_unitofwork.py index ea63975178..7ac88affd0 100644 --- a/test/orm/test_unitofwork.py +++ b/test/orm/test_unitofwork.py @@ -44,7 +44,7 @@ class HistoryTest(_fixtures.FixtureTest): a.user = u session.add(u) - self.assert_(u.addresses == [a]) + eq_(u.addresses, [a]) session.commit() session.expunge_all()