this is ticket #2575, only applies to 0.7 and not 0.8, and will be fixed today.
In the meantime, please use the format that I gave you - a single, fixed event listener on the Engine class, established at the module level. The assertion logic then subscribes a "listen" function inside a collection accessed by the event listener. On Sep 26, 2012, at 1:19 PM, Ladislav Lenart wrote: > Hello. > > Call to event.listen(self.connection,...) fails with: > > InvalidRequestError: No such event 'before_cursor_execute' for target... > > because self.connection does not have 'dispatch' attribute: > > def listen(target, identifier, fn, *args, **kw): > for evt_cls in _registrars[identifier]: > # A target must have dispatch attribute as required > # by Events._accept_with class method. > tgt = evt_cls._accept_with(target) > if tgt is not None: > tgt.dispatch._listen(tgt, identifier, fn, *args, **kw) > return > raise exc.InvalidRequestError("No such event '%s' for target '%s'" % > > As I have written, the only two objects in the setUp method that the function > event.listen accepts are self.engine and type(self.engine). > > Any other idea what am I doing wrong? > > Ladislav Lenart > > > On 26.9.2012 19:07, Michael Bayer wrote: >> >> On Sep 26, 2012, at 12:36 PM, Ladislav Lenart wrote: >> >>> Hello. >>> >>>> I can guarantee you all SQL goes through the same channels. >>> >>> No doubts there :-) >>> >>> >>>> perhaps you registered the event with a specific Engine or Connection that >>>> is >>> not the one involved in the test. >>> >>> This might be it, but I don't know what should I supply instead. I have the >>> following setUp: >>> >>> class DbTestCase(object): >>> def setUp(self): >>> self.Base = create_base() >>> self._create_db() >>> self.connection = self.engine.connect() >>> self.trans = self.connection.begin() >>> self.session = Session(bind=self.connection, autoflush=False) >>> self._sql_emitters = set() >>> event.listen( >>> self.engine, >>> "before_cursor_execute", >>> self._before_cursor_execute >>> ) >>> >>> I have tried every object (and its type) present in the setUp method, but >>> all >>> fail with >>> >>> InvalidRequestError: No such event 'before_cursor_execute' for target... >> >> you've got self.connection already. so you want to listen on that: >> >> event.listen(self.connection, ...) >> >> when a Connection is constructed, it takes a snapshot of the event listeners >> associated with its parent Engine. This is for performance reasons so >> that event dispatch doesn't need to check two separate dispatch collections. >> >> > > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalchemy@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.