[Zope-dev] Adding broken/missing support to zope.interface?

Tres Seaver tseaver at palladion.com
Mon Apr 9 20:33:12 UTC 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/09/2012 04:15 PM, Martin Aspeli wrote:
> 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

Agreeed.  I'm more like -20 on this implementation, but +1 on the goal.

>> 
>> 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.

- -1 on any dependency, soft or hard, from zope.interface -> ZODB

> 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.

Persistent component registries are not a good enough reason to add such
coupling (I'd be in favor of splitting support for persistent registries
out of zope.component, too, while we're at it).

 Let's put the "broken" support into code which depends on
zope.interface, zope.component, and the ZODB, and invert the dependency
by having the new code install something into the base code which
provides the desired support:  the only change to zope.interface should
be documenting the insertion point, and testing that it does the right
thing when a dummy is plugged into it.



Tres.
- -- 
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk+DR4gACgkQ+gerLs4ltQ5THACgzvZtoksPW/V30TsR3pWa7PyY
WUwAniRY51tIHXS1ohd/6K+TkZZwy+7A
=kdaO
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list