On Mon, Apr 15, 2002 at 09:39:47AM -0600, Casey Duncan wrote:
The request object has a hold area which keeps objects alive as long as the request lives. Although I have not tried it, you might be able to add an object to this hold area using __bobo_traverse__ defined on B.
This object's class would need to have a destructor method (__del__) defined so that it can do something when the request is over and the response has presumably been written.
you could code that something like this:
In b's class:
class b: ... def __bobo_traverse__(self, name): self.REQUEST._hold(ResponseChecker(self.REQUEST.RESPONSE))
class ResponseChecker: def __init__(self, response): self.response = response
def __del__(self): ...do something with self.response...
Like I said, I've never tried this, but you never know, it might work. If not, another option would be to have b use __bobo_traverse__ to dynamically add a destructor to the RESPONSE object (it doesn't already have one AFAIK). Like this:
This indeed does work. The only difference is that I'm installing the hook in __before_publishing_traverse__, so I don't have to do any traversal myself. I find it a scary solution though (though not as scary as monkeypatching __del__), so I'm not 100% sure if I will use this code, or perhaps I'll make it very optional (basically, thanks to this nice hack, QuotaFolder can do traffic accounting as well :) Cheers, Ivo -- Drs. I.R. van der Wijk -=- Brouwersgracht 132 Amaze Internet Services V.O.F. 1013 HA Amsterdam, NL -=- Tel: +31-20-4688336 Linux/Web/Zope/SQL/MMBase Fax: +31-20-4688337 Network Solutions Web: http://www.amaze.nl/ Consultancy Email: ivo@amaze.nl -=-