Vous êtes ici : Accueil / Forums & ML / Forums Python / Forum général Python / mod_python - garder des objets en session

mod_python - garder des objets en session

Remonter à Forum général Python
  • mod_python - garder des objets en session

    Envoyé par psycofdj le 20 Septembre 2007 à 04:35
    Bonjour a tous,

    Ma question traite de la sauvegarde d'objets dans une session mod_python.Session.

    J'ai entendu parler de certaines limitations sur le type d'object 'sauvegardable' en fonction des differents type de session (mod_python.session.session_type).
    Ces limitations proviendraient de l'incapacite du module cPickle a serialiser certains types d'objets.
    Il semble egalement que selon la valeur de mod_python.session.session_type, le processus de sauvegarde change, il serait donc theoriquement possible d'eviter l'utilisation de cPickle.
    Je n'ai cependant pas reussi a trouver le details de ces limitations.

    Tojours est il que python me sort une erreur quand j'essaye de sauvegarder ma session.

    from mod_python import Session
    req.session = Session.Session(req)
    req.session['user'] = user #instance de la classe 'User'
    req.session.save()

    erreur :

    Phase: 'PythonHandler'
    Handler: 'mod_python.publisher'

    Traceback (most recent call last):

    File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1537, in HandlerDispatch
    default=default_handler, arg=req, silent=hlist.silent)

    File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1229, in _process_target
    result = _execute_target(config, req, object, arg)

    File "/usr/lib/python2.5/site-packages/mod_python/importer.py", line 1128, in _execute_target
    result = object(arg)

    File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 213, in handler
    published = publish_object(req, object)

    File "/usr/lib/python2.5/site-packages/mod_python/publisher.py", line 425, in publish_object
    return publish_object(req,util.apply_fs_data(object, req.form, req=req))

    File "/usr/lib/python2.5/site-packages/mod_python/util.py", line 554, in apply_fs_data
    return object(**args)

    File "/home/psyco/prog/workspaces/test/pycast/src/login.py", line 88, in login
    req.session.save()

    File "/usr/lib/python2.5/site-packages/mod_python/Session.py", line 269, in save
    self.do_save(dict)

    File "/usr/lib/python2.5/site-packages/mod_python/Session.py", line 407, in do_save
    dbm[self._sid] = cPickle.dumps(dict)

    File "/home/psyco/prog/workspaces/test/pycast/src/classes/admin/users.py", line 29, in __getattr__
    return self._datas[item]

    KeyError: '__getinitargs__'


    Ma question est donc :
    - Pensez moi, comme moi, que nous sommes en presence d'un probleme venant de ces dites limitations ?
    - Ou puis-je trouver une documentation claire expliquant en quoi ma classe ne peut pas etre serialisee par cPickle ?
    - Savez vous comment je pourrais contourner mon probleme sans modifier ma classe et si possible sans changer mon mod_python.session.session_type (changement qui requiere une modification de la configuration apache, ce que je voudrais eviter)

    Merci d'avance.

    ---
    Fan de mon 'ti python
    • Re: mod_python - garder des objets en session

      Envoyé par pacificator le 20 Septembre 2007 à 08:21
      concernant pickle, voir ce lien vers la doc officiel
      • Re: mod_python - garder des objets en session

        Envoyé par psycofdj le 20 Septembre 2007 à 11:39
        Merci, ceci repond a ma question.

        Quelques precisions sur mod_python.session.session_type :
        - DbmSession : Session gardee en base de donnee.
        - FileSession : Session gardee dans un fichier.
        - MemorySession : Session gardee en memoire.

        Je suppose sonc que Dbm et FileSession ont besion de serialiser les objets qu'ils manipullent et donc utilisent cPickle.
        En MemorySession, l'object est garde intacte en memoire. Les contraintes de cPickle ne s'appliquent pas.

        La valeur par defaut de mod_python.session.session_type semble etre differente selon le systeme d'exploitatoin. (MemorySession pour windows, DbmSession ou FileSession pour unix)


        Dans mon cas, un coup de

        PythonOption mod_python.session.session_type MemorySession

        et l'erreur a disparue.
        ----
        fan de mon 'ti python
Rendu par Ploneboard