I think I fixed it in trunk. There seems to be a bug in python 2.5 and python 2.6.1 (fixed in 2.6.2) that does allow copy_reg.pickle() to register an unpickler that is a staticmethod of the class/object being pickled. I moved the staticmethods outside the class and it works.
Let me know if this works for you. Massimo On Oct 30, 4:08 pm, "mr.freeze" <nat...@freezable.com> wrote: > If I change this: > copy_reg.pickle(DALRef, DALRef.__pickler__, DALRef.__unpickler__) > to this: > copy_reg.pickle(type(DALRef), DALRef.__pickler__, > DALRef.__unpickler__) > > ...it goes a little further but then throws error trying to find > __getstate__ in copyreg.py: > ProgrammingError: Cannot operate on a closed database. > > line 72: > try: > getstate = self.__getstate__ > except AttributeError: > > On Oct 30, 3:46 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > The problem is around there. The problem only exists with 2.5 and > > 2.6.1 not with 2.6.2 and it has to do with serializing DALRef. > > > On Oct 30, 2:22 pm, "mr.freeze" <nat...@freezable.com> wrote: > > > > Perhaps you should be passing type(DALRef) to copy_reg.pickle instead > > > of DALRef and also implementing a __getstate__ function? > > > > copy_reg.pickle(type(DALRef), DALRef.__pickler__, > > > DALRef.__unpickler__) > > > > I'm out of my depth but trying to help. > > > > On Oct 30, 1:41 pm, "mr.freeze" <nat...@freezable.com> wrote: > > > > > Massimo, do you get the error on T3 running from trunk? > > > > > On Oct 30, 12:43 pm, mdipierro <mdipie...@cs.depaul.edu> wrote: > > > > > > I understand that but that is fixed in trunk. Please try and I will > > > > > release 1.70. > > > > > > On Oct 30, 12:05 pm, Wes James <compte...@gmail.com> wrote: > > > > > > > I'm not sure this affecting what is going on. It is simply logging > > > > > > in > > > > > > to t3 wiki and the error comes up, there is no record in the > > > > > > session - > > > > > > plain t3 wiki usage - logging in. As I mentioned, this works fine in > > > > > > 1.68.1, go to 1.69.1 and the error shows up. Fran is having the > > > > > > same > > > > > > issue.... > > > > > > > -wes > > > > > > > On Fri, Oct 30, 2009 at 8:42 AM, mdipierro > > > > > > <mdipie...@cs.depaul.edu> wrote: > > > > > > > > You are storing in session something that cannot go in a > > > > > > > session. For > > > > > > > example a record. You can only store in a session a record id, > > > > > > > not a > > > > > > > record. This is because the record will have changed when the > > > > > > > session > > > > > > > is retrieved. > > > > > > > > On Oct 30, 8:59 am, Wes James <compte...@gmail.com> wrote: > > > > > > >> This is what I'm getting now: > > > > > > > >> Traceback (most recent call last): > > > > > > >> File "/opt/web2py-1.69.1/gluon/main.py", line 483, in wsgibase > > > > > > >> session._try_store_on_disk(request, response) > > > > > > >> File "/opt/web2py-1.69.1/gluon/globals.py", line 369, in > > > > > > >> _try_store_on_disk > > > > > > >> cPickle.dump(dict(self), response.session_file) > > > > > > >> File > > > > > > >> "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/copy_reg.py", > > > > > > >> line 70, in _reduce_ex > > > > > > >> raise TypeError, "can't pickle %s objects" % base.__name__ > > > > > > >> TypeError: can't pickle function objects > > > > > > > >> -wes > > > > > > > >> On Fri, Oct 30, 2009 at 7:09 AM, mdipierro > > > > > > >> <mdipie...@cs.depaul.edu> wrote: > > > > > > > >> > This is because you are storing in a session something that is > > > > > > >> > not > > > > > > >> > pickable like a row or set of rows. > > > > > > > >> > On Oct 30, 2:25 am, Fran <francisb...@googlemail.com> wrote: > > > > > > >> >> On Oct 29, 11:15 pm, mdipierro <mdipie...@cs.depaul.edu> > > > > > > >> >> wrote: > > > > > > > >> >> > Fixed in trunk. I had to study to fix this one. > > > > > > >> >> > This is a major problem and calls for a new release asap. > > > > > > >> >> > If it fixes > > > > > > >> >> > it for you I will release. > > > > > > > >> >> I was also bitten by the "ProgrammingError: Cannot operate on > > > > > > >> >> a closed > > > > > > >> >> database." issue. > > > > > > > >> >> With latest trunk I get this error message instead (XP/Python > > > > > > >> >> 2.5.4): > > > > > > > >> >> Traceback (most recent call last): > > > > > > >> >> File "C:\Bin\web2py\gluon\main.py", line 483, in wsgibase > > > > > > >> >> session._try_store_on_disk(request, response) > > > > > > >> >> File "C:\Bin\web2py\gluon\globals.py", line 369, in > > > > > > >> >> _try_store_on_disk > > > > > > >> >> cPickle.dump(dict(self), response.session_file) > > > > > > >> >> File "c:\bin\python25\lib\copy_reg.py", line 69, in > > > > > > >> >> _reduce_ex > > > > > > >> >> raise TypeError, "can't pickle %s objects" % base.__name__ > > > > > > >> >> TypeError: can't pickle function objects > > > > > > > >> >> F > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "web2py-users" 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 -~----------~----~----~----~------~----~------~--~---