def METHOD_NAME(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