@wraps(func)
def decorator(self, *args, **kwargs):
    _kwargs = kwargs.copy()
    _args = list(args)
    for (index, arg) in enumerate(args):
        if isinstance(arg, (Node, Plug)):
            _args[index] = arg.path()
        else:
            _args[index] = repr(arg)
    for (key, value) in kwargs.items():
        if isinstance(value, (Node, Plug)):
            _kwargs[key] = value.path()
        else:
            _kwargs[key] = repr(value)
    self._history.append((func.__name__, _args, _kwargs))
    return func(self, *args, **kwargs)
@wraps(func)
def decorator(self, *args, **kwargs):
    _kwargs = kwargs.copy()
    _args = list(args)
    for (index, arg) in enumerate(args):
        if isinstance(arg, (Node, Plug)):
            _args[index] = arg.path()
        else:
            _args[index] = repr(arg)
    for (key, value) in kwargs.items():
        if isinstance(value, (Node, Plug)):
            _kwargs[key] = value.path()
        else:
            _kwargs[key] = repr(value)
    self._history.append((func.__name__, _args, _kwargs))
    return func(self, *args, **kwargs)