
    i                     D   d Z ddlZej                  rddlmZ  G d de      Z G d de      Zej                   G d d	e             Z
 G d
 de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z G d de      Zy)z*Exception types raised by SearXNG modules.    N)XPathc                       e Zd ZdZy)SearxExceptionzBase SearXNG exception.N__name__
__module____qualname____doc__     !/root/searxng/searx/exceptions.pyr   r   
   s    !r   r   c                   @     e Zd ZdZdedej                  f fdZ xZS )SearxParameterExceptionz+Raised when query miss a required parameternamevaluec                 z    |dk(  s|d| d}nd| d| }t         |   |       || _        || _        || _        y )N zEmpty z
 parameterzInvalid value z for parameter )super__init__messageparameter_nameparameter_value)selfr   r   r   	__class__s       r   r   z SearxParameterException.__init__   sR    B;%-tfJ/G&ug_TFCG!##'&+r   )	r   r   r	   r
   strtAnyr   __classcell__r   s   @r   r   r      s"    5,S , , ,r   r   c                   8     e Zd ZdZdeez  dedz  f fdZ xZS )SearxSettingsExceptionz Error while loading the settingsr   filenameNc                 @    t         |   |       || _        || _        y )N)r   r   r   r"   )r   r   r"   r   s      r   r   zSearxSettingsException.__init__    s    ! r   )r   r   r	   r
   r   	Exceptionr   r   r   s   @r   r!   r!      s&    *!i !3: ! !r   r!   c                       e Zd ZdZy)SearxEngineExceptionzError inside an engineNr   r   r   r   r&   r&   &   s     r   r&   c                   ,     e Zd ZdZdddef fdZ xZS )SearxXPathSyntaxExceptionzSyntax error in a XPATH
xpath_specstr | XPathr   c                 p    t         |   t        |      dz   |z          || _        t        |      | _        y N r   r   r   r   	xpath_strr   r)   r   r   s      r   r   z"SearxXPathSyntaxException.__init__-   0    Z3.89#!*or   r   r   r	   r
   r   r   r   r   s   @r   r(   r(   *   s    !.= .3 . .r   r(   c                       e Zd ZdZy)SearxEngineResponseExceptionz+Impossible to parse the result of an engineNr   r   r   r   r4   r4   4   s    5r   r4   c                       e Zd ZdZy)SearxEngineAPIExceptionz-The website has returned an application errorNr   r   r   r   r6   r6   8   s    7r   r6   c                   R     e Zd ZU dZdZeed<   	 d
dedz  def fdZdefd	Z	 xZ
S ) SearxEngineAccessDeniedExceptionz"The website is blocking the accessz.search.suspended_times.SearxEngineAccessDeniedSUSPEND_TIME_SETTINGNsuspended_timer   c                     || j                         }| d| d| _        || _        t        |   | j                         y)aR  Generic exception to raise when an engine denies access to the results.

        :param suspended_time: How long the engine is going to be suspended in
            second. Defaults to None.
        :type suspended_time: int, None
        :param message: Internal message.  Defaults to ``Access denied``
        :type message: str
        Nz (suspended_time=))_get_default_suspended_timer   r:   r   r   r   r:   r   r   s      r   r   z)SearxEngineAccessDeniedException.__init__C   sH     !!==?N&i'88HJ#1&r   returnc                 2    ddl m}  || j                        S )Nr   )get_setting)searxrA   r9   )r   rA   s     r   r=   z<SearxEngineAccessDeniedException._get_default_suspended_timeR   s    %44455r   )NzAccess denied)r   r   r	   r
   r9   r   __annotations__intr   r=   r   r   s   @r   r8   r8   <   s9    , P#P'sTz '3 '6S 6r   r8   c                   F     e Zd ZU dZdZeed<   	 ddedz  def fdZ xZ	S )	SearxEngineCaptchaExceptionz#The website has returned a CAPTCHA.z)search.suspended_times.SearxEngineCaptchar9   Nr:   r   c                 (    t         |   ||       y N)r   r:   r   r   r>   s      r   r   z$SearxEngineCaptchaException.__init___       Hr   )NCAPTCHA
r   r   r	   r
   r9   r   rC   rD   r   r   r   s   @r   rF   rF   X   s6    - K#KIsTz I3 I Ir   rF   c                   F     e Zd ZU dZdZeed<   	 ddedz  def fdZ xZ	S )	#SearxEngineTooManyRequestsExceptionzThe website has returned a Too Many Request status code

    By default, SearXNG stops sending requests to this engine for 1 hour.
    z1search.suspended_times.SearxEngineTooManyRequestsr9   Nr:   r   c                 (    t         |   ||       y rH   rI   r>   s      r   r   z,SearxEngineTooManyRequestsException.__init__m   rJ   r   )NzToo many requestrL   r   s   @r   rN   rN   c   s;    
 !T#SIsTz I3 I Ir   rN   c                   ,     e Zd ZdZdddef fdZ xZS )SearxEngineXPathExceptionz5Error while getting the result of an XPath expressionr)   r*   r   c                 p    t         |   t        |      dz   |z          || _        t        |      | _        y r,   r.   r0   s      r   r   z"SearxEngineXPathException.__init__t   r1   r   r2   r   s   @r   rQ   rQ   q   s    ?.= .3 . .r   rQ   )r
   typingr   TYPE_CHECKING
lxml.etreer   r$   r   r   finalr!   r&   r(   r4   r6   r8   rF   rN   rQ   r   r   r   <module>rW      s    0 ?? "Y ",n , !^ ! 	!!> !. 4 .6#7 68: 86'C 68I"B II*J I. < .r   