
    ^iC              <       N   S r SSKrSSKrSSKrSSKJrJr  SSKJrJr  SSK	J
r
  SSKJr  SSKrSSKrSSKJr  SS	KJr  SS
KJr  \R*                  " \5      r0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_rS)\R2                  S*\R4                  S+\\   S-  S,\4S- jrS.\S/\\\\4      S0\S1\S-  S,S4
S2 jr S3\\
-  S/\\\\4      S,S4S4 jr!S5\\
-  S/\\\\4      S,S4S6 jr"S/\\\\4      S,S4S7 jr#S.\S,\4S8 jr$S9\S:\S1\S;\S-  S<\%S,S4S= jr&   SS>S?.S.\S@\\\\4      S0\S;\S-  SA\'S-  SB\S-  S<\%S,S4SC jjjr(\RR                  " S>SD9SSE j5       r*SSF jr+\*RY                  5       S,\4SG j5       r-\*RY                  5       \R\                  " SHSISJSK9\R\                  " SLSMSNSK9\R\                  " SOSPSQSRSS9\R\                  " STSUSV\R^                  " / SWQ5      SX9\R\                  " SYSZ\R^                  " / S[Q5      S\S]9\R\                  " S^S_S\'S`Sa9\R\                  " SbScS\'SdSa9\R\                  " SeSfSg/\R^                  " / ShQ5      S>\Si9\R\                  " SjSkSlSK9\R\                  " SmSnS>SoSpSq9\R\                  " SrSsStSK9\R\                  " SuSvSSwSS9\R\                  " SxSySzSK9\R\                  " S{S|S>S}SS9S.\S~\S-  S\S\S\S-  S\'S-  S\'S\S\S-  S\S-  SA\'S;\S-  S\%S<\%S,S4S j5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       r0\*RY                  5       \R\                  " SHSISSK9\R\                  " SLSMSSK9\R\                  " SOSPSQSRSS9\R\                  " STSUSV\R^                  " / SWQ5      SX9\R\                  " SYSZ\R^                  " / S[Q5      S9\R\                  " S^S_S\'S`Sa9\R\                  " SbScS\'SdSa9\R\                  " SeSfSg/\R^                  " / SQ5      S>\Si9\R\                  " SS\R^                  " / SQ5      S9\R\                  " SS\R^                  " / SQ5      S9\R\                  " SS\R^                  " / SQ5      S9\R\                  " SS\R^                  " / SQ5      S9\R\                  " SS\R^                  " / SQ5      S9\R\                  " SjSkSlSK9\R\                  " SmSnS>SoSpSq9\R\                  " SrSsStSK9\R\                  " SuSvSSwSS9\R\                  " SxSySzSK9\R\                  " S{S|S>S}SS9S.\S~\S-  S\S\S\S-  S\'S-  S\'S\S\S-  S\S-  S\S-  S\S-  S\S-  S\S-  SA\'S\S-  S;\S-  S\%S<\%S,S4(S j5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       r1\*RY                  5       \R\                  " SHSISSK9\R\                  " SLSMSSK9\R\                  " SOSPSQSRSS9\R\                  " STSUSV\R^                  " / SWQ5      SX9\R\                  " SYSZ\R^                  " / SQ5      SS]9\R\                  " S^S_S\'S`Sa9\R\                  " SbScS\'SdSa9\R\                  " SeSfSg/\R^                  " / SQ5      S>\Si9\R\                  " SS\R^                  " SS/5      S9\R\                  " SmS\R^                  " / SQ5      S9\R\                  " SS\R^                  " SS/5      S9\R\                  " SjSkSlSK9\R\                  " SxSySzSK9\R\                  " S{S|S>S}SS9S.\S~\S-  S\S\S\S-  S\'S-  S\'S\S\S-  S\S-  S\S-  S\S-  S;\S-  S<\%S,S4S j5       5       5       5       5       5       5       5       5       5       5       5       5       5       5       r2\*RY                  5       \R\                  " SHSISSK9\R\                  " SLSMSSK9\R\                  " SOSPSQSRSS9\R\                  " STSUSV\R^                  " / SWQ5      SX9\R\                  " SYSZ\R^                  " / S[Q5      S\S]9\R\                  " S^S_S\'S`Sa9\R\                  " SbScS\'SdSa9\R\                  " SeSfSg/\R^                  " / SQ5      S>\Si9\R\                  " SjSkSlSK9\R\                  " SxSySzSK9\R\                  " S{S|S>S}SS9S.\S~\S-  S\S\S\S-  S\'S-  S\'S\S\S-  S;\S-  S<\%S,S4S j5       5       5       5       5       5       5       5       5       5       5       5       r3\*RY                  5       \R\                  " SHSISSK9\R\                  " SLSMSSK9\R\                  " S^S_S\'S`Sa9\R\                  " SbScS\'SdSa9\R\                  " SeSfSg/\R^                  " / SQ5      S>\Si9\R\                  " SjSkSlSK9\R\                  " SxSySzSK9\R\                  " S{S|S>S}SS9S.\S~\S-  S\'S-  S\'S\S\S-  S;\S-  S<\%S,S4S j5       5       5       5       5       5       5       5       5       r4\S:X  a  \+" 5         gg)zCLI tool for DDGS.    N)ThreadPoolExecutoras_completed)datetimetimezone)Path)unquote   )__version__)DDGS)_expand_proxy_tb_aliasblackred   green   yellow   blue   magenta   cyan   bright_black   
bright_red	   bright_green
   bright_yellow   bright_blue   bright_magenta   bright_cyan   white   bright_white_ctx_paramvaluereturnc                 V    Ub&  [        U[        5      (       a  SR                  U5      $ g)N, )
isinstancetuplejoin)r+   r,   r-   s      B/home/james-whalen/.local/lib/python3.13/site-packages/ddgs/cli.py_convert_tuple_to_csvr6   (   s%    Zu55xx    querydatafunction_namefilenamec                 6   U(       a(  UR                  S5      (       a  UR                  SS5      OS U4u  p4U(       a  UO*U SU  S[        R                  " [        R
                  S9S 3nUS:X  a  [        U SU 3U5        g US:X  a  [        U SU 3U5        g g )	N)z.csvz.json.r	   _tz%Y%m%d_%H%M%Scsvjson)endswithrsplitr   nowr   utc	_save_csv
_save_json)r8   r9   r:   r;   exts        r5   
_save_datarK   .   s    /7H<M<MN_<`<`HOOC+gkmufvMH#xM?!E7!HLLT\T`T`DaboCp)qH
e|XJau%t,	hZq&- 
r7   jsonfilec           	          [        U 5      R                  SSS9 nUR                  [        R                  " USSS95        S S S 5        g ! , (       d  f       g = f)Nwutf-8)encodingFr   )ensure_asciiindent)r   openwriterC   dumps)rL   r9   files      r5   rI   rI   7   s@    	h		S7		3t

4::dqAB 
4	3	3s   &A		
Acsvfilec                 (   [        U 5      R                  SSSS9 nU(       aW  US   R                  5       n[        R                  " X#[        R
                  S9nUR                  5         UR                  U5        S S S 5        g ! , (       d  f       g = f)NrN   r1   rO   )newlinerP   r   )
fieldnamesquoting)r   rS   keysrB   
DictWriterQUOTE_MINIMALwriteheader	writerows)rW   r9   rV   headerswriters        r5   rH   rH   <   sk    	g		Cg		>$1gllnG^^DcFWFWXF T" 
?	>	>s   AB
Bc           
         U (       a  [        U SS9 H  u  p[        R                  " U SS 3SSS9  [        UR                  5       SS9 Hd  u  nu  pEU(       a.  US;   a  S	OS
nUS:X  a  SOUn[        R                  " U USSSS9nOUnUn[        R                  " US U 3S[
        U   SS9  Mf     [        5         M     g g )Nr	   startz.	    zN==============================================================================r   r(   )bgfg)contenthrefimagesource	thumbnailurli,  N   detected_languagelanguager1   z            T)widthinitial_indentsubsequent_indentpreserve_paragraphsz<12)rf   rg   overline)	enumerateclicksechoitems	wrap_textCOLORSinput)	r9   iejkvrq   titletexts	            r5   _print_datar   E   s    d!,DAKK1#WXJ/GH&qwwy:	6A#$(b#bChjE*+/B*BJE ??##')*2,0D EDuSk$0WUYZ ; G# - r7   c                    U R                  SS5      R                  SS5      R                  SS5      R                  SS5      R                  SS5      R                  S	S5      R                  S
S5      R                  SS5      $ )Nfiletyper1   :"'site r>   /\)replace)r8   s    r5   _sanitize_queryr   [   si    j"%	b		c				c		c		s		b		r7   rm   dir_pathproxyverifyc                ~    [         R                  " USSSUS9R                  U 5      nUR                  S:X  aG  [	        U5      US S -  nUR                  S5       nUR                  UR                  5        S S S 5        g g ! , (       d  f       g = f! [         a   n[        R                  SX5         S nAg S nAff = f)Nrandomr   )r   impersonateimpersonate_ostimeoutr      wbzError download_file url=%s: %r)primpClientgetstatus_coder   rS   rT   rh   	Exceptionloggerdebug)	rm   r   r;   r   r   respfrV   exs	            r5   _download_filer   h   s    	@||%Xh`bkqrvv
 s"X$3/A

4<<(  # @5s??@s6   AB B7B 
BB B 
B<B77B<Tr   resultsthreadspathnamec                   U(       a  UO*U SU  S[         R                  " [        R                  S9S 3n[	        U5      R                  SSS9  Uc  SOUn[        US9 n/ n	[        USS	9 Hp  u  pUS
:X  a  US   OUS   n[        UR                  S5      S   R                  S5      S   5      nUR                  [        XU
 SU 3X6S9nU	R                  U5        Mr     [        R                  " [        U	5      SSSSS9 n[!        U	5       H$  nUR#                  5         UR%                  S5        M&     S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)Nr>   r?   rA   T)parentsexist_okr   )max_workersr	   rd   imagesrj   ri   r   ?r   r   Downloading2   )lengthlabelshow_percentshow_posrq   )r   rF   r   rG   r   mkdirr   rv   r   splitsubmitr   appendrw   progressbarlenr   resultupdate)r8   r   r:   r   r   r   r   pathexecutorfuturesr}   resrm   r;   r   barfutures                    r5   _download_resultsr   u   sL     8awaPXP\P\@]^k?l%mDJTD1ObG		0Hq1FA"/8";#g,VCsyy~b177<Q?@HaS(;LecANN1	 2 w<
 &w/

1 0
 
1	0
 
 
1	0s%   B"E 4E4E
E	E
E$)chainc                      g)zDDGS CLI tool.N r   r7   r5   clir      s    r7   c                      [         R                  " [         R                  S9   [        5         g! [         a9  n [
        R                  " [        U 5      R                   SU < 35         Sn A gSn A ff = f)z=Run the CLI tool in try-except block to catch all exceptions.)levelz: N)	loggingbasicConfigWARNINGr   r   rw   echotype__name__)r   s    r5   safe_entry_pointr      sS    goo.3 3

d2h''(2&1223s   
/ 
A2/A--A2c                  ,    [        [        5        [        $ )zPrint and return version.)printr
   r   r7   r5   versionr      s     
+r7   z-qz--queryztext search query)helpz-kz
--keywordsz(Deprecated) text search queryz-rz--regionzus-enzus-en, ru-ru, etc.)defaultr   z-sz--safesearchmoderate)onr   off)r   r   z-tz--timelimit)drN   myzday, week, month, year)r   r   z-mz--max_resultszmaximum number of results)r   r   r   z-pz--pagezpage number of resultsz-bz	--backendauto)
r   allbingbrave
duckduckgogooglemojeekyandexyahoo	wikipedia)r   r   multiplecallbackz-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-thz	--threadszdownload threads, default=10z-prz--proxyz=the proxy to send requests, example: socks5h://127.0.0.1:9150z-vz--verifyz"verify SSL when making the requestkeywordsregion
safesearch	timelimitmax_resultspagebackendoutputdownload_directorydownloadc                    [        [        U5      US9R                  U UUUUUUUS9n[        U 5      n U(       a  [	        XSUS9  U(       a  [        U USUU
UU	S9  U(       d  U(       d  [        U5        ggg)z/CLI function to perform a DDGS text metasearch.r   r   r8   r   r   r   r   r   r   r   r   )r;   r:   r   r   r   r   N)r   r   r   r   rK   r   r   )r8   r   r   r   r   r   r   r   r   r   r   r   r   r   r9   s                  r5   r   r      s    j ,U3FCHH I 	D E"E58 '	
 (D #6r7   zimages search queryz (Deprecated) images search query)r   )r   r   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                    [        [        U5      US9R                  U UUUUUUUUU	U
UUS9n[        U 5      n U(       a  [	        U USUS9  U(       a  [        U USUUUUS9  U(       d  U(       d  [        U5        ggg)z1CLI function to perform a DDGS images metasearch.r   )r8   r   r   r   r   r   r   r   r  r   r  r  r  r   r:   r;   r   N)r   r   r   r   rK   r   r   )r8   r   r   r   r   r   r   r   r  r   r  r  r  r   r   r   r   r   r   r9   s                       r5   r   r      s    V ,U3FCJJ# K D E"E5$hH"'	
 (D #6r7   zvideos search queryz (Deprecated) videos search query)r   rN   r   zday, week, monthz-resz--resolutionhighstandartz
--duration)shortmediumlongz--license_videoscreativeCommonyoutube
resolutiondurationlicense_videosc                    [        [        U5      US9R                  U UUUUUUUUU	U
S9n[        U 5      n U(       a  [	        XSUS9  g[        U5        g)z1CLI function to perform a DDGS videos metasearch.r   )r8   r   r   r   r   r   r   r   r%  r&  r'  videosr  N)r   r   r)  r   rK   r   )r8   r   r   r   r   r   r   r   r%  r&  r'  r   r   r   r9   s                  r5   r)  r)  g  sl    P ,U3FCJJ% K D E"E5hHDr7   znews search queryz(Deprecated) news search query)r   r   r   r   r   c
                    [        [        U	5      U
S9R                  U UUUUUUUS9n[        U 5      n U(       a  [	        XSUS9  g[        U5        g)z/CLI function to perform a DDGS news metasearch.r   r   newsr  N)r   r   r+  r   rK   r   )r8   r   r   r   r   r   r   r   r   r   r   r9   s               r5   r+  r+    sc    D ,U3FCHH I 	D E"E5fvFDr7   zbooks search queryz(Deprecated) books search query)r   r   annasarchivec                    [        [        U5      US9R                  U UUUUS9nU(       a  [        XSUS9  g[	        U5        g)z0CLI function to perform a DDGS books metasearch.r   )r8   r   r   r   r   booksr  N)r   r   r.  rK   r   )	r8   r   r   r   r   r   r   r   r9   s	            r5   r.  r.    sO    8 ,U3FCII J D 5gGDr7   __main__)NNN)r.   N)5__doc__rB   rC   r   concurrent.futuresr   r   r   r   pathlibr   urllib.parser   rw   r   r1   r
   ddgsr   utilsr   	getLoggerr   r   r{   Context	Parameterr3   strr6   listdictrK   rI   rH   r   r   boolr   intr   groupr   r   commandr   optionChoicer   r   r)  r+  r.  r   r7   r5   <module>rB     sH    
   ? '        )			8	$
w
u
 w
 x	

 v
 y
 v
 ~
 |
 ~
 
 
 
 
 
  !
( u uUXz\`O` eh .c .d38n!5 .c .UX[_U_ .dh .Ct C4S#X+? CD C
#sTz #d38n)= #$ #d4S>* t ,
3 
3 

@ 
@s 
@c 
@#* 
@Y] 
@bf 
@"  $sCx.!  :	
 4Z Dj  
D 4 3    dI$78dL'GHdJ6JKdNJU\\Jc=dedM5I(JQijdORc@[\dHac8PQH		

 "'* dJ%nodL$Dste+2UVe["3QReY%dedJ3WX**Dj* * 	*
 Tz* t* * * $J* d
* * :* * *  
!* Y f S W u p+ R ] k f L I 9 F*Z dI$9:dL'IJdJ6JKdNJU\\Jc=dedM5I(JKdORc@[\dHac8PQH	3	4" gxell3\&]^		

, g~ELL9k,lmdJU\\2L%MN
	e	f
 dJ%nodL$Dste+2UVe["3QReY%dedJ3WX44Dj4 4 	4
 Tz4 t4 4 4 *4 :4 d
4 $J4 :4 d
4 4  $J!4" :#4& '4( )4* 
+4 Y f S W u p O n- _ R ] L f L K ; h4n dI$9:dL'IJdJ6JKdNJU\\Jc=dedM_(EL^_dORc@[\dHac8PQH	3	4" fn5<<8L+MNdLu||4O'PQf(u||=My<Y/Z[dJ%noeY%dedJ3WX##Dj# # 	#
 Tz# t# # # d
# Dj# $J# $J# :# #  
!# Y f p \ R O R ] ` f L K ; ,#L dI$78dL'GHdJ6JKdNJU\\Jc=dedM5I(JQijdORc@[\dHac8PQH	D	E" dJ%noeY%dedJ3WXDj  	
 Tz t   $J :  
 Y f p R ] k f L I 9 &@ dI$89dL'HIdORc@[\dHac8PQH	5	6" dJ%noeY%dedJ3WXDj t 	
  $J :  
 Y f p R ] J :  2 z r7   