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?

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