
    i4                    v   d dl mZ d dlZd dl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 d dlZd dlZddlmZ dd	lmZmZ dd
lmZ  ej        e          Zi d ddddddddddddddddddddddd d!d"d#d$d%d&d'd(Zdd2Zdd5Zdd7Zdd8Zdd9Zdd?Z	 	 	 	 dddEZ  ej!        d@F          ddG            Z"ddHZ#e"$                                ddI            Ze"$                                 ej%        dJdKd@dLM           ej%        dNdOdPQ           ej%        dRdSdT ej&        g dU          V           ej%        dWdX ej&        g dY          dZ[           ej%        d\d]e'd^[           ej%        d_d`daQ           ej%        dbdcd@dddef           ej%        dgdhdiQ           ej%        djdkdl ej&        g dm          V           ej%        dndoddpq           ej%        drdsdtQ           ej%        dudvd@dwq          dd                                                                                                                                                            Z(e"$                                 ej%        dJdKd@dM           ej%        dNdOddPq           ej%        dRdSdT ej&        g dU          V           ej%        dWdX ej&        g d                     ej%        dd ej&        g d                     ej%        dd ej&        g d                     ej%        dd ej&        g d                     ej%        dd ej&        g d                     ej%        dd ej&        g d                     ej%        d\d]e'd^[           ej%        d_d`daQ           ej%        dbdcd@dddef           ej%        dgdhdiQ           ej%        dndoddpq           ej%        drdsdtQ           ej%        dudvd@dwq          dd                                                                                                                                                                                                            Z)e"$                                 ej%        dJdKd@dM           ej%        dNdOddPq           ej%        dRdSdT ej&        g dU          V           ej%        dWdX ej&        g d          d[           ej%        dd ej&        ddg                     ej%        dbd ej&        g d                     ej%        dd ej&        ddg                     ej%        d\d]e'd^[           ej%        d_d`daQ           ej%        drdsdtQ           ej%        dudvd@dwq          dd                                                                                                                                                Z*e"$                                 ej%        dJdKd@dM           ej%        dNdOddPq           ej%        dRdSdT ej&        g dU          V           ej%        dWdX ej&        g dY          dZ[           ej%        d\d]e'd^[           ej%        d_d`daQ           ej%        drdsdtQ           ej%        dudvd@dwq          dd                                                                                                            Z+edk    r e"d           dS dS )    )annotationsN)ThreadPoolExecutoras_completed)datetime)Path)unquote   )DDGS)_expand_proxy_tb_alias
json_dumps)__version__blackred   green   yellow   blue   magenta   cyan   bright_black   
bright_red	   bright_green
   bright_yellow   bright_blue   bright_magenta   bright_cyan   white   bright_whitekeywordsstrdatalist[dict[str, str]]function_namefilename
str | NonereturnNonec                "   |r+|                     d          r|                    dd          nd |f\  }}|r|n| d|  dt          j                    d}|dk    rt	          | d| |           d S |dk    rt          | d| |           d S d S )N)z.csvz.json.r	   _%Y%m%d_%H%M%Scsvjson)endswithrsplitr   now	_save_csv
_save_json)r,   r.   r0   r1   exts        P/root/projects/butler/venv/lib/python3.11/site-packages/duckduckgo_search/cli.py
_save_datarB   (   s    /7vH<M<MN_<`<`vHOOC+++gkmufvMHc#exxM)e)eH)e)ex|~~)e)e)eH
e||X%%%%t,,,,,	h&&&&----- 
    jsonfile
str | Pathc                    t          | dd          5 }|                    t          |                     d d d            d S # 1 swxY w Y   d S )Nwutf-8)encoding)openwriter   )rD   r.   files      rA   r?   r?   1   s    	hg	.	.	. %$

:d##$$$% % % % % % % % % % % % % % % % % %s   #AA
Acsvfilec                *   t          | ddd          5 }|rd|d                                         }t          j        ||t          j                  }|                                 |                    |           d d d            d S # 1 swxY w Y   d S )NrG    rH   )newlinerI   r   )
fieldnamesquoting)rJ   keysr9   
DictWriterQUOTE_MINIMALwriteheader	writerows)rM   r.   rL   headerswriters        rA   r>   r>   6   s    	gsB	9	9	9 #T 	#1gllnnG^DWcFWXXXF   T"""# # # # # # # # # # # # # # # # # #s   A'BBBc           	        | rt          | d          D ]\  }}t          j        | dd dd           t          |                                d          D ]a\  }\  }}|r-|dv rd	nd
}|dk    rdn|}t          j        | |ddd          }n|}t          j        |d| dt
          |         d           bt                       d S d S )Nr	   startz.	    zN==============================================================================r   r)   )bgfg)contenthrefimagesource	thumbnailurli,  N   detected_languagelanguagerO   z            T)widthinitial_indentsubsequent_indentpreserve_paragraphsz<12)r]   r^   overline)	enumerateclicksechoitems	wrap_textCOLORSinput)r.   iejkvrh   texts           rA   _print_datarz   ?   s*    d!,,, 	 	DAqK1//X//GHHHH&qwwyy::: 	W 	W	6Aq #$(b#b#bCChjE&'+>&>&>

