.implementedBy is for classes (is this interface implemented by instances of a class), .providedBy is for instances (is this interface provided by this object).

The only way I can think that you may trigger this error during unpickling is if you have somehow managed to get an __implemented__ attribute on the object itself. Not sure how you would manage that.


Probably the best bet is to truncate your filestorage to a transaction before the change was persisted. Otherwise, you'll need to provide some more information, i.e. the pickle and the class definition. PDBDebugMode may be of help.

Laurence


Charlie Clark wrote:
Hi,

whilst trying out some Zope 3 stuff (implementedBy, providedBy) I managed to screw up some portal objects but I'm not quite sure how and I've no idea how to fix them.

I effectively did something like:

for obj in folder.contentValues:
    if IMyInterface.implementedBy(obj):
        do_something_with_object()

If I understand things correctly this should not affect the objects themselves at all but it does and leads to the following error when I subsequently try and access them.

Traceback (most recent call last):
File "/opt/Zope-2.10/lib/python/ZODB/Connection.py", line 761, in setstate
    self._setstate(obj)
File "/opt/Zope-2.10/lib/python/ZODB/Connection.py", line 819, in _setstate
    self._reader.setGhostState(obj, p)
File "/opt/Zope-2.10/lib/python/ZODB/serialize.py", line 604, in setGhostState
    state = self.getState(pickle)
  File "/opt/Zope-2.10/lib/python/ZODB/serialize.py", line 597, in getState
    return unpickler.load()
File "/opt/Zope-2.10/lib/python/zope/interface/declarations.py", line 352, in implementedByFallback
    raise TypeError("ImplementedBy called for non-factory", cls)
TypeError: (<exceptions.TypeError instance at 0x348cc88>, <built-in function implementedBy>, (<Container at >,))

Any idea how I can fix this?

It turns out that I need to use .providedBy() rather than .implementedBy() although I'm not too clear of the distinction.

Charlie
--
Charlie Clark
Helmholtzstr. 20
Düsseldorf
D- 40215
Tel: +49-211-938-5360
GSM: +49-178-782-6226



_______________________________________________
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests


_______________________________________________
Zope-CMF maillist  -  Zope-CMF@lists.zope.org
http://mail.zope.org/mailman/listinfo/zope-cmf

See http://collector.zope.org/CMF for bug reports and feature requests

Reply via email to