Description
In https://bugs.launchpad.net/zope.interface/+bug/791218, @lrowe reported:
While experimenting with my InterfaceClass subclass I noticed that it was only being used when it was specified as the first of the bases. I believe this is because InterfaceClass is not a subclass of
type
, so the normal metaclass derivation logic is not applied. The branch at svn+ssh://svn.zope.org/repos/main/zope.interface/branches/elro-metaclass-resolution implements that logic inInterfaceClass.__new__
, picking from the base metaclasses that metaclass which subclasses all other base metaclasses.The motivating factor here is: I need an Interface with a hook that gets called after
InterfaceClass.__init__
to allow for:
- Checking that field names supplied as tagged values from directives correspond to actual field names to detect typos.
- Registering the
Interface
instance for further configuration to be executed by a zope.configuration action.Relevant changeset: http://zope3.pov.lt/trac/changeset/121497/zope.interface/branches/elro-metaclass-resolution
Example InterfaceClass subclass: http://dev.plone.org/plone/browser/plone.supermodel/branches/elro-directives/plone/supermodel/model.py#L58