AA ?eBRZpt  DD Dq,,d,,VAYQUVVVVVGGGG 	 	rC   c                J   |                      dd                               dd                               dd                               dd                               dd                               d	d                               d
d                               dd          } | S )NfiletyperO   :"'site r7   /\)replace)r,   s    rA   _sanitize_keywordsr   P   s    R((	b			c						c			c			s			b		  OrC   rd   dir_pathproxyverifyboolc           	        	 t          j        |ddd|                              |           }|j        dk    rkt	          t
          j                            ||d d                   d          5 }|                    |j	                   d d d            d S # 1 swxY w Y   d S d S # t          $ r@}t                              d|  dt          |          j         d|            Y d }~d S d }~ww xY w)Nrandomr    )r   impersonateimpersonate_ostimeoutr      wbzdownload_file url=r   )primpClientgetstatus_coderJ   ospathjoinrK   r_   	Exceptionloggerdebugtype__name__)rd   r   r1   r   r   resprL   exs           rA   _download_filer   ^   sW   J|%Xh`bkqrrrvv
 
 s""bgll8Xdsd^<<dCC )t

4<((() ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) #"  J J JH#HHR0AHHBHHIIIIIIIIIJs<   A-B& /B
B& BB& BB& &
C005C++C0Tresultsthreads
int | Nonepathnamec           
        |r|n| d|  dt          j                    d}t          j        |d           |dn|}t	          |          5 }g }	t          |d          D ]\  }
}|d	k    r|d
         n|d         }t          |                    d          d                             d          d                   }|                    t          |||
 d| ||          }|	
                    |           t          j        t          |	          dddd          5 }t          |	          D ]+}|                                 |                    d           ,	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )Nr7   r8   T)exist_okr    )max_workersr	   r[   imagesra   r`   r   ?r   Downloading2   )lengthlabelshow_percentshow_posrh   )r   r=   r   makedirsr   rm   r   splitsubmitr   appendrn   progressbarlenr   resultupdate)r,   r   r0   r   r   r   r   r   executorfuturesrt   resrd   r1   fbarfutures                    rA   _download_resultsr   j   s+     a88%a%a%a%a8<>>%a%a%aDKt$$$$ObbG		0	0	0 Hq111 	 	FAs"/8";";#g,,VCsyy~~b177<<Q?@@HTa;L;L(;L;LeU[\\ANN1w<<}4RV^`
 
 
 	&w//  

1	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s7   CE><E&E>&E*	*E>-E*	.E>>FF)chainc                     dS )zduckduckgo_search CLI toolN r   rC   rA   clir      s	     	DrC   c                     	 t                       d S # t          $ r6} t          j        t	          |           j         d|             Y d } ~ d S d } ~ ww xY w)Nz: )r   r   rn   echor   r   )r   s    rA   safe_entry_pointr      sl    1 1 1 1
d2hh'//2//0000000001s    
A+AAc                 8    t          t                     t          S )N)printr   r   rC   rA   versionr      s    	+rC   z-kz
--keywordsztext search, keywords for query)requiredhelpz-rz--regionz8us-en, ru-ru, etc. -region https://duckduckgo.com/params)r   z-sz--safesearchmoderate)onr   off)defaultr   z-tz--timelimit)drG   myzday, week, month, year)r   r   z-mz--max_resultszmaximum number of resultsz-oz--outputzGcsv, json or filename.csv|json (save the results to a csv or json file)z-dz
--downloadFz-download results. -dd to set custom directory)is_flagr   r   z-ddz--download-directoryz!Specify custom download directoryz-bz	--backendauto)r   htmllitez-thz	--threadszdownload threads, default=10)r   r   z-pz--proxyz<the proxy to send requests, example: socks5://127.0.0.1:9150z-vz--verifyz"verify SSL when making the requestregion
safesearch	timelimitbackendoutputdownloaddownload_directoryintmax_resultsc           	        t          t          |
          |                              | |||||	          }t          |           } |rt	          | |d|           |rt          | |d|
|||           |s|st          |           dS dS dS )z;CLI function to perform a text search using DuckDuckGo API.r   r   )r,   r   r   r   r   r   ry   )r1   r0   r   r   r   r   N)r
   r   ry   r   rB   r   rz   )r,   r   r   r   r   r   r   r   r   r   r   r   r.   s                rA   ry   ry      s    8 ,U33FCCCHH I  D "(++H <8T6F;;;; 	
 '	
 	
 	
 	
  ( D   rC   zkeywords for queryzus-en)DayWeekMonthYear)r   z-sizez--size)SmallMediumLarge	Wallpaperz-cz--color)color
MonochromeRedOrangeYellowGreenBluePurplePinkBrownBlackGrayTealWhitez-typez--type_image)photoclipartgiftransparentlinez-lz--layout)SquareTallWidez-licz--license_image)anyPublicShareShareCommerciallyModifyModifyCommerciallysizer   
type_imagelayoutlicense_imagec                "   t          t          |          |                              | |||||||||
  
        }t          |           } |rt	          | |d|           |	rt          | |d||||
           |s|	st          |           dS dS dS )z=CLI function to perform a images search using DuckDuckGo API.r   )
