On 9 April 2012 15:41, Brian Sutherland <br...@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
_______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org https://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope )