[Zope-CMF] Re: Weird error
Laurence Rowe
l at lrowe.co.uk
Thu Apr 17 10:47:12 EDT 2008
.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 at lists.zope.org
> http://mail.zope.org/mailman/listinfo/zope-cmf
>
> See http://collector.zope.org/CMF for bug reports and feature requests
>
More information about the Zope-CMF
mailing list