05-20-05 10:45 PM
[ http://issues.apache.org/jira/brows...HON-54?page=all ]
Nicolas Lehuen resolved MODPYTHON-54:
-------------------------------------
Resolution: Fixed
OK, I've finally settled to only implement get_page(req,path), which accepts
an absolute or relative path. import_module was either too flaky in its pre
vious implementation (with its DummyModule wrapper which I wasn't too proud
of), or too ambitious in th
e envisioned implementation (which managed dependencies between pages) given
that Vampire already does this very well.
get_page requires a request object, so it can only be used in the context of
a request. So this is possible :
# index.py
from mod_python.publisher import get_page
def index(req):
return 'foobar.py page says "%s"'%getpage(req,'foobar.py').index(req)
# foobar.py
def index(req):
return "Hello, world !"
But this is no longer possible :
# index.py
from mod_python.publisher import import_page
foobar = import_page('foobar.py')
I keep this for a future release, with a possible convergence between Vampir
e and mod_python on this subject ?
> Add a way to import a published page into another published page
> ----------------------------------------------------------------
>
> Key: MODPYTHON-54
> URL: http://issues.apache.org/jira/browse/MODPYTHON-54
> Project: mod_python
> Type: Improvement
> Versions: 3.2.0
> Reporter: Nicolas Lehuen
> Assignee: Nicolas Lehuen
> Fix For: 3.2.0
>
> Before mod_python 3.2, standard Python modules and published modules could
be imported the same way, using apache.import_module. This had a number of
disadvantages, leading to MODPYTHON-8, MODPYTHON-9, MODPYTHON-10, MODPYTHON-
11 and MODPYTHON-12.
> All these bugs were fixed by separating the published modules from the standard Py
thon module. apache.import_module can still be used to import standard modules, but
published modules are now fully managed by mod_python.publisher, and are not insert
ed
into sys.modules.
> The problem is that there is a use case of importing a published module fr
om another published module :
> /index.py----------------
> def index(req):
> return "Hello, world !"
> def utility_function(foobar):
> return foobar+1
> /other.py----------------
> import os
> directory = os.path.split(__file__)[0]
> other_index = apache.import_module("index",path=[directory])
> def index(req):
> return "%s %i"%(other_index.index(req),other_index.utility_function(20
04))
> This was alread a bit of a hack in 3.1.4, but in 3.2 it does not really work the e
xpected way since the imported module (other_index in the example) is not the same m
odule as the one the publisher would use to publish /index.py. This could be trouble
som
e if the developer wanted to share some data between the modules, e.g. a cache or a connecti
on pool, but not if he only wanted to share some code.
> Therefore, we need to provide a clean API in mod_python.publisher to allow develop
ers to reference another published module.
[ Post a follow-up to this message ]
|