|
Richard Lewis
richardlewis at fastmail.co.uk
Mon Jun 12 07:15:41 EDT 2006
Hello mod_pythoners,
I'm still working on that code to write a little Cocoon replacement which I
posted regarding the other week. Its going quite well, but I've come up
against another problem that I can't seem to find the answer to:
OK, this works:
_>>> module = "transforms.search_filter"
_>>> handler = "search_filter"
_>>> import os
_>>> os.chdir("/var/www-studio/")
_>>> sf = __import__(module.replace(".", os.sep)).__dict__[handler]()
_>>> dir(sf)
[..expected output...]
it corretly imports the module "/var/www-studio/transforms/search_filter.py"
and creates an instance of its "search_filter" class.
However, the same code used in my application throws the following ImportError
exception:
File "/usr/local/lib/python2.3/site-packages/pycoon/transformers/sax_handler_transformer.py",
line 30, in __init__
self.handler = __import__(module.replace(".", os.sep)).__dict__[handler]()
ImportError: No module named transforms/search_filter
I've tried giving it absolute paths, mixing various combinations of "." and
os.sep and also using the imp.find_module and imp.load_module functions but I
still get the same problem. (Actually, the imp.* functions tell me that there
is no frozen module or some such bizarre error...)
As it works from the interpreter, I can only assume that it must be something
to do with my application. However, I've been constantly re-designing as I
work (one of the joys of Python!) and this also used to work in my
application when I was using one *big* script file which lived in the same
directory as "transforms/search_filter.py". I've now separated most of the
classes out into their own files and split the "library"-like code away from
the "program"-like code like this:
The "library"-like code:
/usr/local/lib/python2.3/site-packages/pycoon/
__init__.py # the handler(req) function is implemented here
/sources/
__init__.py
xml_source.py
...
/transformers/
__init__.py
xslt_transformer.py
sax_handler_transformer.py # this is where the problem is
...
the sax_handler_transformer.py module contains a sax_handler_transformer class
whose __init__ method tries to import a variable named
xml.sax.handler.ContentHandler class like this:
def __init__(self, module, handler):
self.handler = __import__(module.replace(".", os.sep)).__dict__[handler]()
Then the website which is using the modules (the "program"-like code) is like
this:
/var/www-studio/
sitemap.xml # Specialised config file
studio.conf # Apache config: PythonHandler pycoon
transforms/
site2html.xslt
search_filter.py # this is where the problem is,
# contains search_filer class
# derived from xml.sax.handler.ContentHandler
I'm using mod_python, but I also get the same error when I use my command line
testing script. Its Python 2.3.5 as supplied by Debian "unstable".
Um, I hope that makes sense. Any thoughts on why this isn't working would be
very much appreciated.
Cheers,
Richard
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-
Richard Lewis
Sonic Arts Research Archive
http://www.sara.uea.ac.uk/
-=-=-=-=-=-=-=-=-=-=-=-=-=-
|