Note, if we want to support other patterns of exposing actions in 
controllers (besides "def some_action():"), we could simply change the 
pattern matcher to accommodate other possibilities. You could also simply 
define a function to act like more of a router and include any 
functionality within it that you like.

Anthony

On Thursday, January 19, 2017 at 6:45:20 AM UTC-5, Anthony wrote:
>
> On Wednesday, January 18, 2017 at 9:40:35 PM UTC-5, Brendan Barnwell wrote:
>>
>> On Wednesday, January 18, 2017 at 2:12:35 PM UTC-8, Anthony wrote:
>>>
>>> A web2py controller is not like a Python module. It is meant to be 
>>> executed in a prepared environment to generate the response to an HTTP 
>>> request. Because the top level of the controller may include code you 
>>> wouldn't want executed unless proceeding with an HTTP request, it must 
>>> first be determined whether the requested function actually exists in the 
>>> file *before* executing it (in order to allow execution to be aborted 
>>> in case the function is not present). Also, when web2py compiles 
>>> applications, it creates a separate bytecode compiled file for each 
>>> function in each controller -- in order to do this, it must know the 
>>> function names, again, without executing the file (as the compilation 
>>> process takes place outside the environment of an HTTP request, and we 
>>> don't want any side effects).
>>>
>>>
>> I see, thanks.  What kind of things can be usefully done at the top level 
>> that would cause problems outside the request environment?  Most of the 
>> stuff I see looking through the docs is stuff happening internally to 
>> controller functions, except for a small amount of setup stuff (like 
>> "service = Service()") that doesn't appear to have side effects.  Are there 
>> useful web2py design patterns that involve significant logic in the 
>> controller top-level?
>>
>
> For example, there may be some code that handles authentication for the 
> entire controller or sets some DAL attributes that apply to the entire 
> controller (e.g., defining a _common_filter). This means that to prevent 
> this code from throwing errors, all the model files that would typically 
> run during a request to this controller must be run (and that can be 
> difficult to determine, as it is possible for the model files themselves to 
> dynamically determine which other model files run on any given request).
>
> Anthony 
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
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/d/optout.

Reply via email to