[Zope-dev] Adding broken/missing support to zope.interface? (was: experimental.broken - Graceful handling of broken interfaces and components in the ZODB)
Martin Aspeli
optilude+lists at gmail.com
Mon Apr 9 20:15:16 UTC 2012
On 9 April 2012 15:41, Brian Sutherland <brian at vanguardistas.net> wrote:
> On Sun, Apr 08, 2012 at 01:04:37PM -0700, Ross Patterson wrote:
> > experimental.broken is working well for me. It greatly aided me in
> > getting through a particularly nasty upgrade allowing me to cleanup the
> > ZCA cruft left by poorly behaved add-ons. I'd like to proceed with
> > adding the core of this to zope.interface and I need the
> > developers/maintainers to weigh in.
> >
> > The first and most fundamental matter is changing interface pickles such
> > that they can be unpickled into something that can fulfill the minimum
> > interface contract and don't break the ZCA. To that end, I'd like to
> > add the following to zope.interface.interface:
> >
> > ...
> > try:
> > from ZODB.broken import find_global
> > from ZODB.broken import IBroken
> > def find_interface(modulename, globalname,
> > Broken=IBroken, type=InterfaceClass):
> > """
> > Find a global interface, returning a broken interface if it
> can't be found.
> > """
> > return find_global(modulename, globalname,
> > Broken=IBroken, type=InterfaceClass)
> > except ImportError:
> > IBroken = Interface
> > def find_interface(modulename, globalname,
> > Broken=IBroken, type=InterfaceClass):
> > """
> > Find a global interface, raising ImportError if it can't be
> found.
> > """
> > # From pickle.Unpickler.find_class
> > __import__(module)
> > mod = sys.modules[module]
> > klass = getattr(mod, name)
> > return klass
> > ...
> > class InterfaceClass(Element, InterfaceBase, Specification):
> > ...
> > def __reduce__(self):
> > if self is IBroken:
> > return self.__name__
> > return (find_interface, (modulename, globalname))
> > ...
>
> -1
>
> For a number of reasons, but mainly because you add a test dependency on
> the ZODB from zope.interface. I think that zope.interface is such a
> fundamental package and the dependency is unacceptable.
>
It's a soft dependency only, looking at the code sample.
> There has lately been a LOT of work done reducing the dependency
> structure of zope.* packages. You need a VERY good reason to start
> reversing that.
It doesn't add any more (required) dependencies.
This is a real issue that is breaking the sites of a lot of real users of
zope.interface in a way that is hard to debug and reverse.
Can you think of a better way to get around it? Other than "don't get into
the situation" which isn't a valid answer as long as the ZTK ecosystem
supports persistent local components.
Martin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.zope.org/pipermail/zope-dev/attachments/20120409/70c67fa2/attachment.html>
More information about the Zope-Dev
mailing list