tooluniverse.datacite_tool 源代码

"""
DataCite REST tool with proper parameter mapping for the DataCite API.

The DataCite API uses hyphenated query parameter names (e.g., resource-type-id,
page[size]) which need mapping from the snake_case tool parameter names.
"""

import requests
from typing import Any, Dict
from .base_rest_tool import BaseRESTTool
from .tool_registry import register_tool


[文档] @register_tool("DataCiteRESTTool") class DataCiteRESTTool(BaseRESTTool): """REST tool for DataCite API endpoints with custom parameter mapping."""
[文档] def _get_param_mapping(self) -> Dict[str, str]: """Map tool parameter names to DataCite API query parameter names.""" return { "resource_type_general": "resource-type-id", "resource_type": "resource-type-id", "page_size": "page[size]", "page_number": "page[number]", "publisher": "publisher", "year": "published", }
[文档] def _process_response( self, response: requests.Response, url: str ) -> Dict[str, Any]: """Process DataCite API response. For search endpoints: data is the list of items, meta has total. For single-item endpoints: data is the single record object. """ raw = response.json() # Search endpoint returns {"data": [...], "meta": {...}} # Single-item endpoint returns {"data": {...}} items = raw.get("data", raw) meta = raw.get("meta", {}) result = { "status": "success", "data": items, "url": url, } if meta: result["meta"] = meta result["total"] = meta.get("total", 0) if isinstance(items, list): result["count"] = len(items) return result