def mocked_gh_graphql(query: str, **kwargs: Any) -> Any: gql_db_fname = os.path.join(os.path.dirname(__file__), "gql_mocks.json") def get_mocked_queries() -> Any: if not os.path.exists(gql_db_fname): return {} with open(gql_db_fname, encoding="utf-8") as f: return json.load(f) def save_mocked_queries(obj: Any) -> None: with open(gql_db_fname, encoding="utf-8", mode="w") as f: json.dump(obj, f, indent=2) f.write("\n") key = f"query_sha={sha256(query.encode('utf-8')).hexdigest()} " + " ".join([f"{k}={kwargs[k]}" for k in sorted(kwargs.keys())]) mocked_queries = get_mocked_queries() if key in mocked_queries: return mocked_queries[key] rc = gh_graphql(query, **kwargs) mocked_queries[key] = rc save_mocked_queries(mocked_queries) return rc
def mocked_gh_graphql(query: str, **kwargs: Any) -> Any: gql_db_fname = os.path.join(os.path.dirname(__file__), "gql_mocks.json") def get_mocked_queries() -> Any: if not os.path.exists(gql_db_fname): return {} with open(gql_db_fname, encoding="utf-8") as f: return json.load(f) def save_mocked_queries(obj: Any) -> None: with open(gql_db_fname, encoding="utf-8", mode="w") as f: json.dump(obj, f, indent=2) f.write("\n") key = f"query_sha={sha256(query.encode('utf-8')).hexdigest()} " + " ".join([f"{k}={kwargs[k]}" for k in sorted(kwargs.keys())]) mocked_queries = get_mocked_queries() if key in mocked_queries: return mocked_queries[key] try: rc = gh_graphql(query, **kwargs) except HTTPError as err: if err.code == 401: err_msg = "If you are seeing this message during workflow run, please make sure to update gql_mocks.json" err_msg += f" locally, by deleting it and running {os.path.basename(__file__)} with " err_msg += " GitHub Personal Access Token passed via GITHUB_TOKEN environment variable" if os.getenv("GITHUB_TOKEN") is None: err_msg = "Failed to update cached GraphQL queries as GITHUB_TOKEN is not defined." + err_msg raise RuntimeError(err_msg) from err mocked_queries[key] = rc save_mocked_queries(mocked_queries) return rc