Ë
    cQêj+  ã                   óæ   — d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZmZ ddlmZ ddlmZ d	d
lmZ d	dlmZmZmZmZmZ  ej8                  e«      Z ed«      Z G d„ deee   «      Z y)zBase class for search engines.é    N)ÚABCÚabstractmethod)ÚMapping)Úcached_property)ÚAnyÚClassVarÚGenericÚLiteralÚTypeVar)Úhtml)Ú
HTMLParseré   )Ú
HttpClient)ÚBooksResultÚImagesResultÚ
NewsResultÚ
TextResultÚVideosResultÚTc                   óH  — e Zd ZU dZee   ed<   eed      ed<   ee   ed<   dZee	   ed<   dZ
ee   ed	<   eed
<   ee   ed<   i Zeeeef      ed<   ee   ed<   eeeef      ed<   eeeef      ed<   d*ddœdedz  dedz  de	ez  ddfd„Zedee   fd„«       Zedededededz  dededeeef   fd„«       Zd ededefd!„Zedefd"„«       Zd#edej:                  fd$„Zd#edefd%„Zd#ede e   fd&„Z!d'e e   de e   fd(„Z"	 	 	 	 d+dededededz  dedede e   dz  fd)„Z#y),ÚBaseSearchEnginez3Abstract base class for all search-engine backends.Úname©ÚtextÚimagesÚvideosÚnewsÚbooksÚcategoryÚproviderFÚdisabledr   ÚpriorityÚ
search_urlÚsearch_methodÚheaders_updateÚitems_xpathÚelements_xpathÚelements_replaceNT)ÚverifyÚproxyÚtimeoutr)   Úreturnc                ó–   — t        |||¬«      | _        | j                  j                  j                  | j                  «       g | _        y )N)r*   r+   r)   )r   Úhttp_clientÚclientr%   Úresults)Úselfr*   r+   r)   s       úN/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/ddgs/base.pyÚ__init__zBaseSearchEngine.__init__#   s:   € Ü%¨E¸7È6ÔRˆÔØ×Ñ×Ñ×.Ñ.¨t×/BÑ/BÔCØ "ˆ�ó    c                 óX   — t         t        t        t        t        dœ}|| j
                     S )z"Get result type based on category.r   )r   r   r   r   r   r   )r1   Ú
categoriess     r2   Úresult_typezBaseSearchEngine.result_type(   s+   € ô Ü"Ü"ÜÜ ñ
ˆ
ð ˜$Ÿ-™-Ñ(Ð(r4   ÚqueryÚregionÚ
safesearchÚ	timelimitÚpageÚkwargsc                 ó   — t         ‚)z'Build a payload for the search request.)ÚNotImplementedError)r1   r8   r9   r:   r;   r<   r=   s          r2   Úbuild_payloadzBaseSearchEngine.build_payload4   s
   € ô "Ð!r4   Úargsc                 ór   —  | j                   j                  |i |¤Ž}|j                  dk(  r|j                  S y)z$Make a request to the search engine.éÈ   N)r.   ÚrequestÚstatus_coder   )r1   rA   r=   Úresps       r2   rD   zBaseSearchEngine.requestA   s:   € à'ˆt×Ñ×'Ñ'¨Ð8°Ñ8ˆØ×Ñ˜sÒ"Ø—9‘9ÐØr4   c                 ó    — t        dddd¬«      S )zGet HTML parser.TF)Úremove_blank_textÚremove_commentsÚ
remove_pisÚcollect_ids)ÚLHTMLParser)r1   s    r2   ÚparserzBaseSearchEngine.parserH   s   € ô ¨TÀ4ÐTXÐfkÔlÐlr4   Ú	html_textc                 óD   — t        j                  || j                  ¬«      S )z!Extract html tree from html text.)rM   )r   Ú
fromstringrM   ©r1   rN   s     r2   Úextract_treezBaseSearchEngine.extract_treeM   s   € ä�‰˜y°·±Ô=Ð=r4   c                 ó   — |S )z0Pre-process html_text before extracting results.© rQ   s     r2   Úpre_process_htmlz!BaseSearchEngine.pre_process_htmlQ   s   € àÐr4   c           	      ó¶  — | j                  |«      }| j                  |«      }|j                  | j                  «      }g }|D ]”  }| j	                  «       }| j
                  j                  «       D ]T  \  }}dj                  dj                  |j                  |«      «      j                  «       «      }	|j                  ||	«       ŒV |j                  |«       Œ– |S )z&Extract search results from html text.ú Ú )rU   rR   Úxpathr&   r7   r'   ÚitemsÚjoinÚsplitÚ__setattr__Úappend)
