But this has two drawbacks: - the decorator must be added to every controller function - it gets executed before rendering the template.
On Thursday, March 14, 2013 11:56:53 AM UTC+1, Daniel Gonzalez wrote: > > Are you suggesting something like this (which is what I am currently > doing): > > In my model I define a decorator: > > def finish_request(fn, *args, **kwargs): > def wrapped(): > res = fn(*args, **kwargs) > do_whatever_after_the_request_has_been_processed() > return res > return wrapped > > And then in my controller: > > @finish_request > @auth.requires_login() > def index(): > return "Hello" > > > > On Thursday, March 14, 2013 11:48:48 AM UTC+1, Niphlod wrote: >> >> let's dive it into .... I don't think there's an integrated way to do it, >> rather than decorating your function with something else. >> Please note that as far as I know (but I may be totally wrong) you can't >> actually return from a function (so it gets rendered and transferred to the >> client) and continue your computation....i.e. if you have return 'abcd' to >> ship 'abcd' to the client, execution stops there. >> So, assuming that you are fine with, e.g. >> def func(): >> result = 'abcd' >> .....some lengthy "after callback" >> return result >> >> I'd say it's definitely "doable". >> If I remember correctly, there's only one handy shortcut available >> without starting toying with decorators.... response.custom_commit that can >> be a callable and gets called at the end of every request (before returning >> the results) >> >> PS: if the thing to do "after callback" is fine if executed >> asynchronously, you can set up a queue of things to do to be processed >> afterwards. >> >> PS2: to kick in after the rendering you must return the compiled >> template, e.g. >> result = response.render(...) >> ...some lengthy "after callback" >> return result >> >> On Thursday, March 14, 2013 11:35:20 AM UTC+1, Daniel Gonzalez wrote: >>> >>> And (I am discovering some effects during testing): >>> >>> 4. Is it possible to call this function *after* the templates have been >>> rendered? >>> >>> On Thursday, March 14, 2013 11:09:51 AM UTC+1, Daniel Gonzalez wrote: >>>> >>>> And: >>>> >>>> 3. Is it possible to call this function also for jsonrpc requests? >>>> >>>> On Thursday, March 14, 2013 11:00:13 AM UTC+1, Daniel Gonzalez wrote: >>>>> >>>>> Hi, >>>>> >>>>> For some tests that I am performing, I would like to call a function >>>>> "request_processed()" (defined in a model, for example), at the end of >>>>> every request. >>>>> >>>>> 1. Is this possible? How? >>>>> 2. Is it possible to also call this function in case no controller was >>>>> found to serve the request? >>>>> >>>>> Thanks, >>>>> Daniel >>>>> >>>> -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.