Graham Dumpleton
graham.dumpleton at gmail.com
Thu Jun 14 18:40:06 EDT 2007
Read: http://www.dscpl.com.au/wiki/ModPython/Articles/IssuesWithSessionObjects Although document was written in reference to sessions, they use pickle and thus it still applies. Graham On 15/06/07, Seb <seb.dailly at gmail.com> wrote: > 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..
|