Source code for tooluniverse.cpic_search_pairs_tool
"""
CPIC Search Gene-Drug Pairs Tool.
Extends BaseRESTTool with automatic PostgREST operator normalization so users
can pass plain gene symbols (e.g., 'CYP2D6') instead of 'eq.CYP2D6'.
"""
from typing import Any, Dict
from .base_rest_tool import BaseRESTTool
from .tool_registry import register_tool
# PostgREST filter operator prefixes
_POSTGREST_OPS = (
"eq.",
"neq.",
"gt.",
"gte.",
"lt.",
"lte.",
"like.",
"ilike.",
"is.",
"in.(",
"not.",
"cs.",
"cd.",
)
[docs]
@register_tool("CPICSearchPairsTool")
class CPICSearchPairsTool(BaseRESTTool):
"""
Search CPIC gene-drug pairs with automatic PostgREST operator normalization.
Accepts plain gene symbols and CPIC levels (e.g., 'CYP2D6', 'A') and
auto-prepends the required 'eq.' PostgREST operator so users do not need
to know the PostgREST filter syntax.
"""
# Parameters that are PostgREST column filters requiring the eq. prefix
_FILTER_PARAMS = ("genesymbol", "cpiclevel")
[docs]
def _build_params(self, args: Dict[str, Any]) -> Dict[str, Any]:
# Feature-68A-004: auto-prepend 'eq.' to PostgREST filter params if user
# provides a plain value like 'CYP2D6' instead of 'eq.CYP2D6'.
normalized = dict(args)
for key in self._FILTER_PARAMS:
val = normalized.get(key)
if val and isinstance(val, str):
if not any(val.startswith(op) for op in _POSTGREST_OPS):
normalized[key] = f"eq.{val}"
return super()._build_params(normalized)