def _softUpdateWrapper(wrapper, wrapped):
    """
    Update a wrapper function to look like the wrapped function.
    Like functools.update_wrapper, but doesn't fail when attributes
    are not found.
    """
    attrs = ['__name__', '__doc__']
    for attr in attrs:
        if hasattr(wrapped, attr):
            setattr(wrapper, attr, getattr(wrapped, attr))
    return wrapper