def METHOD_NAME(*args, **kwargs):
    if not signals.plugin.interceptable_function.has_receivers_for(sender):
        # this check is rather "optimistic" (quote taken from the has_receivers_for docs) and
        # it usually passes even when there's no receiver connected anymore, but outside testing
        # we never disconnect signals anyway...
        return func(*args, **kwargs)
    call_sig = sig
    if not any(p.kind == p.VAR_KEYWORD for p in sig.parameters.values()):
        missing_kwargs = set(kwargs) - set(sig.parameters)
        extra_parameters = [inspect.Parameter(mk, inspect.Parameter.KEYWORD_ONLY) for mk in missing_kwargs]
        call_sig = sig.replace(parameters=[*sig.parameters.values(), *extra_parameters])
    bound_args = call_sig.bind(*args, **kwargs)
    return_none = object()
    sig_rvs = values_from_signal(signals.plugin.interceptable_function.send(sender, func=func, args=bound_args,
                                                                            ctx=ctx, RETURN_NONE=return_none),
                                 as_list=True)
    if not sig_rvs:
        # no return value override -> call the original function
        rv = func(*bound_args.args, **bound_args.kwargs)
    elif len(sig_rvs) != 1:
        raise RuntimeError(f'Multiple results returned for interceptable {sender}')
    else:
        rv = sig_rvs[0]
        if rv is return_none:
            rv = None
    return rv