Browse Source

[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>
Markus Heiser 3 months ago
parent
commit
906b9e7d4c

+ 2 - 1
searx/engines/dictzone.py

@@ -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

+ 1 - 1
searx/plugins/ahmia_filter.py

@@ -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

+ 3 - 3
searx/plugins/hostnames.py

@@ -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])

+ 4 - 0
searx/result_types/answer.py

@@ -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) ,