
    ^i*                         S r SSKrSSKJrJr  SSKJr  SSKJr  SSK	J
r
JrJrJrJr  SSKJr  SSKJr  S	S
KJr  S	SKJrJrJrJrJr  \R8                  " \5      r\" S5      r " S S\\\   5      r g)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                   p   \ rS rSr% Sr\\   \S'   \\S      \S'   \\   \S'   Sr	\\
   \S'   S	r\\   \S
'   \\S'   \\   \S'   0 r\\\\4      \S'   \\   \S'   \\\\4      \S'   \\\\4      \S'   S,SS.S\S-  S\S-  S\
\-  SS4S jjjr\S\\   4S j5       r\S\S\S\S\S-  S\S\S\\\4   4S  j5       rS!\S\S\S-  4S" jr\S\4S# j5       rS$\S\R<                  4S% jrS$\S\4S& jr S$\S\!\   4S' jr"S(\!\   S\!\   4S) jr#    S-S\S\S\S\S-  S\S\S\!\   S-  4S* jjr$S+r%g).BaseSearchEngine   z3Abstract base class for all search-engine backends.nametextimagesvideosnewsbookscategoryproviderFdisabledr   priority
search_urlsearch_methodsearch_headersitems_xpathelements_xpathelements_replaceNT)verifyproxytimeoutr*   returnc                0    [        XUS9U l        / U l        g )N)r+   r,   r*   )r   http_clientresults)selfr+   r,   r*   s       C/home/james-whalen/.local/lib/python3.13/site-packages/ddgs/base.py__init__BaseSearchEngine.__init__#   s    %E6R "    c                 V    [         [        [        [        [        S.nXR
                     $ )z"Get result type based on category.r   )r   r   r   r   r   r    )r1   
categoriess     r2   result_typeBaseSearchEngine.result_type'   s)     "" 

 --((r5   queryregion
safesearch	timelimitpagekwargsc                     [         e)z'Build a payload for the search request.)NotImplementedError)r1   r:   r;   r<   r=   r>   r?   s          r2   build_payloadBaseSearchEngine.build_payload3   s
     "!r5   argsc                 t    U R                   R                  " U0 UD6nUR                  S:X  a  UR                  $ g)z$Make a request to the search engine.   N)r/   requeststatus_coder   )r1   rD   r?   resps       r2   rG   BaseSearchEngine.request@   s8    ''88s"99r5   c                     [        SSSSS9$ )zGet HTML parser.TF)remove_blank_textremove_comments
remove_piscollect_ids)LHTMLParser)r1   s    r2   parserBaseSearchEngine.parserG   s     T4TXfkllr5   	html_textc                 >    [         R                  " XR                  S9$ )z!Extract html tree from html text.)rQ   )r   
fromstringrQ   r1   rS   s     r2   extract_treeBaseSearchEngine.extract_treeL   s    y==r5   c                     U$ )z0Pre-process html_text before extracting results. rV   s     r2   pre_process_html!BaseSearchEngine.pre_process_htmlP   s    r5   c                    U R                  U5      nU R                  U5      nUR                  U R                  5      n/ nU H  nU R	                  5       nU R
                  R                  5        H=  u  pxSR                  S UR                  U5       5       5      n	UR                  Xy5        M?     UR                  U5        M     U$ )z&Extract search results from html text. c              3   @   #    U  H  oR                  5       v   M     g 7f)N)strip).0xs     r2   	<genexpr>3BaseSearchEngine.extract_results.<locals>.<genexpr>]   s     E3Da		3Ds   )
r[   rW   xpathr'   r8   r(   itemsjoin__setattr__append)
r1   rS   treerf   r0   itemresultkeyvaluedatas
             r2   extract_results BaseSearchEngine.extract_resultsT   s    )))4	  +

4++,D%%'F"11779
xxE4::e3DEE""3- : NN6"  r5   r0   c                     U$ )zPost-process search results.rZ   )r1   r0   s     r2   post_extract_results%BaseSearchEngine.post_extract_resultsb   s    r5   c           	      `   U R                   " SXX4US.UD6nU R                  S:X  a0  U R                  U R                  U R                  XpR                  S9nO/U R                  U R                  U R                  XpR                  S9nU(       d  gU R                  U5      n	U R                  U	5      $ )zSearch the engine.)r:   r;   r<   r=   r>   GET)paramsheaders)ro   rx   NrZ   )rB   r%   rG   r$   r&   rp   rs   )
r1   r:   r;   r<   r=   r>   r?   payloadrS   r0   s
             r2   searchBaseSearchEngine.searchf   s     $$ 
:Y]
ag
 &T%7%7QXbubuvIT%7%7w`s`stI&&y1((11r5   )r/   r0   )NN)zus-enmoderateNr   )&__name__
__module____qualname____firstlineno____doc__r   str__annotations__r
   r"   boolr#   floatr&   r   intr3   propertytyper   r8   r   dictr   rB   rG   r   rP   rQ   r   ElementrW   r[   listrp   rs   rz   __static_attributes__rZ   r5   r2   r   r      s[   =
3-wJKLLsm$Hhtn$ !Hhuo!OC= 24NHWS#X./4#WS#X.//wsCx011#ei #cDj ##* #X\_bXb #nr # 	)T!W 	) 	) 
"
" 
" 	
"
 :
" 
" 
" 
c3h
" 
"S C C$J  m m m>c >dll ># #  a DG Q  $ $22 2 	2
 :2 2 2 
a42 2r5   r   )!r   loggingabcr   r   collections.abcr   	functoolsr   typingr   r   r	   r
   r   lxmlr   
lxml.etreer   rP   r/   r   r0   r   r   r   r   r   	getLoggerr}   loggerr   r   rZ   r5   r2   <module>r      sV    $  # # % ; ;  0 # T T			8	$CLg2sGAJ g2r5   