Source code for natch.core.decoration

from natch.core.globals import registry
from natch.exceptions import NeverMatchesError


[docs]class Decoration(object):
[docs] @classmethod def make_rule_decorator(cls, rule_cls): def rule_decorator(*rule_args, **rule_kwargs): rule = rule_cls(*rule_args, **rule_kwargs) def func_wrapper(func): registry.register(func, rule) def executor(*args, **kwargs): f = registry.lookup(func, *args, **kwargs) if f is None: raise NeverMatchesError() result = f(*args, **kwargs) return result return executor return func_wrapper return rule_decorator