Source code for tooluniverse.crossref_tool
import requests
from typing import Any, Dict, Optional
from .base_tool import BaseTool
from .base_rest_tool import BaseRESTTool
from .tool_registry import register_tool
[docs]
@register_tool("CrossrefRESTTool")
class CrossrefRESTTool(BaseRESTTool):
"""Generic REST tool for Crossref API endpoints."""
[docs]
def _get_param_mapping(self) -> Dict[str, str]:
"""Map Crossref-specific parameter names."""
return {
"limit": "rows", # limit -> rows
# query uses its original name
}
[docs]
def _process_response(
self, response: requests.Response, url: str
) -> Dict[str, Any]:
"""Process Crossref API response, extracting message wrapper."""
data = response.json()
# Crossref wraps responses in a "message" field
if isinstance(data, dict) and "message" in data:
message = data["message"]
# For list endpoints, extract items from message
if isinstance(message, dict) and "items" in message:
items = message.get("items", [])
return {
"status": "success",
"data": items,
"count": len(items),
"url": url,
}
else:
# For detail endpoints, return the message directly
return {
"status": "success",
"data": message,
"url": url,
}
# Fallback if no message wrapper
return {
"status": "success",
"data": data,
"url": url,
}