Spaces:
Runtime error
Runtime error
from abc import ABCMeta | |
def do_decorate(attr, value): | |
return not attr.startswith('_') and callable(value) and getattr(value, '__decorate__', True) | |
def factory(decorator): | |
class ApplyDecoratorMeta(ABCMeta): | |
"""Metaclass which applies a decorator to all public, non-special | |
instance methods. | |
Note: | |
`decorator` must use @functools.wraps(f) for abstractmethod to work. | |
https://stackoverflow.com/questions/10067262/automatically-decorating-every-instance-method-in-a-class | |
""" | |
def __new__(cls, name, bases, dct): | |
for attr, value in dct.items(): | |
if do_decorate(attr, value): | |
dct[attr] = decorator(value) | |
return super(ApplyDecoratorMeta, cls).__new__(cls, name, bases, dct) | |
return ApplyDecoratorMeta | |
def dont_decorate(func): | |
func.__decorate__ = False | |
return func | |
def ApplyDecorator(decorator): | |
return factory(decorator)(str('ApplyDecorator'), (), {}) | |