equal
deleted
inserted
replaced
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__'] |