[mod_python] Pickle can't save classes instances in mod_python ?

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..



More information about the Mod_python mailing list