Source code for toolregistry.utils

import re


[docs] def normalize_tool_name(name: str) -> str: """Normalize tool name to snake_case format and remove dots and spaces. Also handles OpenAPI-style duplicate names like 'add_add_get' by converting to 'add_get'. Args: name: Original tool name in various formats (including CamelCase, UpperCamelCase, or containing spaces) Returns: str: Normalized name in snake_case without dots or spaces """ # First check for OpenAPI-style duplicate names (e.g. "add_add_get") openapi_pattern = r"^([a-zA-Z0-9]+)_\1_([a-zA-Z0-9]+)$" match = re.match(openapi_pattern, name) if match: return f"{match.group(1)}_{match.group(2)}" # Replace all special chars (., -, @, etc.) with single underscore name = re.sub(r"[.\-@]+", "_", name) # Remove spaces and collapse multiple spaces into a single space name = re.sub(r"\s+", " ", name).strip() # Replace spaces with underscores name = name.replace(" ", "_") # Convert CamelCase and UpperCamelCase to snake_case # Handles all cases including: # XMLParser -> xml_parser # getUserIDFromDB -> get_user_id_from_db # HTTPRequest -> http_request name = re.sub(r"(?<!^)(?=[A-Z][a-z])|(?<=[a-z0-9])(?=[A-Z])", "_", name).lower() # Collapse multiple underscores into single underscore return re.sub(r"_+", "_", name)