def METHOD_NAME(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        target = self.get_target(*args, **kwargs)
        with target(*dec_args, **dec_kwargs) as obj:
            # insert our object into args
            if kw_name and kw_name not in kwargs:
                kwargs[kw_name] = obj
            elif kw_name and kw_name in kwargs:
                raise TypeError(
                    "{}() got multiple values for"
                    " argument '{}'".format(func.__name__, kw_name)
                )
            else:
                args = args + (obj,)
            return func(*args, **kwargs)
    return wrapper