From 2713b44463bb691090174f456b98597704fd23fd Mon Sep 17 00:00:00 2001 From: pewdiepie-archdaemon Date: Thu, 17 Sep 2026 21:00:47 +0000 Subject: [PATCH] Preserve publication windows through news-provider fallbacks --- services/search/providers.py | 10 ++-------- tests/test_search_publication_intent.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/services/search/providers.py b/services/search/providers.py index 95525ec7d..ea6bfc602 100644 --- a/services/search/providers.py +++ b/services/search/providers.py @@ -263,17 +263,11 @@ def searxng_search_api(query: str, count: Optional[int] = None, categories: str active_params = params parsed, data = _run(active_params) - if not parsed and is_news and categories == "general": + if not parsed and active_params.get("categories") == "news": # Some self-hosted SearXNG configs have no working news engines. # Fall back to the known-good general engines before reporting an # empty search, otherwise common queries like "Canada news" fail. - fallback = { - "q": query, - "format": "json", - "language": "en", - "categories": "general", - "safesearch": _safesearch_for("searxng"), - } + fallback = {**active_params, "categories": "general"} if _GENERAL_ENGINES: fallback["engines"] = _GENERAL_ENGINES logger.info( diff --git a/tests/test_search_publication_intent.py b/tests/test_search_publication_intent.py index 262072b1a..2ca810e67 100644 --- a/tests/test_search_publication_intent.py +++ b/tests/test_search_publication_intent.py @@ -60,6 +60,25 @@ def test_provider_does_not_silently_widen_news_window(monkeypatch): assert seen['time_range'] == 'day' +def test_provider_keeps_news_date_window_across_empty_fallbacks(monkeypatch): + from services.search import providers + calls = [] + class Response: + def raise_for_status(self): pass + def json(self): return {'results': []} + def get(url, **kwargs): + calls.append(dict(kwargs['params'])) + return Response() + monkeypatch.setattr(providers, '_get_search_instance', lambda: 'http://searx.test') + monkeypatch.setattr(providers, '_get_search_settings', lambda: {}) + monkeypatch.setattr(providers.httpx, 'get', get) + providers.searxng_search_api('AI news today', time_filter='day') + assert len(calls) >= 2 + assert calls[0]['categories'] == 'news' + assert calls[1]['categories'] == 'general' + assert all(call['time_range'] == 'day' for call in calls) + + @pytest.mark.parametrize('arguments,expected', [ ({'query': 'latest browser documentation'}, None), ({'query': 'browser documentation', 'time_filter': 'month'}, 'month'),