Just to follow up on this topic... In order to remedy this problem storing objects in the session, I ended up writing an InlinePickler module:
#Copyright (c) 2009 by Mark D. Lesh (www.marklesh.com) #All rights reserved. # #InlinePickler is Licensed under GPL version 2.0 #<http://www.gnu.org/licenses/old-licenses/gpl-2.0.html> import os import pickle from StringIO import StringIO class InlineUnpickler(pickle.Unpickler): """ Usage: #To setup InlinePickler for TestClass: #import the InlinePickler.py module from applications.ApplicationName.modules import InlinePickler #Define your class with the following serialization methods class TestClass: def serialize(self): return InlinePickler.dumps(self) def deserialize(self,serialized_class): return InlinePickler.loads (serialized_class,self) def __init__(self): pass #To store TestClass instance to session: #create your object's name in the session session.test_obj={} #create your instance and populate it x = TestClass() x.list=['1','2','3'] #store it by calling the instance's serialize method session.test_obj=x.serialize() #To retrieve the TestClass instance from the session #Instantiate the class, and call the deserialize method x= TestClass().deserialize(session.test_obj) """ def set_custom_class_type(self,custom_class_type): self.custom_class_type=custom_class_type def load_global(self): self.append(self.custom_class_type) def find_class(self, module, name): if (self.custom_class_type!=None): return self.custom_class_type else: __import__(module) mod = sys.modules[module] klass = getattr(mod, name) return klass def loads(str,instance): file = StringIO(str) inline_pickle=InlineUnpickler(file) inline_pickle.set_custom_class_type(instance.__class__) return inline_pickle.load() def dumps(instance): return pickle.dumps(instance) On May 13, 1:24 am, mdipierro <mdipie...@cs.depaul.edu> wrote: > You cannot store your own classes in thesession. This is because thesessionis > retrieved automatically for you before your controller is > called and outside the scope where the function is defined. > > This is a general problem with Python. > > Try this: > import picke > class A: pass > pickle.dump(A(),open('afile.pickle','w')) > > Then from a DIFFERENT program > import pickle > print pickle.load(open('afile.pickle','r)) > > the load will fail because class A is not define there. > > Massimo > > On May 13, 12:14 am,lesh<markl...@marklesh.com> wrote: > > > I am having difficulty storing a simple (non-SQL) object in the > >session. I wondered if anyone could give me a clue as to why. The > > following works: > > > def update_profile(): > > if (session.sections!=None): > > session.sections=None > > return dict(sections='spam') > > else: > > session.sections={} > > #x = testClass() > > x = 'eggs' > > session.sections=x > > return dict(sections=`x`) > > > class testClass: > > pass > > > with a toggling result on successive reloads of: > > > ' e g g s ' > > <<RELOAD THE PAGE>> > > s p a m > > ... > > > However if I swap the two lines as below: > > > def update_profile(): > > if (session.sections!=None): > > session.sections=None > > return dict(sections='spam') > > else: > > session.sections={} > > x = testClass() > > #x = 'eggs' > > session.sections=x > > return dict(sections=`x`) > > > class testClass: > > pass > > > The result fails to toggle: > > > <__b u i l t i n__.testClassinstanceat0xab18ccc> > > <<RELOAD THE PAGE>> > > <__b u i l t i n__.testClassinstanceat0xab094cc> > > ... > > > Which appears that the object doesn't ever actually store into the > >session. I searched the group and from what I can tell this is > > possible, but I can't figure out what I'm doing wrong. > > > Thanks in advance! > > > --Lesh --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py Web Framework" group. To post to this group, send email to web2py@googlegroups.com To unsubscribe from this group, send email to web2py+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/web2py?hl=en -~----------~----~----~----~------~----~------~--~---