
    6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j        e          Z ed          Z G d deee                   Z dS )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                      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#dS ).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                   g | _        d S )N)r*   r+   r)   )r   http_clientclientr%   results)selfr*   r+   r)   s       K/root/.hermes/hermes-agent/venv/lib64/python3.11/site-packages/ddgs/base.py__init__zBaseSearchEngine.__init__#   sA    %E76RRR..t/BCCC "    c                 ^    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                 N     | j         j        |i |}|j        dk    r|j        S dS )z$Make a request to the search engine.   N)r.   requeststatus_coder   )r1   rA   r=   resps       r2   rD   zBaseSearchEngine.requestA   s7    't'888s""9tr4   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     T4TXfkllllr4   	html_textc                 8    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                  }g }|D ]}|                                 }| j                                        D ]h\  }}d                    d                    |                    |                                                              }	|	                    ||	           i|
                    |           |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	  ++

4+,, 	# 	#D%%''F"17799 . .
Uxx

5(9(9 : : @ @ B BCC""3----NN6""""r4   r0   c                     |S )zPost-process search results.rT   )r1   r0   s     r2   post_extract_resultsz%BaseSearchEngine.post_extract_resultsc   s    r4   us-enmoderatec           	      $    | j         d|||||d|}| j        dk    r#|                     | j        | j        |          }n"|                     | j        | j        |          }|sdS |                     |          }	|                     |	          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QXYYIIT%7wWWI 	4&&y11((111r4   )NN)rh   ri   Nr   )$__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   rn   rT   r4   r2   r   r      sE        ==
3-wJKLLLLsm$Hhtn$$$ !Hhuo!!!OOOC=   24NHWS#X./444#WS#X.////wsCx01111#ei # # #cDj ##* #X\_bXb #nr # # # #
 	)T!W 	) 	) 	) X	) 
"
" 
" 	
"
 :
" 
" 
" 
c3h
" 
" 
" ^
"S C C     m m m m _m>c >dl > > > ># #     a    DG Q     $ $2 22 2 	2
 :2 2 2 
a42 2 2 2 2 2r4   r   )!rr   loggingabcr   r   collections.abcr   	functoolsr   typingr   r   r	   r
   r   lxmlr   
lxml.etreer   rL   r.   r   r0   r   r   r   r   r   	getLoggerro   loggerr   r   rT   r4   r2   <module>r      s=   $ $  # # # # # # # # # # # # # # % % % % % % ; ; ; ; ; ; ; ; ; ; ; ; ; ;       0 0 0 0 0 0 # # # # # # T T T T T T T T T T T T T T		8	$	$GCLLh2 h2 h2 h2 h2sGAJ h2 h2 h2 h2 h2r4   