
    i                     0   d Z ddlZdgZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZmZ ddlmZ ej(                  rdd	lmZ eeee   ee   f   Zej6                   G d
 d             Zedk(  r% e       Zej?                         D ]
  Z  e!e         yy)zFSimple implementation to store TrackerPatterns data in a SQL database.    NTrackerPatternsDB)Iterator)urlparse
urlunparse	parse_qsl	urlencode)	HTTPError)	get_cachelog)get)CacheRowTypec                       e Zd ZdZg dZ G d d      Zd Zd Zd Zde	fd	Z
d
ee	   fdZd
ee	   fdZded
eez  fdZy)r   data_tracker_patterns)z-https://rules1.clearurls.xyz/data.minify.jsonz-https://rules2.clearurls.xyz/data.minify.jsonzQhttps://raw.githubusercontent.com/ClearURLs/Rules/refs/heads/master/data.min.jsonc                   t    e Zd ZU dZej
                  ed<   dZej
                  ed<   dZej
                  ed<   y)TrackerPatternsDB.Fieldsr   
url_regexp   
url_ignore   del_argsN)	__name__
__module____qualname__r   tFinal__annotations__r   r        ,/root/searxng/searx/data/tracker_patterns.pyFieldsr   &   s,    
AGG
AGG!''r   r    c                 "    t               | _        y )N)r
   cacheselfs    r   __init__zTrackerPatternsDB.__init__,   s    [
r   c                     | j                   j                  d      dk7  r7| j                   j                  j                  dd       | j                          y y )Nztracker_patterns loadedOK)r"   
propertiessetloadr#   s    r   initzTrackerPatternsDB.init/   sD    ::  !:;tCJJ!!%%&?FIIK Dr   c                 h   t        j                  d       g }| j                         D ]a  }|| j                  j                     }|| j                  j
                     || j                  j                     f}|j                  ||d f       c | j                  j                  || j                         y )Nz init searx.data.TRACKER_PATTERNSctx)r   debugiter_clear_listr    r   r   r   appendr"   setmanyctx_name)r$   rowsrulekeyvalues        r   r*   zTrackerPatternsDB.load8   s    		45%'((* 	,Dt{{--.CT[[++,T[[))*E KKeT*+	, 	

4T]]3r   r5   c                     || j                   j                     }|| j                   j                     || j                   j                     f}| j                  j                  ||| j                  d        y )N)r6   r7   r.   expire)r    r   r   r   r"   r)   r3   )r$   r5   r6   r7   s       r   addzTrackerPatternsDB.addF   s_    4;;))*''(%%&
 	

3etLr   returnc              #      K   | j                          | j                  j                  | j                        D ]  \  }}||d   |d   f  y w)Nr-   r   r   )r+   r"   pairsr3   )r$   r6   r7   s      r   ruleszTrackerPatternsDB.rulesN   sM     		****t}}*= 	*JCuQxq))	*s   AAc           	   #   x  K   d }| j                   D ]\  }t        j                  d|       	 t        |d      }|j                  dk7  r&t        j
                  d|j                   d|        \ n |t        j                  d       y |j                         d	   j                         D ]Z  }|d
   j                  dd      |j                  dg       D cg c]  }|j                  dd       c}|j                  dg       f \ y # t        $ r"}t        j
                  d||       Y d }~d }~ww xY wc c}w w)Nz'TRACKER_PATTERNS: Trying to fetch %s...   )timeoutz:TRACKER_PATTERNS: HTTPError (%s) occured while fetching %s   z'TRACKER_PATTERNS: ClearURL ignore HTTP  z5TRACKER_PATTERNS: failed fetching ClearURL rule lists	providers
urlPatternz\\\
exceptionsr>   )CLEAR_LIST_URLr   r/   http_getr	   warningstatus_codeerrorjsonvaluesreplacer   )r$   respurlexcr5   s        r   r0   z!TrackerPatternsDB.iter_clear_listS   s2    && 	CII?EQ/ 3&EdFVFVEWWXY\X]^_	 <IIMNIIK,335 	D\"**6486:hh|R6PQsVT*Q"% 	  XZ]_bc" Rs:   (D:DBD:D5-D:	D2D-'D:-D22D:rQ   c           	         |}t        |      }| j                         D ]  }|j                  }|s nt        j                  || j
                  j                     |      sCd}|| j
                  j                     D ]  }t        j                  ||      sd} n |rt        t        |j                              }|r|j                         D ]o  \  }	}
|| j
                  j                     D ]N  }t        j                  ||	      st        j                  d|j                  |	|
       |j                  |	|
f       P q |j!                  t#        |            }t%        |      }J|| j
                  j                     D ]Y  }t        j                  ||      st        j                  d|j                  |       |j!                  d      }t%        |      }   ||k7  r|S y)zThe URL arguments are normalized and cleaned of tracker parameters.

        Returns bool ``True`` to use URL unchanged (``False`` to ignore URL).
        If URL should be modified, the returned string is the new URL to use.
        )rQ   FTz0TRACKER_PATTERNS: %s remove tracker arg: %s='%s')queryz-TRACKER_PATTERNS: %s remove tracker arg: '%s' )r   r>   rT   rematchr    r   r   listr   copyr   r   r/   netlocremove_replacer   r   )r$   rQ   new_urlparsed_new_urlr5   	query_str	do_ignorepattern
query_argsnamevals              r   	clean_urlzTrackerPatternsDB.clean_urlo   s    !g.JJL 2	D+11I 88D!7!78'BI 6 67 88GW- $I
 
 04Y~?S?S5T0UJ!+!2 ;ID##'(<(<#= ;88GT2II RTbTiTikoqt '--tSk:;; "0!8!8y?T!8!U$^4  $DKK$8$89 Gxx3		"QSaShShjst)7)@)@r)@)J",^"<[2	h c>Nr   N)r   r   r   r3   rH   r    r%   r+   r*   RuleTyper:   r   r>   r0   strboolre   r   r   r   r   r      ss     'HN !4M M*x) *
(!3 8AS ATCZ Ar   __main__)"__doc__typingr   __all__rV   collections.abcr   urllib.parser   r   r   r   httpxr	   searx.data.corer
   r   searx.networkr   rI   TYPE_CHECKINGsearx.cacher   tuplerg   rX   rf   finalr   r   dbr>   rprintr   r   r   <module>ry      s    L 
 	 $ C C  * )??( d3ic*+ V V 	Vr z		BXXZ a r   