Exemplo n.º 1
0
def test_layout(rule_runner: RuleRunner, layout: PexLayout) -> None:
    rule_runner.write_files({
        "src/py/project/app.py":
        "print('hello')",
        "src/py/project/BUILD":
        dedent(f"""\
                python_sources(name="lib")
                pex_binary(
                    entry_point="app.py",
                    layout="{layout.value}",
                )
                """),
    })
    tgt = rule_runner.get_target(Address("src/py/project"))
    field_set = PexBinaryFieldSet.create(tgt)
    result = rule_runner.request(BuiltPackage, [field_set])
    assert len(result.artifacts) == 1
    expected_pex_relpath = "src.py.project/project.pex"
    assert expected_pex_relpath == result.artifacts[0].relpath

    rule_runner.write_digest(result.digest)
    executable = os.path.join(
        rule_runner.build_root,
        expected_pex_relpath if PexLayout.ZIPAPP is layout else os.path.join(
            expected_pex_relpath, "__main__.py"),
    )
    assert b"hello\n" == subprocess.run([executable],
                                        check=True,
                                        stdout=subprocess.PIPE).stdout
Exemplo n.º 2
0
def pex_executable(rule_runner: RuleRunner) -> str:
    rule_runner.write_files({
        "pex_exe/BUILD":
        dedent("""\
                python_requirement(name="req", requirements=["pex==2.1.66"])
                pex_binary(dependencies=[":req"], script="pex")
                """),
    })
    tgt = rule_runner.get_target(Address("pex_exe"))
    field_set = PexBinaryFieldSet.create(tgt)
    result = rule_runner.request(BuiltPackage, [field_set])
    assert len(result.artifacts) == 1
    expected_pex_relpath = "pex_exe/pex_exe.pex"
    assert expected_pex_relpath == result.artifacts[0].relpath
    rule_runner.write_digest(result.digest)
    return os.path.join(rule_runner.build_root, expected_pex_relpath)
Exemplo n.º 3
0
def test_complete_platforms(rule_runner: RuleRunner) -> None:
    linux_complete_platform = pkgutil.get_data(__name__,
                                               "platform-linux-py36.json")
    assert linux_complete_platform is not None

    mac_complete_platform = pkgutil.get_data(__name__,
                                             "platform-mac-py36.json")
    assert mac_complete_platform is not None

    rule_runner.write_files({
        "src/py/project/platform-linux-py36.json":
        linux_complete_platform,
        "src/py/project/platform-mac-py36.json":
        mac_complete_platform,
        "src/py/project/BUILD":
        dedent("""\
                python_requirement(name="p537", requirements=["p537==1.0.4"])
                files(name="platforms", sources=["platform*.json"])
                pex_binary(
                    dependencies=[":p537"],
                    complete_platforms=[":platforms"],
                    include_tools=True,
                )
                """),
    })
    tgt = rule_runner.get_target(Address("src/py/project"))
    field_set = PexBinaryFieldSet.create(tgt)
    result = rule_runner.request(BuiltPackage, [field_set])
    assert len(result.artifacts) == 1
    expected_pex_relpath = "src.py.project/project.pex"
    assert expected_pex_relpath == result.artifacts[0].relpath

    rule_runner.write_digest(result.digest)
    executable = os.path.join(rule_runner.build_root, expected_pex_relpath)
    pex_info = json.loads(
        subprocess.run(
            args=[executable, "info"],
            env=dict(PEX_TOOLS="1", **os.environ),
            stdout=subprocess.PIPE,
            check=True,
        ).stdout)
    assert sorted([
        "p537-1.0.4-cp36-cp36m-manylinux1_x86_64.whl",
        "p537-1.0.4-cp36-cp36m-macosx_10_13_x86_64.whl",
    ]) == sorted(pex_info["distributions"])
Exemplo n.º 4
0
def complete_platform(rule_runner: RuleRunner) -> bytes:
    rule_runner.write_files({
        "pex_exe/BUILD":
        dedent("""\
                python_requirement(name="req", requirements=["pex==2.1.66"])
                pex_binary(dependencies=[":req"], script="pex")
                """),
    })
    result = rule_runner.request(
        BuiltPackage,
        [PexBinaryFieldSet.create(rule_runner.get_target(Address("pex_exe")))])
    rule_runner.write_digest(result.digest)
    pex_executable = os.path.join(rule_runner.build_root,
                                  "pex_exe/pex_exe.pex")
    return subprocess.run(
        args=[pex_executable, "interpreter", "inspect", "-mt"],
        env=dict(PEX_MODULE="pex.cli", **os.environ),
        check=True,
        stdout=subprocess.PIPE,
    ).stdout
Exemplo n.º 5
0
def test_resolve_local_platforms(pex_executable: str,
                                 rule_runner: RuleRunner) -> None:
    complete_current_platform = subprocess.run(
        args=[pex_executable, "interpreter", "inspect", "-mt"],
        env=dict(PEX_MODULE="pex.cli", **os.environ),
        stdout=subprocess.PIPE,
    ).stdout

    # N.B.: ansicolors 1.0.2 is available sdist-only on PyPI, so resolving it requires using a
    # local interpreter.
    rule_runner.write_files({
        "src/py/project/app.py":
        "import colors",
        "src/py/project/platform.json":
        complete_current_platform,
        "src/py/project/BUILD":
        dedent("""\
                python_requirement(name="ansicolors", requirements=["ansicolors==1.0.2"])
                file(name="platform", source="platform.json")
                pex_binary(
                    dependencies=[":ansicolors"],
                    complete_platforms=[":platform"],
                    resolve_local_platforms=True,
                )
                """),
    })
    tgt = rule_runner.get_target(Address("src/py/project"))
    field_set = PexBinaryFieldSet.create(tgt)
    result = rule_runner.request(BuiltPackage, [field_set])
    assert len(result.artifacts) == 1
    expected_pex_relpath = "src.py.project/project.pex"
    assert expected_pex_relpath == result.artifacts[0].relpath

    rule_runner.write_digest(result.digest)
    executable = os.path.join(rule_runner.build_root, expected_pex_relpath)
    subprocess.run([executable], check=True)
Exemplo n.º 6
0
def build_package(rule_runner: RuleRunner,
                  binary_target: Target) -> BuiltPackage:
    field_set = GoBinaryFieldSet.create(binary_target)
    result = rule_runner.request(BuiltPackage, [field_set])
    rule_runner.write_digest(result.digest)
    return result