def recursiveUpdate(target, source):
    """
    Recursively update the target dictionary with the source dictionary, leaving unfound keys in place.
    This is different than dict.update, which removes target keys not in the source

    :param dict target: The dictionary to be updated
    :param dict source: The dictionary to be integrated
    :return: target dict is returned as a convenience. This function updates the target dict in place.
    :rtype: dict
    """
    for k, v in source.items():
        if isinstance(v, dict):
            target[k] = recursiveUpdate(target.get(k, {}), v)
        else:
            target[k] = v
    return target