Source code for toolscore.validators.http

"""HTTP side-effect validator."""

from typing import Any

from toolscore.adapters.base import ToolCall


[docs] class HTTPValidator: """Validator for HTTP-related side effects. Checks if HTTP requests succeeded based on status codes or result information. """
[docs] def __init__(self) -> None: """Initialize HTTP validator.""" self.success_codes = {200, 201, 202, 203, 204, 205, 206}
[docs] def validate(self, call: ToolCall, expected: Any) -> bool: """Validate HTTP side effect. Args: call: The tool call to validate. expected: Expected value (True for any success, or specific status code). Returns: True if validation passes, False otherwise. """ # Check result for status code if call.result is not None: if isinstance(call.result, dict): status = call.result.get("status") or call.result.get("status_code") if status: if expected is True: return int(status) in self.success_codes return int(status) == int(expected) # Check if result is a status code directly if isinstance(call.result, int): if expected is True: return call.result in self.success_codes return call.result == int(expected) # Check metadata for HTTP status if "http_status" in call.metadata: status = call.metadata["http_status"] if expected is True: return int(status) in self.success_codes return int(status) == int(expected) # Check if there's a URL in args and assume success if no error # If we got here and there's no error indication, assume success return bool( call.args and ("url" in call.args or "endpoint" in call.args) and call.result and not isinstance(call.result, Exception) )