[Zope3-Users] Cannot Pickle

Marc Rijken marc at rijken.org
Wed Mar 9 06:37:30 EST 2005


Maybe the complete error will help:

Traceback (most recent call last):
   File 
C:\Python23\Lib\site-packages\Zope3\src\zope\publisher\publish.py", line
  143, in publish
     publication.afterCall(request, object)
   File 
"C:\Python23\Lib\site-packages\Zope3\src\zope\app\publication\browser.py"
, line 64, in afterCall
     super(BrowserPublication, self).afterCall(request, ob)
   File 
"C:\Python23\Lib\site-packages\Zope3\src\zope\app\publication\zopepublica
tion.py", line 161, in afterCall
     txn.commit()
   File 
"C:\Python23\Lib\site-packages\Zope3\src\transaction\_transaction.py", li
ne 300, in commit
     self._commitResources(subtransaction)
   File 
"C:\Python23\Lib\site-packages\Zope3\src\transaction\_transaction.py", li
ne 340, in _commitResources
     rm.commit(self)
   File "C:\Python23\Lib\site-packages\Zope3\src\ZODB\Connection.py", 
line 618, i
n commit
     self._store_objects(ObjectWriter(obj), transaction)
   File "C:\Python23\Lib\site-packages\Zope3\src\ZODB\Connection.py", 
line 640, i
n _store_objects
     p = writer.serialize(obj)  # This calls __getstate__ of obj
   File "C:\Python23\Lib\site-packages\Zope3\src\ZODB\serialize.py", 
line 294, in
  serialize
     return self._dump(meta, obj.__getstate__())
   File "C:\Python23\Lib\site-packages\Zope3\src\ZODB\serialize.py", 
line 303, in
  _dump
     self._p.dump(state)
UnpickleableError: Cannot pickle <type 'zope.security._proxy._Proxy'> 
objects

Marc Rijken wrote:
> Jim Fulton wrote:
> 
>> Marc Rijken wrote:
> 
> 
> <snip>
> 
>> I just tried this code, after adding the missing imports, and didn't get
>> an error, so, obviously, you aren't giving us the whole story. :)
> 
> 
> Hi Jim,
> 
> Posting the complete code, is too long. So I made an abstract summary. I 
>  have made a less abstract summary:
> 
> from persistent import Persistent
> from zope.app.container.btree import BTreeContainer
> from zope.app.container.contained import Contained
> 
> class TopicMapObject(Persistent):
>     pass
> 
> class TopicMap(BTreeContainer, TopicMapObject):
>    def createTopic(self, name):
>        self[name] = Topic()
> 
> class Topic(TopicMapObject, Contained):
>    type=None
> 
> tm = TopicMap()
> tm.createTopic('t1')
> tm.createTopic('t2')
> tm['t2'].type = tm['t1']
> 
> This code performs well if I execute it not as part of a zope3 instance. 
> When I put it in a zope3 instance, when tm is put in a ZODB folder and 
> when the steps are performed in separate sessions I get the Cannot 
> Pickle error at the last step. I hope this extra info will help you to 
> help me.
> 
> (I have an alternative solution by putting the name of the topic in the 
> type, so a string will be pickled. But the other solution is my prefered 
> one and I hope that that will work too.)
> 
> Thanx!
> 
> Marc
> 
> 



More information about the Zope3-users mailing list