mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 10:15:27 -04:00
fix: search service crashes on a non-dict result row (#1725)
This commit is contained in:
@@ -73,6 +73,8 @@ class SearchService:
|
|||||||
|
|
||||||
results = []
|
results = []
|
||||||
for r in raw_results:
|
for r in raw_results:
|
||||||
|
if not isinstance(r, dict):
|
||||||
|
continue
|
||||||
results.append(SearchResult(
|
results.append(SearchResult(
|
||||||
url=r.get("url", ""),
|
url=r.get("url", ""),
|
||||||
title=r.get("title", ""),
|
title=r.get("title", ""),
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
import services.search.service as svc_mod
|
||||||
|
from services.search.service import SearchService
|
||||||
|
|
||||||
|
|
||||||
|
def test_search_skips_non_dict_results(monkeypatch):
|
||||||
|
# comprehensive_web_search aggregates external provider + cache results;
|
||||||
|
# a malformed row (string/None) made the old loop call r.get and crash,
|
||||||
|
# losing the whole search.
|
||||||
|
async def fake_search(query, max_results=10, fetch_content=False):
|
||||||
|
return [
|
||||||
|
{"url": "https://a.com", "title": "A", "snippet": "x"},
|
||||||
|
"junk-row",
|
||||||
|
None,
|
||||||
|
{"url": "https://b.com", "title": "B", "snippet": "y"},
|
||||||
|
]
|
||||||
|
|
||||||
|
monkeypatch.setattr(svc_mod, "comprehensive_web_search", fake_search)
|
||||||
|
svc = SearchService()
|
||||||
|
res = asyncio.run(svc.search("anything"))
|
||||||
|
assert [r.url for r in res.results] == ["https://a.com", "https://b.com"]
|
||||||
|
assert res.total == 2
|
||||||
Reference in New Issue
Block a user