Source code for tooluniverse.gnomad_tool

import requests
import json
from .base_tool import BaseTool
from .tool_registry import register_tool


[docs] @register_tool("GnomadTool") class GnomadTool(BaseTool): """ Local tool wrapper for gnomAD GraphQL API. Queries variant information including allele frequencies. """
[docs] def __init__(self, tool_config): super().__init__(tool_config) self.base = "https://gnomad.broadinstitute.org/api" self.session = requests.Session() self.session.headers.update({"Content-Type": "application/json"})
[docs] def run(self, arguments): variant_id = arguments.get("variant_id") dataset = arguments.get("dataset", "gnomad_r4") if not variant_id: return {"error": "Missing required parameter: variant_id"} # GraphQL query for variant with genome frequencies query = """ query($variant: String!, $dataset: DatasetId!) { variant(variantId: $variant, dataset: $dataset) { variantId genome { ac an af } } } """ payload = { "query": query, "variables": { "variant": variant_id, "dataset": dataset, }, } resp = self.session.post(self.base, data=json.dumps(payload), timeout=30) resp.raise_for_status() data = resp.json() if "errors" in data: return {"error": f"GraphQL errors: {data['errors']}"} variant = data.get("data", {}).get("variant") if not variant: return {"error": "Variant not found"} return { "variantId": variant.get("variantId"), "genome": variant.get("genome", {}), }