r,   r   r   r   r  r   r  r  r	  r   r   r0   r1   r   N)r
   r   r   r   rB   r   rz   )r,   r   r   r   r  r   r  r  r	  r   r   r   r   r   r   r   r.   s                    rA   r   r      s    z ,U33FCCCJJ# K  D "(++H L8TFKKKK 	
"'	
 	
 	
 	
  ( D   rC   )r   rG   r   zday, week, monthz-resz--resolutionhighstandartz
--duration)shortmediumlongz--license_videoscreativeCommonyoutube
resolutiondurationlicense_videosc           
         t          t          |	          |
                              | |||||||          }t          |           } |rt	          | |d|           dS t          |           dS )z=CLI function to perform a videos search using DuckDuckGo API.r   )r,   r   r   r   r  r  r  r   videosr  N)r
   r   r  r   rB   rz   )r,   r   r   r   r  r  r  r   r   r   r   r.   s               rA   r  r  )  s    4 ,U33FCCCJJ% K 	 	D "(++H 8TFKKKKKKDrC   c                    t          t          |          |                              | ||||          }t          |           } |rt	          | |d|           dS t          |           dS )z;CLI function to perform a news search using DuckDuckGo API.r   )r,   r   r   r   r   newsr  N)r
   r   r  r   rB   rz   )	r,   r   r   r   r   r   r   r   r.   s	            rA   r  r  T  s    ( ,U33FCCCHH&Z9bm I  D "(++H 8T&IIIIIIDrC   __main__ddgs)	prog_name)
r,   r-   r.   r/   r0   r-   r1   r2   r3   r4   )rD   rE   r.   r/   r3   r4   )rM   rE   r.   r/   r3   r4   )r.   r/   r3   r4   )r,   r-   r3   r-   )rd   r-   r   r-   r1   r-   r   r2   r   r   r3   r4   )NNTN)r,   r-   r   r/   r0   r-   r   r2   r   r   r   r   r   r2   r3   r4   )r3   r4   )r3   r-   )r,   r-   r   r2   r   r-   r   r2   r   r-   r   r2   r   r   r   r2   r   r   r   r   r   r2   r   r   r3   r4   )"r,   r-   r   r-   r   r-   r   r2   r  r2   r   r2   r  r2   r  r2   r	  r2   r   r   r   r2   r   r   r   r   r   r2   r   r2   r   r   r3   r4   )r,   r-   r   r-   r   r-   r   r2   r  r2   r  r2   r  r2   r   r   r   r2   r   r2   r   r   r3   r4   )r,   r-   r   r-   r   r-   r   r2   r   r   r   r2   r   r2   r   r   r3   r4   ),
__future__r   r9   loggingr   concurrent.futuresr   r   r   pathlibr   urllib.parser   rn   r   duckduckgo_searchr
   utilsr   r   r   r   	getLoggerr   r   rr   rB   r?   r>   rz   r   r   r   groupr   r   commandoptionChoicer   ry   r   r  r  r   rC   rA   <module>r)     s
   " " " " " " 



  				 ? ? ? ? ? ? ? ?                           # # # # # # 5 5 5 5 5 5 5 5            		8	$	$
w
u
 w
 x	

 v
 y
 v
 ~
 |
 ~
 
 
 
 
 
  !
(. . . .% % % %
# # # #   "   	J 	J 	J 	J      : 4	 	 	 	
1 1 1 1    
 dL46WXXXdJ%_```dNJ\U\JcJcJc=d=deeedM5I5I5I(J(JQijjjdO#4OPPPdJ%nooodL$Dsttte+2UVVVdKlelC[C[C[6\6\]]]e["3QRRRdI$bcccdJ3WXXX% % % YX dc SR ^] WV ut po QP kj fe a` YX %P dL46JKKKdJ6pqqqdNJ\U\JcJcJc=d=deeedM5U5U5U(V(VWWWgxlel3\3\3\&]&]^^^		
 	
 	

 
  , g~LEL9k9k9k,l,lmmmdJ\U\2L2L2L%M%MNNN
	eee	f	f  
 dO#4OPPPdJ%nooodL$Dsttte+2UVVVe["3QRRRdI$bcccdJ3WXXX- - - YX dc SR WV ut po QP  ON nm-  _^ XW fe rq LK T-` dL46JKKKdJ6pqqqdNJ\U\JcJcJc=d=deeedM___(E(EL^___fn<5<8L+M+MNNNdL|u|4O4O4O'P'PQQQf(|u|=My<Y/Z/Z[[[dO#4OPPPdJ%nooodI$bcccdJ3WXXX   YX dc po QP \[ RQ ON `_ fe rq LK > dL46JKKKdJ6pqqqdNJ\U\JcJcJc=d=deeedM5I5I5I(J(JQijjjdO#4OPPPdJ%nooodI$bcccdJ3WXXX   YX dc po QP kj fe rq LK * zC& rC   