Hi,

I have some helper code in applications/myapp/modules/site_helpers.py.
I've been trying to cache the results of some of the functions there.

The current content is:

from gluon.shell import exec_environment
ee = exec_environment('applications/myapp/models/db.py')
cache = ee.cache
@cache('cached_result', time_expire = 6000, cache_model=cache.ram)
def my_fun():
    return "stuff"

Having this I can:

from applications.myapp.modules.site_helpers import *

without the exec_environment magic I can't even get this import to
work. Now when I call my_fun() I get an error which seems absolutely
arbitrary:

In [1]: from applications.myapp.modules.site_helpers import *
In [2]: my_fun()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call
last)

/pub/web2py/applications/myapp/models/menu.py in <module>()
----> 1
      2
      3
      4
      5

TypeError: action() takes no arguments (4 given)

Tried using gluon.cache.Cache directly avoiding exec_environment but
it needs a Request instance to get created (for which I again seem to
need exec_environment).

So would appreciate it if someone helps me with these two questions:
1. What is the recommended way to use globals like these in the
modules code? I see that exec_environment can bring me the model stuff
but got the impression that other things (like cache in this example)
aren't that easy to get.
2. What is the penalty for using exec_environment? Can I use it freely
in helper code placed in /modules (in the book I see a note in that
section "While everything discussed here works fine, we recommend
instead building your application using components", which am not sure
is going to help me in this case)?

Apologies if what I am asking is obvious. Appreciate your help...


Reply via email to