From e9a117df0d5fbc99311630105ef8e77679b3f52b Mon Sep 17 00:00:00 2001 From: pewdiepie-archdaemon Date: Thu, 17 Sep 2026 19:22:51 +0000 Subject: [PATCH] bound optional search fallback latency --- services/search/providers.py | 6 +++++- tests/test_service_search_provider_guards.py | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/services/search/providers.py b/services/search/providers.py index 0605f3228..4a2a9bd1b 100644 --- a/services/search/providers.py +++ b/services/search/providers.py @@ -453,7 +453,11 @@ def duckduckgo_search(query: str, count: Optional[int] = None, time_filter: Opti "https://html.duckduckgo.com/html/", params={"q": query, "kp": _safesearch_for("duckduckgo_html")}, headers={"User-Agent": WEB_FETCH_USER_AGENT}, - timeout=REQUEST_TIMEOUT, + # This is a last-resort compatibility path when the declared + # optional ``ddgs`` dependency is absent. Keep it short so a + # blocked public endpoint cannot consume the full search SLA + # across provider and query-relaxation retries. + timeout=min(REQUEST_TIMEOUT, 5), ) response.raise_for_status() soup = BeautifulSoup(response.text, "html.parser") diff --git a/tests/test_service_search_provider_guards.py b/tests/test_service_search_provider_guards.py index 579094ae0..ebff7a475 100644 --- a/tests/test_service_search_provider_guards.py +++ b/tests/test_service_search_provider_guards.py @@ -684,6 +684,7 @@ def test_service_ddg_html_fallback_sends_safesearch(monkeypatch): def fake_get(url, **kwargs): seen["params"] = kwargs["params"] + seen["timeout"] = kwargs["timeout"] return _Response() monkeypatch.setattr(providers, "_get_search_settings", lambda: {"search_safesearch": "off"}) @@ -693,4 +694,5 @@ def test_service_ddg_html_fallback_sends_safesearch(monkeypatch): results = providers.duckduckgo_search("odysseus", count=1) assert seen["params"]["kp"] == "-2" + assert seen["timeout"] <= 5 assert results[0]["url"].startswith("https://notduckduckgo.com/")