Example #1
0
def test_install_primitives(install_path):
    installation_dir = get_installation_dir()
    custom_max_file = os.path.join(installation_dir, "custom_max.py")
    custom_mean_file = os.path.join(installation_dir, "custom_mean.py")
    custom_sum_file = os.path.join(installation_dir, "custom_sum.py")

    # make sure primitive files aren't there e.g from a failed run
    for p in [custom_max_file, custom_mean_file, custom_sum_file]:
        try:
            os.unlink(p)
        except Exception:
            pass

    # handle install via command line as a special case
    if install_path == "INSTALL_VIA_CLI":
        subprocess.check_output(['featuretools', 'install', '--no-prompt', primitives_to_install_dir(this_dir())])
    elif install_path == "INSTALL_VIA_MODULE":
        subprocess.check_output(['python', '-m', 'featuretools', 'install', '--no-prompt', primitives_to_install_dir(this_dir())])
    else:
        featuretools.primitives.install.install_primitives(install_path, prompt=False)

    # must reload submodule for it to work
    reload(featuretools.primitives.installed)
    from featuretools.primitives.installed import CustomMax, CustomSum, CustomMean  # noqa: F401

    files = list_primitive_files(installation_dir)
    assert set(files) == {custom_max_file, custom_mean_file, custom_sum_file}

    files = list_primitive_files(installation_dir)
    # then delete to clean up
    for f in files:
        os.unlink(f)
def test_install_primitives(install_path, primitives_to_install_dir):
    installation_dir = get_installation_dir()
    data_dir = featuretools.config.get("primitive_data_folder")
    custom_max_file = os.path.join(installation_dir, "custom_max.py")
    custom_mean_file = os.path.join(installation_dir, "custom_mean.py")
    custom_sum_file = os.path.join(installation_dir, "custom_sum.py")
    data_file = os.path.join(data_dir, "_pytest_test.csv")
    data_subfolder = os.path.join(data_dir, "pytest_folder")

    # make sure primitive files aren't there e.g from a failed run
    old_files = [
        custom_max_file, custom_mean_file, custom_sum_file, data_file,
        data_subfolder
    ]
    remove_test_files(old_files)

    # handle install via command line as a special case
    if install_path == "INSTALL_VIA_CLI":
        subprocess.check_output([
            'featuretools', 'install', '--no-prompt', primitives_to_install_dir
        ])
    elif install_path == "INSTALL_VIA_MODULE":
        subprocess.check_output([
            'python', '-m', 'featuretools', 'install', '--no-prompt',
            primitives_to_install_dir
        ])
    else:
        install_primitives(install_path, prompt=False)

    # must reload submodule for it to work
    reload(featuretools.primitives.installed)
    from featuretools.primitives.installed import CustomMax, CustomSum, CustomMean  # noqa: F401

    files = list_primitive_files(installation_dir)
    assert {custom_max_file, custom_mean_file,
            custom_sum_file}.issubset(set(files))
    assert os.path.exists(data_file)
    os.unlink(data_file)
    assert os.path.exists(data_subfolder)
    assert os.path.exists(os.path.join(data_subfolder, "hello.txt"))
    shutil.rmtree(data_subfolder)

    # then delete to clean up
    for f in [custom_max_file, custom_mean_file, custom_sum_file]:
        os.unlink(f)
def test_fails_if_data_would_be_overwritten(primitives_to_install_dir):
    installation_dir = get_installation_dir()
    data_dir = featuretools.config.get("primitive_data_folder")
    custom_max_file = os.path.join(installation_dir, "custom_max.py")
    custom_mean_file = os.path.join(installation_dir, "custom_mean.py")
    custom_sum_file = os.path.join(installation_dir, "custom_sum.py")
    data_file = os.path.join(data_dir, "_pytest_test.csv")
    data_subfolder = os.path.join(data_dir, "pytest_folder")

    # make sure primitive files aren't there e.g from a failed run
    # make sure primitive files aren't there e.g from a failed run
    old_files = [
        custom_max_file, custom_mean_file, custom_sum_file, data_file,
        data_subfolder
    ]
    remove_test_files(old_files)

    install_primitives(primitives_to_install_dir, prompt=False)
    # should fail second time when trying to copy files that already exist
    with pytest.raises(OSError):
        install_primitives(primitives_to_install_dir, prompt=False)
def test_install_packages_from_requirements(primitives_to_install_dir):
    def pip_freeze():
        output = subprocess.check_output(['pip', 'freeze'])
        if not isinstance(output, str):
            output = output.decode()
        return output

    # make sure dummy module isn't installed
    if "featuretools-pip-tester" in pip_freeze():
        subprocess.check_call(
            ["pip", "uninstall", "-y", "featuretools-pip-tester"])
    assert "featuretools-pip-tester" not in pip_freeze()

    # generate requirements file with correct path
    requirements_path = os.path.join(primitives_to_install_dir,
                                     "requirements.txt")
    package_path = os.path.join(primitives_to_install_dir,
                                "featuretools_pip_tester")
    with open(requirements_path, 'w') as f:
        f.write(package_path)

    tar_path = os.path.join(os.path.dirname(primitives_to_install_dir),
                            "test_install_primitives.tar.gz")
    if os.path.exists(tar_path):
        os.unlink(tar_path)

    with tarfile.open(tar_path, "w:gz") as tar:
        tar.add(requirements_path, arcname="requirements.txt")
        tar.add(os.path.join(primitives_to_install_dir, "info.json"),
                arcname="info.json")
        tar.add(os.path.join(primitives_to_install_dir, "custom_max.py"),
                arcname="custom_max.py")
        tar.add(os.path.join(primitives_to_install_dir, "custom_mean.py"),
                arcname="custom_mean.py")
        tar.add(os.path.join(primitives_to_install_dir, "custom_sum.py"),
                arcname="custom_sum.py")
        tar.add(os.path.join(primitives_to_install_dir, "data"),
                arcname="data")

    installation_dir = get_installation_dir()
    data_dir = featuretools.config.get("primitive_data_folder")
    custom_max_file = os.path.join(installation_dir, "custom_max.py")
    custom_mean_file = os.path.join(installation_dir, "custom_mean.py")
    custom_sum_file = os.path.join(installation_dir, "custom_sum.py")
    data_file = os.path.join(data_dir, "_pytest_test.csv")
    data_subfolder = os.path.join(data_dir, "pytest_folder")

    # make sure primitive files aren't there e.g from a failed run
    old_files = [
        custom_max_file, custom_mean_file, custom_sum_file, data_file,
        data_subfolder
    ]
    remove_test_files(old_files)

    install_primitives(tar_path, prompt=False)

    # must reload submodule for it to work
    reload(featuretools.primitives.installed)
    from featuretools.primitives.installed import CustomMax, CustomSum, CustomMean  # noqa: F401

    files = list_primitive_files(installation_dir)
    assert {custom_max_file, custom_mean_file,
            custom_sum_file}.issubset(set(files))
    assert os.path.exists(data_file)
    os.unlink(data_file)
    os.unlink(requirements_path)
    assert os.path.exists(data_subfolder)
    assert os.path.exists(os.path.join(data_subfolder, "hello.txt"))
    shutil.rmtree(data_subfolder)
    os.unlink(tar_path)

    # then delete to clean up
    for f in [custom_max_file, custom_mean_file, custom_sum_file]:
        os.unlink(f)

    assert "featuretools-pip-tester" in pip_freeze()
    subprocess.check_call(
        ["pip", "uninstall", "-y", "featuretools-pip-tester"])