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.


Reply via email to