From 5b608a27db75502bac476145242c8c4cd7ad6392 Mon Sep 17 00:00:00 2001 From: Alex Yaroslavsky Date: Wed, 6 May 2026 15:29:07 +0300 Subject: [PATCH] base URL trailing slashes --- .../cato_networks/cato_networks.py | 1 + .../guardrail_hooks/test_cato_networks.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/litellm/proxy/guardrails/guardrail_hooks/cato_networks/cato_networks.py b/litellm/proxy/guardrails/guardrail_hooks/cato_networks/cato_networks.py index 62a2b4bd92b..afd61a21223 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/cato_networks/cato_networks.py +++ b/litellm/proxy/guardrails/guardrail_hooks/cato_networks/cato_networks.py @@ -60,6 +60,7 @@ class CatoNetworksGuardrail(CustomGuardrail): or os.environ.get("CATO_API_BASE") or "https://api.aisec.catonetworks.com" ) + self.api_base = self.api_base.rstrip("/") self.ws_api_base = self.api_base.replace("http://", "ws://").replace( "https://", "wss://" ) diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_cato_networks.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_cato_networks.py index ab7ed55e5b9..a4c8382faf1 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_cato_networks.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_cato_networks.py @@ -381,6 +381,25 @@ def test_init_http_api_base_maps_to_ws(): assert guard.ws_api_base == "ws://insecure.example.com" +@pytest.mark.parametrize("api_base", [ + "https://api.aisec.catonetworks.com/", + "https://api.aisec.catonetworks.com", +]) +def test_base_url_trailing_slash(monkeypatch, api_base): + monkeypatch.setenv("CATO_API_KEY", "test-key") + guardrail = CatoNetworksGuardrail(api_base=api_base) + assert guardrail.api_base == "https://api.aisec.catonetworks.com" + assert guardrail.ws_api_base == "wss://api.aisec.catonetworks.com" + + +def test_base_url_from_env(monkeypatch): + monkeypatch.setenv("CATO_API_KEY", "test-key") + monkeypatch.setenv("CATO_API_BASE", "https://api.aisec.catonetworks.com/") + guardrail = CatoNetworksGuardrail(api_base=None) + assert guardrail.api_base == "https://api.aisec.catonetworks.com" + assert guardrail.ws_api_base == "wss://api.aisec.catonetworks.com" + + # ----------------------------------------------------------------------------- # _build_cato_headers direct coverage # -----------------------------------------------------------------------------