[fix] hostnames plugin: AttributeError: 'NoneType' object has no attribute 'netloc'

Closes: https://github.com/searxng/searxng/issues/4245
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
This commit is contained in:
Markus Heiser 2025-01-28 14:21:55 +01:00 committed by Markus Heiser
parent 36a1ef1239
commit 906b9e7d4c
4 changed files with 10 additions and 5 deletions

View File

@ -100,5 +100,6 @@ def response(resp) -> EngineResults:
if autotranslate.ok and autotranslate.text:
item_list.insert(0, results.types.Translations.Item(text=autotranslate.text))
results.add(results.types.Translations(translations=item_list, url=resp.search_params["url"]))
if item_list:
results.add(results.types.Translations(translations=item_list, url=resp.search_params["url"]))
return results

View File

@ -19,7 +19,7 @@ ahmia_blacklist: list = []
def on_result(_request, _search, result) -> bool:
if not result.get('is_onion') or not result.get('parsed_url'):
if not getattr(result, 'is_onion', None) or not getattr(result, 'parsed_url', None):
return True
result_hash = md5(result['parsed_url'].hostname.encode()).hexdigest()
return result_hash not in ahmia_blacklist

View File

@ -139,7 +139,7 @@ low_priority: set = _load_regular_expressions('low_priority') or set() # type:
def _matches_parsed_url(result, pattern):
return parsed in result and pattern.search(result[parsed].netloc)
return result[parsed] and (parsed in result and pattern.search(result[parsed].netloc))
def on_result(_request, _search, result) -> bool:
@ -151,7 +151,7 @@ def on_result(_request, _search, result) -> bool:
# logger.debug(result['url'])
for url_field in _url_fields:
if not result.get(url_field):
if not getattr(result, url_field, None):
continue
url_src = urlparse(result[url_field])
@ -164,7 +164,7 @@ def on_result(_request, _search, result) -> bool:
return False
for url_field in _url_fields:
if not result.get(url_field):
if not getattr(result, url_field, None):
continue
url_src = urlparse(result[url_field])

View File

@ -116,6 +116,10 @@ class Translations(BaseAnswer, kw_only=True):
translations: list[Translations.Item]
"""List of translations."""
def __post_init__(self):
if not self.translations:
raise ValueError("Translation does not have an item in the list translations")
class Item(msgspec.Struct, kw_only=True):
"""A single element of the translations / a translation. A translation
consists of at least a mandatory ``text`` property (the translation) ,