from zope.interface.implements import implements as addDeclarationToType |
from zope.interface.implements import implements as addDeclarationToType |
|
|
__all__ = [ |
__all__ = [ |
'Interface', 'Attribute', 'adapt', 'implements', 'classProvides' |
'Interface', 'Attribute', 'adapt', 'implements', 'classProvides', |
|
'directlyProvides', 'moduleProvides', 'instancesProvide' |
] |
] |
|
|
# We don't want to export 'addDeclarationToType' by default; we only use it |
# We don't want to export 'addDeclarationToType' by default; we only use it |
|
|
|
|
_marker = object() |
_marker = object() |
from sys import _getframe, exc_info |
from sys import _getframe, exc_info, modules |
|
|
from types import ClassType |
from types import ClassType |
ClassTypes = ClassType, type |
ClassTypes = ClassType, type |
|
|
|
|
|
|
|
|
def adapt(obj, protocol, default=_marker): |
def adapt(obj, protocol, default=_marker): |
|
|
"""PEP 246-alike: Adapt 'obj' to 'protocol', return 'default' |
"""PEP 246-alike: Adapt 'obj' to 'protocol', return 'default' |
def implements(*interfaces): |
def implements(*interfaces): |
|
|
def callback(klass): |
def callback(klass): |
klass.__implements__ = interfaces |
instancesProvide(klass, *interfaces) |
return klass |
return klass |
|
|
addClassAdvisor(callback) |
addClassAdvisor(callback) |
|
|
|
|
|
def instancesProvide(klass, *interfaces): |
|
klass.__implements__ = interfaces |
|
|
|
|
|
|
def classProvides(*interfaces): |
def classProvides(*interfaces): |
|
|
def callback(klass): |
def callback(klass): |
addClassAdvisor(callback) |
addClassAdvisor(callback) |
|
|
|
|
|
def directlyProvides(ob, *interfaces): |
|
ob.__implements__ = interfaces |
|
|
|
|
|
def moduleProvides(*interfaces): |
|
directlyProvides( |
|
modules[_getframe(1).f_globals['__name__']], |
|
*interfaces |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|