yep - after reading that thread Robin pointed to at the head of this thread, the space behavior definitely looks like an expedient hack...
and reading the response from Massimo there: "If you have function that does not take *arguments* and you still don't want to expose it you can also use a trick..." I'm with Robin - forget the "tricks" and be explicit... but, as I suspected, the usual intent is expose no-argument controllers, so the exceptional case calls for a decorator, a better name than I originally posted: @not_exposed def myfunc(): #blah, blah, ... On Thu, Jan 8, 2009 at 10:55 AM, Robin B <[email protected]> wrote: > > Massimo, > > > Not sure I undestand. This goes in a module? not a model? > > The example shows that it can go in either or both. > > You could put it in a module and then import it into a controller to > import actions into one specific controller. You could put it in a > model to add an action to all controllers. > > The first time a controller is requested, the controller is exec'ed, > the resulting environment is searched for functions of no args that > have the specific attr that was set by the decorator, these actions > are merged with the actions found with the regex. All the possible > controller_action.pyc is compiled and stored like usual, now you can > call actions that were created in the models or imported from a module > (crud, resources, admin, stats etc). > > Robin > > On Jan 8, 7:20 am, mdipierro <[email protected]> wrote: > > Not sure I undestand. This goes in a module? not a model? > > > > On Jan 8, 12:03 am, Robin B <[email protected]> wrote: > > > > > Controller functions taking arguments, or functions with an extra > > > space like def index (): are hidden: > > > > >http://groups.google.com/group/web2py/browse_thread/thread/35c15761dc. > .. > > > > > This is good that you can hide functions somehow, but using only a > > > regex to detect controller functions requires people to copy-paste > > > common actions into every controller (bad). > > > > > Could a controller be loaded, and its symbols that are functions > > > checked for a tag (attribute) indicating that they are also exposed. > > > This way you can import actions/functions in the models and in the > > > individual controllers. > > > > > Proposal: continue to use the regex for backwards compatibility, but > > > also expose functions that are explicitly tagged as exposed by some > > > decorator. > > > > > Examples: > > > > > # in models/0.py > > > @T2.decorators.expose > > > def stats(): > > > return 'stats' > > > > > # in modules/crud.py > > > @T2.decorators.expose > > > def update(): > > > return 'update' > > > > > # in controllers/posts.py > > > from modules.crud import * > > > > > It would be fully backwards compatible! > > > > > Feedback? > > > > > Robin > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---

