
    iQ                        U d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlmZmZ d dlmZ i Zeeej.                  f   ed<   eed	f   Z G d
 d      ZdededdfdZd Zdededz  fdZdedeedz  edz  edz  f   fdZdeed	f   fdZ de!defdZ"dede#defdZ$ddede!de#ddfdZ%	 	 ddedededz  de#ddf
dZ&y)    N)JSONDecodeError)urlparse)	HTTPErrorHTTPStatusError)SearxXPathSyntaxExceptionSearxEngineXPathExceptionSearxEngineAPIException SearxEngineAccessDeniedException)searx_parent_dirsettings)engineserrors_per_engines.c                   L    e Zd Zdedededededededefd	Zd
efdZd Z	d Z
y)ErrorContextfilenamefunctionline_nocodeexception_classnamelog_messagelog_parameters	secondaryc	                 t    || _         || _        || _        || _        || _        || _        || _        || _        y N)r   r   r   r   r   r   r   r   )	selfr   r   r   r   r   r   r   r   s	            -/root/searxng/searx/metrics/error_recorder.py__init__zErrorContext.__init__   s?     &%#	(;  +1?(    returnc                    t        |t              sy| j                  |j                  k(  xr | j                  |j                  k(  xr | j                  |j                  k(  xr | j
                  |j
                  k(  xrj | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S NF)

isinstancer   r   r   r   r   r   r   r   r   )r   os     r   __eq__zErrorContext.__eq__/   s    !\*MMQZZ' .+.		). 		QVV#. ((A,A,AA	.
   AMM1. ##q'7'77. !++-		
r   c           
          t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  f      S r   )	hashr   r   r   r   r   r   r   r   r   s    r   __hash__zErrorContext.__hash__=   sR    		((  ##	
 	
r   c           	          dj                  | j                  | j                  | j                  | j                  | j
                  | j                  | j                        S )Nz5ErrorContext({!r}, {!r}, {!r}, {!r}, {!r}, {!r}) {!r})formatr   r   r   r   r   r   r   r'   s    r   __repr__zErrorContext.__repr__K   sL    FMMMMLLII$$NN
 	
r   N)__name__
__module____qualname__strintLogParametersTypeboolr   r$   r(   r+    r   r   r   r      sk    )) ) 	)
 ) !) ) *) )(
4 

	
r   r   engine_nameerror_contextr   c                     t         j                  | i       }|j                  |d      dz   ||<   t        |    j                  j                  dt        |             y )Nr      z%s)r   
setdefaultgetr   loggerwarningr/   )r4   r5   errors_for_engines      r   add_error_contextr=   W   sS    *55k2F'8'<'<]A'NQR'Rm$K''c-.@Ar   c                     t        |       D ]S  }|j                  j                  d      }dj                  |dd       dk(  r|c S dj                  |dd       dk(  sQ|c S  | d   S )N/zsearx/engineszsearx/search/processors)reversedr   splitjoin)tracestracesplit_filenames      r   	get_tracerI   ]   sq    &! $)NN$8$8$=88N2b)*o=L88N2b)*.GGL ":r   excc                     | j                   j                  }|"| j                  | j                  j                  }t        |      j                  S r   )requesturlresponser   netloc)rJ   rM   s     r   get_hostnamerP   g   s<    
++//C
{s||/llC=r   c                 ~   d }d }d }d }t        | d      r"| j                  | j                  j                  }|.t        | d      r"| j                  | j                  j                  }||j
                  }t        | t              r5t        | j                  j                        }| j                  j                  }|||fS )N_requestrN   )hasattrrR   rL   rM   rN   hostr"   r   r/   status_codereason_phrase)rJ   rM   rU   reasonhostnames        r   get_request_exception_messagesrY   n   s     CKFHsJCLL$< kkoo
{wsJ/CLL4Lll
88#'#,,223++**r   c                    t        | t              r| j                  fS t        | t              rt	        |       fS t        | t
              rd|v rt	        |       fS t        | t              rt        |       S t        | t              r| j                  | j                  fS t        | t              r| j                  | j                  fS t        | t              rt	        | j                  d         fS t        | t              r| j                  fS y)Nlxmlr   r3   )r"   r   msg	TypeErrorr/   
ValueErrorr   rY   r   	xpath_strmessager   r	   argsr
   )rJ   r   s     r   get_messagesrb      s    #'z#y!C{#z"v'9C{#y!-c22#01s{{++#01s{{++#./CHHQK ""#78~r   c                     | j                   }|j                  }|j                  }||t        j                   j                  k(  r|S |dz   |z   S )N.)	__class__r.   r-   r/   )rJ   	exc_classexc_name
exc_modules       r   get_exception_classnameri      sM    I%%H%%JZ3==+C+CCh&&r   r   r   c           
         t        |       }|j                  }|j                  t              r|t	        t              dz   d  }|j
                  }|j                  }|j                  d   j                         }	~ t        ||||	||||      S )Nr7   r   )
rI   r   
startswithr   lenr   linenocode_contextstripr   )
framerecordsr   r   r   r   searx_framer   r   r   r   s
             r   get_error_contextrr      s     L)K##H+,C 01A578##H  G##A&,,.D(GT;NP[]kmvwwr   c                     t         d   d   sy t        j                         }	 t        |      }t	        ||d   d         }t        ||d ||      }t        | |       ~y # ~w xY w)Ngeneralenable_metricsrA   r7   )r   inspectrG   ri   rb   rr   r=   )r4   rJ   r   rp   r   r   r5   s          r   count_exceptionrw      sj    I/0==?L5c:%c<+;A+>?),8KTSaclm+}5Ls   8A A r   c                     t         d   d   sy t        t        t        j                         dd              }	 t        |d ||xs d|      }t        | |       ~y # ~w xY w)Nrt   ru   r7   r3   )r   listrC   rv   stackrr   r=   )r4   r   r   r   rp   r5   s         r   count_errorr{      s`     I/0!456L),k>K_]_ajk+}5Ls   A A)Fr!   )'typingtrv   jsonr   urllib.parser   httpxr   r   searx.exceptionsr   r   r	   r
   searxr   r   searx.enginesr   r   dictr/   Any__annotations__tupler1   r   r=   rI   rP   rY   rb   BaseExceptionri   r2   rr   rw   r{   r3   r   r   <module>r      sl       ! ,  - ! (* Daee$ )#s(O ;
 ;
|B3 B| B B i  C$J  +	+
3:sTz3:-.+*5c? (' '3 'xDUxbfxx
 
= 
T 
VZ 
  04	 &, 	
 
r   