[Python-Dev] removing inst_persistent_id from pickle (original) (raw)
Jeremy Hylton jeremy@alum.mit.edu
Wed, 13 Nov 2002 11:16:36 -0500
- Previous message: [Python-Dev] Re: Adopting Optik
- Next message: [Python-Dev] Re: removing inst_persistent_id from pickle
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Pickle and cPickle have an undocumented hook called inst_persistent_id(). When Barry updated the pickle documentation (round about the 2.2 release), no one could figure out what it did. I think we've figured out what it does, finally, but I think we should get rid of it before someone tries to use it.
The pickler has a hook for handling persistent objects. The hook basically allows objects to be pickled by reference to some mechanism external to the pickler. The pickler gets a persistent_id() function that returns the external reference. The unpickler needs a persistent_load() function that returns the object given the reference from persistent_id(). This process is fairly general, although the only use I'm familiar with is ZODB.
The inst_persistent_id() hook seems to be designed for a very special case -- that the persistent_id() function returns an object that is unpicklable. The function is only called when the pickler encounters an object that it hasn't handled via persistent_id() or the dispatch table. The object returned by inst_persistent_id() is always passed to save_pers(), just like persistent_id().
We imagine the intended control flow is:
- pickler created in binary mode
- persistent_id() returns an unpicklable object
- inst_persistent_id() is called to convert this to a picklable object
I don't think this odd case is worth the added complexity, particularly since the hook function probably won't be called for a text-mode pickler.
Anyone object to its removal?
Jeremy
- Previous message: [Python-Dev] Re: Adopting Optik
- Next message: [Python-Dev] Re: removing inst_persistent_id from pickle
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]