mercurial/thirdparty/zope/interface/declarations.py
changeset 37179 49630e75635d
parent 37178 68ee61822182
child 37208 b9dd8403d8ff
equal deleted inserted replaced
37178:68ee61822182 37179:49630e75635d
    32 from types import FunctionType
    32 from types import FunctionType
    33 from types import MethodType
    33 from types import MethodType
    34 from types import ModuleType
    34 from types import ModuleType
    35 import weakref
    35 import weakref
    36 
    36 
    37 from .advice import addClassAdvisor
    37 from . import advice as advicemod
    38 from .interface import InterfaceClass
    38 from .interface import InterfaceClass
    39 from .interface import SpecificationBase
    39 from .interface import SpecificationBase
    40 from .interface import Specification
    40 from .interface import Specification
    41 from ._compat import CLASS_TYPES as DescriptorAwareMetaClasses
    41 from ._compat import CLASS_TYPES as DescriptorAwareMetaClasses
    42 from ._compat import PYTHON3
    42 from ._compat import PYTHON3
   449 
   449 
   450     if '__implements_advice_data__' in locals:
   450     if '__implements_advice_data__' in locals:
   451         raise TypeError(name+" can be used only once in a class definition.")
   451         raise TypeError(name+" can be used only once in a class definition.")
   452 
   452 
   453     locals['__implements_advice_data__'] = interfaces, classImplements
   453     locals['__implements_advice_data__'] = interfaces, classImplements
   454     addClassAdvisor(_implements_advice, depth=3)
   454     advicemod.addClassAdvisor(_implements_advice, depth=3)
   455 
   455 
   456 def implements(*interfaces):
   456 def implements(*interfaces):
   457     """Declare interfaces implemented by instances of a class
   457     """Declare interfaces implemented by instances of a class
   458 
   458 
   459       This function is called in a class definition.
   459       This function is called in a class definition.
   730         raise TypeError(
   730         raise TypeError(
   731             "classProvides can only be used once in a class definition.")
   731             "classProvides can only be used once in a class definition.")
   732 
   732 
   733     locals["__provides__"] = _normalizeargs(interfaces)
   733     locals["__provides__"] = _normalizeargs(interfaces)
   734 
   734 
   735     addClassAdvisor(_classProvides_advice, depth=2)
   735     advicemod.addClassAdvisor(_classProvides_advice, depth=2)
   736 
   736 
   737 def _classProvides_advice(cls):
   737 def _classProvides_advice(cls):
   738     # This entire approach is invalid under Py3K.  Don't even try to fix
   738     # This entire approach is invalid under Py3K.  Don't even try to fix
   739     # the coverage for this block there. :(
   739     # the coverage for this block there. :(
   740     interfaces = cls.__dict__['__provides__']
   740     interfaces = cls.__dict__['__provides__']