tooluniverse.regulomedb_tool 源代码

import requests
from typing import Any, Dict
from .base_tool import BaseTool
from .tool_registry import register_tool


[文档] @register_tool("RegulomeDBRESTTool") class RegulomeDBRESTTool(BaseTool):
[文档] def __init__(self, tool_config: Dict): super().__init__(tool_config) self.base_url = "https://regulomedb.org" self.session = requests.Session() self.session.headers.update({"Accept": "application/json"}) self.timeout = 30
[文档] def _build_url(self, args: Dict[str, Any]) -> str: url = self.tool_config["fields"]["endpoint"] for k, v in args.items(): url = url.replace(f"{{{k}}}", str(v)) return url
[文档] def run(self, arguments: Dict[str, Any]) -> Dict[str, Any]: # Accept 'variant' as alias for 'rsid' (used by RegulomeDB_get_score) if "rsid" not in arguments and arguments.get("variant"): arguments = dict(arguments, rsid=arguments["variant"]) try: url = self._build_url(arguments) response = self.session.get(url, timeout=self.timeout) response.raise_for_status() raw = response.json() except Exception as e: return {"status": "error", "error": f"RegulomeDB API error: {str(e)}"} # Extract the key RegulomeDB fields; @graph contains raw ENCODE datasets # (hundreds of entries) and is not useful for most callers. variants = raw.get("variants", []) if not variants: return { "status": "error", "error": f"No RegulomeDB results for rsID '{arguments.get('rsid', '')}'", } result = { "rsid": arguments.get("rsid", ""), "assembly": raw.get("assembly"), "query_coordinates": raw.get("query_coordinates"), "regulome_score": raw.get("regulome_score"), "variants": variants, "features": raw.get("features"), "nearby_snps": raw.get("nearby_snps", [])[:10], "notifications": raw.get("notifications"), "total_supporting_datasets": len(raw.get("@graph", [])), } return {"status": "success", "data": result, "url": url}