Duncan Booth wrote:
Is there an easy way for a python object to know when a web request has completed?
There is a subtle difference between when a web request 'ends' and when a transaction gets commited. They usualy occour relativly simultaneously to the user, but underneath they are two different operations.
For example, if I have an object that needs to do some setup and tidy up around operations, I want to group operations together if possible, but I don't want to delay the tidy up until the object is thrown out of the cache.
I think perhaps you are looking for __bobo_before__ and __bobo_after__. If your object defines these two methods then the first will be called before the object is called by ZPublisher, and the second will be called after (ZPublisher used to be called Bobo).
I have tried using the mixin class Shared.DC.ZRDB.TM and defining _abort, _finish, but without much success. The first time I call _register the _finish method is called as I expected, but the transaction forces a commit, which writes the object to the ZODB with _registered set to 1 so that subsequent attempts to start a transaction fail. Besides, this forces a transaction on the ZODB which I would really rather avoid.
Yeah, I wouldn't mess too much with the transactions... -Michel