+
    0j+                         R t ^ RIt^ RIHtHt ^ RIHt ^ RIHt ^ RI	H
t
HtHtHtHt ^ RIHt ^ RIHt ^RIHt ^R	IHtHtHtHtHt ]P8                  ! ]4      t]! R
4      t ! R R]]],          4      t R# )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                     a  ] tR t^t o RtRt^t/ tRRR/V 3R lR lllt]	V 3R lR	 l4       t
]V 3R
 lR l4       tV 3R lR lt]V 3R lR l4       tV 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRV 3R lR lltV 3R ltRtV tR# )BaseSearchEnginez3Abstract base class for all search-engine backends.FNverifyTc                \   < V ^8  d   QhRS[ R,          RS[R,          RS[S[ ,          RR/# )   proxyNtimeoutr   return)strintbool)format__classdict__s   "^/Users/mitch_tango/dev/rabbit-r1-livekit/agent/.venv/lib/python3.14/site-packages/ddgs/base.py__annotate__BaseSearchEngine.__annotate__#   s9     # #cDj ##* #X\_bXb #nr #    c                   \        WVR 7      V n        V P                  P                  P                  V P                  4       . V n        R# ))r   r   r   N)r   http_clientclientheaders_updateresults)selfr   r   r   s   &&&$r!   __init__BaseSearchEngine.__init__#   s8    %E6R..t/B/BC "r$   c                0   < V ^8  d   QhRS[ S[,          /# r   r   )typer   )r   r    s   "r!   r"   r#   )   s     	) 	)T!W 	)r$   c           
     f    R\         R\        R\        R\        R\        /pWP
                  ,          # )z"Get result type based on category.textimagesvideosnewsbooks)r   r   r   r   r   category)r*   
categoriess   & r!   result_typeBaseSearchEngine.result_type(   s3     JllJ[

 --((r$   c                h   < V ^8  d   QhRS[ RS[ RS[ RS[ R,          RS[RS[ RS[S[ S[3,          /# 	r   queryregion
safesearch	timelimitNpagekwargsr   )r   r   dictr   )r   r    s   "r!   r"   r#   5   s]     
" 
"
" 
" 	
"
 :
" 
" 
" 
c3h
"r$   c                    \         h)z'Build a payload for the search request.)NotImplementedError)r*   r<   r=   r>   r?   r@   rA   s   &&&&&&,r!   build_payloadBaseSearchEngine.build_payload4   s
     "!r$   c                ,   < V ^8  d   QhRS[ RS[ RS[ /# )r   argsrA   r   )r   )r   r    s   "r!   r"   r#   A   s"      S C C r$   c                x    V P                   P                  ! V/ VB pVP                  ^8X  d   VP                  # R# )z$Make a request to the search engine.N)r&   requeststatus_coder1   )r*   rH   rA   resps   &*, r!   rJ   BaseSearchEngine.requestA   s8    ''88s"99r$   c                    < V ^8  d   QhRS[ /# r.   LHTMLParser)r   r    s   "r!   r"   r#   I   s     m m mr$   c                     \        RRRRR7      # )zGet HTML parser.TF)remove_blank_textremove_comments
remove_piscollect_idsrO   )r*   s   &r!   parserBaseSearchEngine.parserH   s     T4TXfkllr$   c                :   < V ^8  d   QhRS[ RS[P                  /# r   	html_textr   )r   r   Element)r   r    s   "r!   r"   r#   M   s     > >c >dll >r$   c                D    \         P                  ! WP                  R7      # )z!Extract html tree from html text.)rV   )r   
fromstringrV   r*   rZ   s   &&r!   extract_treeBaseSearchEngine.extract_treeM   s    y==r$   c                &   < V ^8  d   QhRS[ RS[ /# rY   )r   )r   r    s   "r!   r"   r#   Q   s      # # r$   c                    V# )z0Pre-process html_text before extracting results. r^   s   &&r!   pre_process_html!BaseSearchEngine.pre_process_htmlQ   s    r$   c                6   < V ^8  d   QhRS[ RS[S[,          /# rY   )r   listr   )r   r    s   "r!   r"   r#   U   s       a r$   c           	        V P                  V4      pV P                  V4      pVP                  V P                  4      p. pV F  pV P	                  4       pV P
                  P                  4        FS  w  rxRP                  RP                  VP                  V4      4      P                  4       4      p	VP                  Wy4       KU  	  VP                  V4       K  	  V# )z&Extract search results from html text.  )rd   r_   xpathitems_xpathr8   elements_xpathitemsjoinsplit__setattr__append)
r*   rZ   treern   r)   itemresultkeyvaluedatas
   &&        r!   extract_results BaseSearchEngine.extract_resultsU   s    )))4	  +

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

5(9 : @ @ BC""3- : NN6"  r$   c                F   < V ^8  d   QhRS[ S[,          RS[ S[,          /# )r   r)   r   )rg   r   )r   r    s   "r!   r"   r#   c   s#      DG Q r$   c                    V# )zPost-process search results.rc   )r*   r)   s   &&r!   post_extract_results%BaseSearchEngine.post_extract_resultsc   s    r$   c                p   < V ^8  d   QhRS[ RS[ RS[ RS[ R,          RS[RS[ RS[S[,          R,          /# r;   )r   r   rg   r   )r   r    s   "r!   r"   r#   g   s]     2 22 2 	2
 :2 2 2 
a42r$   c                V   V P                   ! R
RVRVRVRVRV/VB pV P                  R8X  d*   V P                  V P                  V P                  VR7      pM(V P                  V P                  V P                  VR7      pV'       g   R	# V P	                  V4      p	V P                  V	4      # )zSearch the engine.r<   r=   r>   r?   r@   GET)params)rx   Nrc   )rE   search_methodrJ   
search_urlry   r}   )
r*   r<   r=   r>   r?   r@   rA   payloadrZ   r)   s
   &&&&&&,   r!   searchBaseSearchEngine.searchg   s     $$ 

 &
3=
IR
Y]
ag
 &T%7%7QXYIT%7%7wWI&&y1((11r$   c                  < V ^8  d   Qh/ S[ S[,          ;R&   S[ S[R,          ,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[ S[,          ;R&   S[;R&   S[ S[,          ;R&   S[ S[S[S[3,          ,          ;R&   S[ S[,          ;R	&   S[ S[S[S[3,          ,          ;R
&   S[ S[S[S[3,          ,          ;R&   # )r   namer6   providerdisabledpriorityr   r   r(   rl   rm   elements_replace)r1   r2   r3   r4   r5   )r   r   r	   r   floatr   )r   r    s   "r!   r"   r#      s      3-  wJKLL	 
 sm  tn$  uo!  O  C=   WS#X./4  #  WS#X.//  wsCx011 r$   )r&   r)   )NN)zus-enmoderateN   )__name__
__module____qualname____firstlineno____doc__r   r   r(   r+   propertyr8   r   rE   rJ   r   rV   r_   rd   ry   r}   r   __annotate_func____static_attributes____classdictcell__)r    s   @r!   r   r      s     =
  %H !H 35N
#ei # #
 	) 	) 
" 
"  m m> >   2 2i  r$   r   )!r   loggingabcr   r   collections.abcr   	functoolsr   typingr   r   r   r	   r
   lxmlr   
lxml.etreer   rP   r&   r   r)   r   r   r   r   r   	getLoggerr   loggerr   r   rc   r$   r!   <module>r      sV    $  # # % ; ;  0 # T T			8	$CLh2sGAJ h2r$   