Source code for tooluniverse.genomics_gene_search_tool

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


[docs] @register_tool("GWASGeneSearch") class GWASGeneSearch(BaseTool): """ Local tool wrapper for GWAS Catalog REST API. Searches associations by gene name. """
[docs] def __init__(self, tool_config): super().__init__(tool_config) self.base_url = "https://www.ebi.ac.uk/gwas/rest/api" self.session = requests.Session() self.session.headers.update( {"Accept": "application/json", "Content-Type": "application/json"} )
[docs] def run(self, arguments): gene_name = arguments.get("gene_name") if not gene_name: return {"error": "Missing required parameter: gene_name"} # Search for associations by gene name url = f"{self.base_url}/v2/associations" params = {"mapped_gene": gene_name, "size": 20, "page": 0} try: response = self.session.get(url, params=params, timeout=30) response.raise_for_status() data = response.json() # Extract associations from _embedded structure associations = [] if "_embedded" in data and "associations" in data["_embedded"]: associations = data["_embedded"]["associations"] return { "gene_name": gene_name, "association_count": len(associations), "associations": ( associations[:5] if associations else [] ), # Return first 5 "total_found": ( data.get("page", {}).get("totalElements", 0) if "page" in data else 0 ), } except requests.exceptions.RequestException as e: return {"error": f"Request failed: {str(e)}"} except Exception as e: return {"error": f"Unexpected error: {str(e)}"}