views:

79

answers:

2

In my django app I was creating an extended user profile using session vars. But when registration form was saved and user was about to create, I got following error :

Traceback (most recent call last):

  File "\Python26\Lib\site-packages\django\core\servers\basehttp.py", line 279, in run
    self.result = application(self.environ, self.start_response)

  File "\Python26\Lib\site-packages\django\core\servers\basehttp.py", line 651, in __call__
    return self.application(environ, start_response)

  File "\Python26\Lib\site-packages\django\core\handlers\wsgi.py", line 245, in __call__
    response = middleware_method(request, response)

  File "\Python26\Lib\site-packages\django\contrib\sessions\middleware.py", line 36, in process_response
    request.session.save()

  File "\Python26\Lib\site-packages\django\contrib\sessions\backends\db.py", line 53, in save
    session_data = self.encode(self._get_session(no_load=must_create)),

  File "\Python26\Lib\site-packages\django\contrib\sessions\backends\base.py", line 88, in encode
    pickled = pickle.dumps(session_dict, pickle.HIGHEST_PROTOCOL)

PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed

I've googled for an answer, but found nothing interesting. Any workarounds for this ?

+1  A: 

It appears you have a cStringIO object in your session (perhaps an uploaded file?), these cannot be pickled. Either write custom pickling code or make sure all your session data can be serialized.

Ivo van der Wijk
yes, I'm uploading a file.
tom_pl
A: 

Something weird going on here, because the error refers to cStringIO.StringO whereas the class is actually cStringIO.StringIO, with an extra I. Have you misspelled the name somewhere?

Daniel Roseman