There's a bug in the ScriptablePlugin, which might render a
PAS-enabled instance useless. In manage_updateInterfaces, the call to
'directlyProvides' passes *all* provided interfaces, and not only the
ones previously directlyProvided.

       klass_interfaces = [x for x in implementedBy(ScriptablePlugin)]
       directlyProvides( self, *(klass_interfaces + new_interfaces) )

While this is not completely wrong, it has caused me lots of grief,
because some references to interfaces in Products.Five.bbb got
persisted that way, and now that Five.bbb is gone those instances of
the ScriptablePlugin are broken, and you can't get in through the ZMI
to remove them.

Even after that is corrected there is still an issue if some
directlyProvided interface goes away, because
zope.interface.declarations.Provides doesn't cope with this. I've
reported this other issue on the zope3-dev list a few minutes ago. A
workaround for PAS would be to define __setstate__/__getstate__ on
ScriptablePlugin and 'clean up' the Provides declaration.

Sidnei da Silva
Enfold Systems      
Fax +1 832 201 8856     Office +1 713 942 2377 Ext 214
Zope-PAS mailing list

Reply via email to