|
Seb
seb.dailly at gmail.com
Thu Jun 14 17:00:56 EDT 2007
Hello !
I've found something a bit strange in mod_python : the pickle
instruction doesn't work when we want to save classes ( there is no
problème with tupple or list.. )
I made this code for explain it:
-->
import mod_python
import pickle
#Create a very simple class object
class another_class:
def __init__(self, text):
self.text = text
#Another one class
class a_class:
def __init__(self):
self.elements = []
#Add an element of the second class
self.add_entry("test")
self.save()
def add_entry(self, name):
self.elements.append( another_class(name) )
def save(self):
#Try to save it with pickle.. works but
result = pickle.dumps(self.elements)
#We can't load the data after !
self.elements = pickle.loads(result)
#If all works good, send a message
def handler(req):
req.write( 'ok' )
return(mod_python.apache.OK)
#We run this class outside any mod_python event
my_class = a_class()
<--
And here is the result :
-->
MOD_PYTHON ERROR
ProcessId: 5104
Interpreter: 'localhost.localdomain'
ServerName: 'localhost.localdomain'
DocumentRoot: '/var/www/'
URI: '/~sebastien/test/'
Location: None
Directory: '/home/sebastien/public_html/test/'
Filename: '/home/sebastien/public_html/test/'
PathInfo: ''
Phase: 'PythonHandler'
Handler: 'handler'
Traceback (most recent call last):
File "/usr/lib/python2.4/site-packages/mod_python/importer.py", line
1537, in HandlerDispatch
default=default_handler, arg=req, silent=hlist.silent)
File "/usr/lib/python2.4/site-packages/mod_python/importer.py", line
1202, in _process_target
module = import_module(module_name, path=path)
File "/usr/lib/python2.4/site-packages/mod_python/importer.py", line
296, in import_module
log, import_path)
File "/usr/lib/python2.4/site-packages/mod_python/importer.py", line
680, in import_module
execfile(file, module.__dict__)
File "/home/sebastien/public_html/test/handler.py", line 35, in ?
my_class = a_class()
File "/home/sebastien/public_html/test/handler.py", line 18, in __init__
self.save()
File "/home/sebastien/public_html/test/handler.py", line 27, in save
self.elements = pickle.loads(result)
File "pickle.py", line 1394, in loads
return Unpickler(file).load()
File "pickle.py", line 872, in load
dispatch[key](self)
File "pickle.py", line 1083, in load_inst
klass = self.find_class(module, name)
File "pickle.py", line 1138, in find_class
__import__(module)
ImportError: No module named _mp_e3b5c44c50230d33c470783bc2809f23
MODULE CACHE DETAILS
Accessed: Thu Jun 14 22:49:06 2007
Generation: 3
_mp_e3b5c44c50230d33c470783bc2809f23 {
FileName: '/home/sebastien/public_html/test/handler.py'
Instance: 3 [RELOAD]
Generation: 3 [ERROR]
Modified: Thu Jun 14 22:48:49 2007
Imported: Thu Jun 14 22:37:06 2007
}
<--
When I launch this program inside a terminal, all works fine, there
are no error message, so I don't understand what happend..
|