Very true. This is more general than t2, I just dislike adding so many symbols to the global namespace, so this could be added to a helpers.* object if it existed.
The reason for this proposal is that currently you cannot import actions easily: # in controllers/default.py from modules.crud import create The create action will not be found because actions are currently found with a regex. Robin On Jan 8, 1:19 pm, "Yarko Tymciurak" <yark...@gmail.com> wrote: > Let me double check to make sure: > > this behavior - non-argumented controllers being exposed / accessible from > a client - is not (only) t2; this is general web2py behavior, > > correct? > > On Thu, Jan 8, 2009 at 1:15 PM, Yarko Tymciurak <yark...@gmail.com> wrote: > > 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 <robi...@gmail.com> 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 <mdipie...@cs.depaul.edu> wrote: > >> > Not sure I undestand. This goes in a module? not a model? > > >> > On Jan 8, 12:03 am, Robin B <robi...@gmail.com> 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 web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---