Skip to content

Normal metaclass resolution not applied to InterfaceClass #16

Closed
@tseaver

Description

@tseaver

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 in InterfaceClass.__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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions