tooluniverse.cod_tool 源代码

"""
COD Tool - Crystallography Open Database

Extends BaseRESTTool with parameter aliases and client-side result limiting
for the COD REST API. The COD JSON API does not support server-side result
limiting, so truncation is applied after fetching.

API: https://www.crystallography.net/cod/result?format=json
No authentication required. CC0 license.
"""

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


[文档] @register_tool("CODTool") class CODTool(BaseRESTTool): """ Tool for querying the Crystallography Open Database (COD). Adds user-friendly aliases and client-side result limiting: - query -> text - spacegroup -> sg - cod_id -> id - max_results / results -> client-side truncation """
[文档] def run(self, arguments: Dict[str, Any]) -> Dict[str, Any]: args = dict(arguments) # Resolve aliases before passing to BaseRESTTool alias_map = { "query": "text", "spacegroup": "sg", "cod_id": "id", "max_results": "results", } for alias, canonical in alias_map.items(): if alias in args and canonical not in args: args[canonical] = args.pop(alias) elif alias in args: args.pop(alias) # Extract limit before calling parent (COD JSON API ignores it) limit = args.pop("results", None) result = super().run(args) # Apply client-side result limiting if limit is not None and result.get("status") == "success": data = result.get("data") if isinstance(data, list) and len(data) > int(limit): result["total_before_limit"] = len(data) result["data"] = data[: int(limit)] result["count"] = int(limit) return result