def METHOD_NAME(func):
    @functools.wraps(func)
    def newFunction(self, *args, **kw):
        self._publish(f"will_{name}", *args, can_raise=can_raise, **kw)
        result = func(self, *args, **kw)
        self._publish(f"did_{name}", result, can_raise=can_raise)
        return result
    return newFunction