Exemple #1
0
    def _handle_pyre_cache(self, paths: List[str]) -> Mapping[str, object]:
        params = ",".join(f"path='{self.root_path/path}'" for path in paths)
        cmd = f'''pyre query "types({params})"'''
        try:
            stdout, stderr, return_code = run_command(cmd,
                                                      timeout=self._timeout)
        except subprocess.TimeoutExpired as exc:
            raise exc

        if return_code != 0:
            raise Exception(f"stderr:\n {stderr}\nstdout:\n {stdout}")
        try:
            resp = json.loads(stdout)["response"]
        except Exception as e:
            raise Exception(f"{e}\n\nstderr:\n {stderr}\nstdout:\n {stdout}")
        return {
            path: _process_pyre_data(data)
            for path, data in zip(paths, resp)
        }
def gen_types_for_test_case(source_code: str, dest_path: Path) -> None:
    rule_fixture_subdir: Path = dest_path.parent
    if not rule_fixture_subdir.exists():
        rule_fixture_subdir.mkdir(parents=True)
    with tempfile.NamedTemporaryFile("w",
                                     dir=rule_fixture_subdir,
                                     suffix=".py") as temp:
        temp.write(_dedent(source_code))
        temp.seek(0)

        cmd = f'''pyre query "types(path='{temp.name}')"'''
        stdout, stderr, return_code = run_command(cmd)
        if return_code != 0:
            raise PyreQueryError(cmd, f"{stdout}\n{stderr}")
        data = json.loads(stdout)
        # Check if error is a key in `data` since pyre may report errors this way.
        if "error" in data:
            raise PyreQueryError(cmd, data["error"])
        data = data["response"][0]
        data: PyreData = _process_pyre_data(data)
        print(f"Writing output to {dest_path}")
        dest_path.write_text(json.dumps({"types": data["types"]}, indent=2))
Exemple #3
0

if __name__ == "__main__":
    """Run this script directly to generate pyre data for test suite (tests/pyre/*.py)"""
    print("start pyre server")
    stdout: str
    stderr: str
    return_code: int
    os.chdir(TEST_SUITE_PATH)
    stdout, stderr, return_code = run_command(
        ["pyre", "start", "--no-watchman"])
    if return_code != 0:
        print(stdout)
        print(stderr)

    for path in TEST_SUITE_PATH.glob("*.py"):
        # Pull params into it's own arg to avoid the string escaping in subprocess
        params = f"path='{path}'"
        cmd = ["pyre", "query", f"types({params})"]
        print(cmd)
        stdout, stderr, return_code = run_command(cmd)
        if return_code != 0:
            print(stdout)
            print(stderr)
        data = json.loads(stdout)
        data = data["response"][0]
        data = _process_pyre_data(data)
        output_path = path.with_suffix(".json")
        print(f"write output to {output_path}")
        output_path.write_text(json.dumps(data, indent=2))