r1   rN   ÚtreerZ   r0   ÚitemÚresultÚkeyÚvalueÚdatas
             r2   Úextract_resultsz BaseSearchEngine.extract_resultsU   sÈ   € à×)Ñ)¨)Ó4ˆ	Ø× Ñ  Ó+ˆØ—
‘
˜4×+Ñ+Ó,ˆØˆØò 	#ˆDØ×%Ñ%Ó'ˆFØ"×1Ñ1×7Ñ7Ó9ò .‘
��UØ—x‘x §¡¨¯
©
°5Ó(9Ó :× @Ñ @Ó BÓC�Ø×"Ñ" 3¨Õ-ð.ð �N‰N˜6Õ"ð	#ð ˆr4   r0   c                 ó   — |S )zPost-process search results.rT   )r1   r0   s     r2   Úpost_extract_resultsz%BaseSearchEngine.post_extract_resultsc   s   € àˆr4   c           	      ó<  —  | j                   d|||||dœ|¤Ž}| j                  dk(  r)| j                  | j                  | j                  |¬«      }n(| j                  | j                  | j                  |¬«      }|sy| j	                  |«      }	| j                  |	«      S )zSearch the engine.)r8   r9   r:   r;   r<   ÚGET)Úparams)rd   NrT   )r@   r$   rD   r#   re   rg   )
r1   r8   r9   r:   r;   r<   r=   ÚpayloadrN   r0   s
             r2   ÚsearchzBaseSearchEngine.searchg   s£   € ð %�$×$Ñ$ð 
Ø °:ÈÐY]ñ
Øagñ
ˆð ×Ñ Ò&ØŸ™ T×%7Ñ%7¸¿¹ÐQX˜ÓY‰IàŸ™ T×%7Ñ%7¸¿¹Èw˜ÓWˆIÙØØ×&Ñ& yÓ1ˆØ×(Ñ(¨Ó1Ð1r4   )NN)zus-enÚmoderateNr   )$Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚstrÚ__annotations__r
   r!   Úboolr"   Úfloatr%   r   Úintr3   ÚpropertyÚtyper   r7   r   Údictr   r@   rD   r   rL   rM   r   ÚElementrR   rU   Úlistre   rg   rl   rT   r4   r2   r   r      sR  … Ù=à
�3‰-ÓØ�wÐJÑKÑLÓLØ�s‰mÓØ$€Hˆh�t‰nÓ$Ø !€Hˆh�u‰oÓ!àƒOØ˜C‘=Ó Ø24€N�H˜W S¨# XÑ.Ñ/Ó4Ø˜#‘ÓØ˜W S¨# XÑ.Ñ/Ó/Ø˜w s¨C xÑ0Ñ1Ó1ð#Ðeiò #˜c D™jð #¸#À¹*ð #ÐX\Ð_bÑXbð #Ðnró #ð
 ð	)˜T !™Wò 	)ó ð	)ð ð
"àð
"ð ð
"ð ð	
"ð
 ˜‘:ð
"ð ð
"ð ð
"ð 
ˆc�3ˆh‰ò
"ó ð
"ð˜Sð ¨Cð °Có ð ðm˜ò mó ðmð> cð >¨d¯l©ló >ð¨#ð °#ó ð¨ð °°a±ó ð¨D°©Gð ¸¸Q¹ó ð Ø$Ø $Øñ2àð2ð ð2ð ð	2ð
 ˜‘:ð2ð ð2ð ð2ð 
ˆa‰�4‰ô2r4   r   )!rq   ÚloggingÚabcr   r   Úcollections.abcr   Ú	functoolsr   Útypingr   r   r	   r
   r   Úlxmlr   Ú
lxml.etreer   rL   r.   r   r0   r   r   r   r   r   Ú	getLoggerrn   Úloggerr   r   rT   r4   r2   ú<module>r…      sX   ðÙ $ã ß #Ý #Ý %ß ;Õ ;å Ý 0å #ß TÕ Tà	ˆ×	Ñ	˜8Ó	$€ÙˆCƒL€ôh2�s˜G A™Jõ h2r4   