If there is nothing in web2py to do it, maybe you can go with a middleware.

http://web2py.com/book/default/chapter/04#External-middleware

Ricardo


On Thu, Mar 14, 2013 at 10:59 AM, Daniel Gonzalez <gonva...@gmail.com> 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 web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.
>
>

-- 

--- 
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