as said before, for 1 there's response.custom_commit and for 2 you must 
render the template inside your function.

On Thursday, March 14, 2013 11:59:26 AM UTC+1, Daniel Gonzalez wrote:
>
> 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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to