:-)

On Fri, Jul 8, 2011 at 2:25 AM, Massimo Di Pierro <
massimo.dipie...@gmail.com> wrote:

> yes. even better use router (vs routes)
>
> On Jul 6, 10:03 am, Miguel Lopes <mig.e.lo...@gmail.com> wrote:
> > Humm,
> >
> > Nice. Yes, closures are enough, and cleaner too.
> > Is routes OK for production mode?
> > Txs,
> > Miguel
> >
> > On Wed, Jul 6, 2011 at 3:54 PM, Massimo Di Pierro <
> >
> >
> >
> >
> >
> >
> >
> > massimo.dipie...@gmail.com> wrote:
> > > Jonathan is right. Here is a simple way around.
> >
> > > Create a single controller called dynamical. use request.args(0) to
> > > parse the name of one of the dynamical actions and remap
> >
> > > def dynamical():
> > >     actionname, request.args[:] = request.args(0), request.args[1:]
> > >     # call actionname and pass request.args and request.vars
> >
> > > use routes to remove the 'dynamical/' part form the URL.
> >
> > > This allows you to do what you want without necessarily meta-
> > > programming.
> >
> > > On Jul 6, 9:35 am, Miguel Lopes <mig.e.lo...@gmail.com> wrote:
> > > > Thanks. In conjunction with routes could supply a solution
> (shortening
> > > the
> > > > urls).
> > > > I think I should rethink the payoff (see my reply to Massimo
> regarding my
> > > > goals).
> > > > Thanks,
> > > > Miguel
> >
> > > > On Wed, Jul 6, 2011 at 3:12 PM, Jonathan Lundell <jlund...@pobox.com
> >
> > > wrote:
> > > > > On Jul 6, 2011, at 1:23 AM, Miguel Lopes wrote:
> >
> > > > > I'm experimenting with dynamically generating functions, aka
> 'actions'
> > > in
> > > > > controllers. However, I've been unsuccessful. I can use exec and
> > > closures
> > > > > successfully in regular Python code, but I can't make it work with
> > > web2py.
> > > > > Any thoughts on how to achieve this?
> >
> > > > > web2py finds functions by reading the (static) controller file
> itself.
> > > See
> > > > > gluon.compileapp.run_controller_in, in particular this line:
> >
> > > > >         exposed = regex_expose.findall(code)
> >
> > > > > So, no dynamically generated controller actions, at least not
> directly.
> >
> > > > > I haven't given this much thought, but one way you might accomplish
> the
> > > > > same effect would be to push the dynamic function name down one
> level
> > > in the
> > > > > URL, something like:http://domain.com/app/dynamic/index/function/.
> ..
> >
> > > > > ...where 'dynamic' is the controller with dynamic functions, and
> index
> > > is a
> > > > > (static) function that calls function dynamically. You might
> optimize
> > > the
> > > > > lookup function to extract only the one desired function from your
> page
> > > > > table.
> >
> > > > > Depending on your overall URL structure, you could rewrite the URLs
> to
> > > > > shorten them up.
> >
> > > > > A closure example - FAILS in web2py:
> > > > > top_pages = db(db.page.id > 0).select()
> > > > > def add_actions(top_pages):
> > > > >     for page in top_pages:
> > > > >         def inneraction(msg):
> > > > >             sidebar = None
> > > > >             return dict(message=msg, sidebar=sidebar)
> > > > >         inneraction.__name__ = page.link_name
> > > > >         globals()[page.link_name] = inneraction
> >
> > > > > add_actions(top_pages)
> >
> > > > > A exec example - FAILS in web2py:
> >
> > > > > ACTION_TEMPLATE = """
> > > > >  def NEW_ACTION():
> > > > >     sidebar = None
> > > > >     return dict(message='s', sidebar=sidebar)
> > > > >  """
> > > > > top_pages = db(db.page.id > 0).select()
> > > > > def makePages(pages):
> > > > >     for page in top_pages:
> > > > >         exec ACTION_TEMPLATE
> > > > >         NEW_ACTION.__name__ = page.link_name
> > > > >         globals()[page.link_name] = NEW_ACTION
> >
> > > > > makePages(pages)
> >
> > > > > Miguel
>

Reply via email to