Browse Source

search.suspended_time settings: bug fixes

* fix type in settings.yml: replace suspend_times by suspended_times
* always use delay defined in settings.yml:
  * HTTP status 402 and 403: read the value from settings.yml instead of using the hardcoded value of 1 day.
  * startpage engine: CAPTCHA suspend the engine for one day instead of one week
Alexandre Flament 2 years ago
parent
commit
37addec69e
4 changed files with 11 additions and 7 deletions
  1. 1 2
      searx/engines/startpage.py
  2. 8 1
      searx/exceptions.py
  3. 1 3
      searx/network/raise_for_httperror.py
  4. 1 1
      searx/settings.yml

+ 1 - 2
searx/engines/startpage.py

@@ -62,8 +62,7 @@ sc_code = ''
 def raise_captcha(resp):
 
     if str(resp.url).startswith('https://www.startpage.com/sp/captcha'):
-        # suspend CAPTCHA for 7 days
-        raise SearxEngineCaptchaException(suspended_time=7 * 24 * 3600)
+        raise SearxEngineCaptchaException()
 
 
 def get_sc_code(headers):

+ 8 - 1
searx/exceptions.py

@@ -70,8 +70,15 @@ class SearxEngineAccessDeniedException(SearxEngineResponseException):
     """The website is blocking the access"""
 
     SUSPEND_TIME_SETTING = "search.suspended_times.SearxEngineAccessDenied"
+    """This settings contains the default suspended time"""
 
-    def __init__(self, suspended_time=None, message='Access denied'):
+    def __init__(self, suspended_time: int = None, message: str = 'Access denied'):
+        """Generic exception to raise when an engine denies access to the results
+
+        Args:
+            suspended_time (int, optional): How long the engine is going to be suspended in second. Defaults to None.
+            message (str, optional): Internal message. Defaults to 'Access denied'.
+        """
         suspended_time = suspended_time or self._get_default_suspended_time()
         super().__init__(message + ', suspended_time=' + str(suspended_time))
         self.suspended_time = suspended_time

+ 1 - 3
searx/network/raise_for_httperror.py

@@ -72,9 +72,7 @@ def raise_for_httperror(resp):
     if resp.status_code and resp.status_code >= 400:
         raise_for_captcha(resp)
         if resp.status_code in (402, 403):
-            raise SearxEngineAccessDeniedException(
-                message='HTTP error ' + str(resp.status_code), suspended_time=3600 * 24
-            )
+            raise SearxEngineAccessDeniedException(message='HTTP error ' + str(resp.status_code))
         if resp.status_code == 429:
             raise SearxEngineTooManyRequestsException()
         resp.raise_for_status()

+ 1 - 1
searx/settings.yml

@@ -45,7 +45,7 @@ search:
   ban_time_on_fail: 5
   # max ban time in seconds after engine errors
   max_ban_time_on_fail: 120
-  suspend_times:
+  suspended_times:
     # Engine suspension time after error (in seconds; set to 0 to disable)
     # For error "Access denied" and "HTTP error [402, 403]"
     SearxEngineAccessDenied: 86400