o
    E'hþ4  ã                   @  sº  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 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d¼d2d3„Zd½d6d7„Zd¾d9d:„Zd¿d;d<„ZdÀd=d>„ZdÁdDdE„Z			F	dÂdÃdKdL„Z ej!dFdM�dÄdNdO„ƒZ"dÄdPdQ„Z#e" $¡ dÅdRdS„ƒZe" $¡ ej%dTdUdFdVdW�ej%dXdYdZd[d\�ej%d]d^d_e &g d`¢¡da�ej%dbdce &g dd¢¡dedf�ej%dgdhe'didf�ej%djdkdldm�ej%dndodFdpdqdr�ej%dsdtdudm�ej%dvdwdxe &g dy¢¡da�ej%dzd{dd|d\�ej%d}d~ddm�ej%d€d�dFd‚d\�dÆdŒd�„ƒƒƒƒƒƒƒƒƒƒƒƒƒZ(e" $¡ ej%dTdUdFdŽdW�ej%dXdYdZd[d\�ej%d]d^d_e &g d`¢¡da�ej%dbdce &g d�¢¡d��ej%d‘d’e &g d“¢¡d��ej%d”d•e &g d–¢¡d��ej%d—d˜e &g d™¢¡d��ej%dšd›e &g dœ¢¡d��ej%d�dže &g dŸ¢¡d��ej%dgdhe'didf�ej%djdkdldm�ej%dndodFdpdqdr�ej%dsdtdudm�ej%dzd{dd|d\�ej%d}d~ddm�ej%d€d�dFd‚d\�dÇd¥d¦„ƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒƒZ)e" $¡ ej%dTdUdFdŽdW�ej%dXdYdZd[d\�ej%d]d^d_e &g d`¢¡da�ej%dbdce &g d§¢¡d¨df�ej%d©dªe &d«d¬g¡d��ej%dnd­e &g d®¢¡d��ej%d�d¯e &d°d±g¡d��ej%dgdhe'didf�ej%djdkdldm�ej%d}d~ddm�ej%d€d�dFd‚d\�dÈdµd¶„ƒƒƒƒƒƒƒƒƒƒƒƒZ*e" $¡ ej%dTdUdFdŽdW�ej%dXdYdZd[d\�ej%d]d^d_e &g d`¢¡da�ej%dbdce &g dd¢¡dedf�ej%dgdhe'didf�ej%djdkdldm�ej%d}d~ddm�ej%d€d�dFd‚d\�dÉd·d¸„ƒƒƒƒƒƒƒƒƒZ+ed¹k�rÛe"dº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                 C  sŒ   |r|  d¡r| dd¡nd |f\}}|r|n|› d| › dt ¡ d›�}|dkr4t|› d|› �|ƒ d S |dkrDt|› 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-   r/   r0   Úext© r?   úKC:\Users\shubh\Videos\agent\nova\Lib\site-packages\duckduckgo_search/cli.pyÚ
_save_data(   s   &"ÿrA   Újsonfileú
str | Pathc                 C  sB   t | ddd��}| t|ƒ¡ W d   ƒ d S 1 sw   Y  d S )NÚwúutf-8)Úencoding)ÚopenÚwriter   )rB   r-   Úfiler?   r?   r@   r=   1   s   "ÿr=   Úcsvfilec                 C  sz   t | dddd��+}|r+|d  ¡ }tj||tjd�}| ¡  | |¡ W d   ƒ d S W d   ƒ d S 1 s6w   Y  d S )NrD   Ú rE   )ÚnewlinerF   r   )Ú
fieldnamesÚquoting)rG   Úkeysr7   Ú
DictWriterÚQUOTE_MINIMALÚwriteheaderÚ	writerows)rJ   r-   rI   ÚheadersÚwriterr?   r?   r@   r<   6   s   û"ÿr<   c              	   C  sÀ   | r\t | dd�D ]U\}}tj|› dd› �ddd� t | ¡ dd�D ]6\}\}}|rE|dv r/d	nd
}|dkr7dn|}tj|› |dddd�}n|}tj|d›|› �dt| dd� q!tƒ  qd S d S )Nr   ©Ústartz.	    zN==============================================================================r   r(   )ÚbgÚfg)ÚcontentÚhrefÚimageÚsourceZ	thumbnailÚurli,  éN   Zdetected_languageÚlanguagerK   z            T)ÚwidthÚinitial_indentÚsubsequent_indentZpreserve_paragraphsz<12)rX   rY   Úoverline)Ú	enumerateÚclickZsechoÚitemsZ	wrap_textÚCOLORSÚinput)r-   ÚiÚeÚjÚkÚvra   Útextr?   r?   r@   Ú_print_data?   s   ÿ"órp   c                 C  sH   |   dd¡  dd¡  dd¡  dd¡  dd¡  d	d¡  d
d¡  dd¡} | S )NZfiletyperK   ú:ú"ú'Úsiteú r5   ú/ú\)Úreplace)r+   r?   r?   r@   Ú_sanitize_keywordsP   s   
ø
ry   r^   Údir_pathÚproxyÚverifyÚboolc                 C  sÆ   z>t j|ddd|d� | ¡}|jdkr<ttj ||d d… ¡dƒ�}| |j	¡ W d   ƒ W d S 1 s4w   Y  W d S W d S  t
yb } zt d| › dt|ƒj› d|› �¡ W Y d }~d S d }~ww )NÚrandomr   )r{   ZimpersonateZimpersonate_osÚtimeoutr|   éÈ   Úwbzdownload_file url=ru   )ÚprimpZClientÚgetÚstatus_coderG   ÚosÚpathÚjoinrH   rZ   Ú	ExceptionÚloggerÚdebugÚtypeÚ__name__)r^   rz   r0   r{   r|   ÚresprI   Úexr?   r?   r@   Ú_download_file^   s   ÿ
&ÿÿ0€ÿr�   TÚresultsÚthreadsú
int | NoneÚpathnamec              
   C  sN  |r|n|› d| › dt  ¡ d›�}tj|dd� |d u rdn|}t|d��x}g }	t|dd�D ]2\}
}|d	kr:|d
 n|d }t| d¡d  d¡d ƒ}| t	|||
› d|› �||¡}|	 
|¡ q.tjt|	ƒddddd��}t|	ƒD ]}| ¡  | d¡ qrW d   ƒ n1 sˆw   Y  W d   ƒ d S W d   ƒ d S 1 s w   Y  d S )Nr5   r6   T)Úexist_okr   )Úmax_workersr   rV   Úimagesr\   r[   rv   éÿÿÿÿú?r   ZDownloadingé2   )ÚlengthÚlabelZshow_percentZshow_posra   )r   r;   r…   Úmakedirsr   re   r   ÚsplitÚsubmitr�   Úappendrf   ZprogressbarÚlenr   ÚresultÚupdate)r+   r�   r/   r{   r‘   r|   r“   r†   ÚexecutorÚfuturesrj   Úresr^   r0   ÚfÚbarÚfuturer?   r?   r@   Ú_download_resultsj   s,   "	ÿþýø"ør©   )Úchainc                   C  s   dS )zduckduckgo_search CLI toolNr?   r?   r?   r?   r@   Úcli‡   s   r«   c               
   C  sN   zt ƒ  W d S  ty& }  zt t| ƒj› d| › �¡ W Y d } ~ d S d } ~ ww )Nz: )r«   rˆ   rf   Zechor‹   rŒ   )rŽ   r?   r?   r@   Úsafe_entry_point�   s   (€ÿr¬   c                   C  s   t tƒ tS )N)Úprintr   r?   r?   r?   r@   Úversion”   s   r®   z-kz
--keywordsztext search, keywords for query)ÚrequiredÚhelpz-rz--regionzwt-wtz?wt-wt, us-en, ru-ru, etc. -region https://duckduckgo.com/params)Údefaultr°   z-sz--safesearchÚmoderate)Úonr²   Úoff)r±   r‹   z-tz--timelimit)ÚdrD   Ú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))r°   z-dz
--downloadFz-download results. -dd to set custom directory)Zis_flagr±   r°   z-ddz--download-directoryz!Specify custom download directoryz-bz	--backendÚauto)r¸   ÚhtmlZlitez-thz	--threadszdownload threads, default=10z-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              	   C  st   t t|
ƒ|d�j| |||||	d�}t| ƒ} |rt| |d|d� |r,t| |d|
|||d� |s6|s8t|ƒ 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Â   ro   )r0   ©r/   r{   r‘   r|   r“   N)r	   r
   ro   ry   rA   r©   rp   )r+   rº   r»   r¼   r½   r¾   r¿   rÀ   r‘   rÂ   r{   r|   r-   r?   r?   r@   ro   š   s0   úù	ÿro   zkeywords for query)ZDayZWeekZMonthZYear)r‹   z-sizez--size)ZSmallZMediumZLargeZ	Wallpaperz-cz--color)ÚcolorZ
MonochromeÚRedZOrangeZYellowZGreenZBlueZPurpleZPinkZBrownZBlackZGrayZTealÚWhitez-typez--type_image)ZphotoZclipartZgifÚtransparentÚlinez-lz--layout)ZSquareZTallZWidez-licz--license_image)ÚanyZPublicZShareZShareCommerciallyZModifyZModifyCommerciallyÚsizerÅ   Ú
type_imageÚlayoutÚlicense_imagec                 C  s|   t t|ƒ|d�j| |||||||||d�
}t| ƒ} |r#t| |d|d� |	r0t| |d||||
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–   ©r/   r0   rÄ   N)r	   r
   r–   ry   rA   r©   rp   )r+   rº   r»   r¼   rË   rÅ   rÌ   rÍ   rÎ   r¿   rÀ   r‘   rÂ   r¾   r{   r|   r-   r?   r?   r@   r–   Ï   s8   =öù	ÿr–   )rµ   rD   r¶   zday, week, monthz-resz--resolutionÚhighZstandartz
--duration)ZshortZmediumÚlongz--license_videosZcreativeCommonZyoutubeÚ
resolutionÚdurationÚlicense_videosc              
   C  sR   t t|	ƒ|
d�j| |||||||d�}t| ƒ} |r#t| |d|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Õ   ry   rA   rp   )r+   rº   r»   r¼   rÒ   rÓ   rÔ   rÂ   r¾   r{   r|   r-   r?   r?   r@   rÕ   )  s   ø
rÕ   c           	      C  sL   t t|ƒ|d�j| ||||d�}t| ƒ} |r t| |d|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Ö   ry   rA   rp   )	r+   rº   r»   r¼   rÂ   r¾   r{   r|   r-   r?   r?   r@   rÖ   T  s   
ÿrÖ   Ú__main__Zddgs)Z	prog_name)
r+   r,   r-   r.   r/   r,   r0   r1   r2   r3   )rB   rC   r-   r.   r2   r3   )rJ   rC   r-   r.   r2   r3   )r-   r.   r2   r3   )r+   r,   r2   r,   )r^   r,   rz   r,   r0   r,   r{   r1   r|   r}   r2   r3   )NNTN)r+   r,   r�   r.   r/   r,   r{   r1   r‘   r’   r|   r}   r“   r1   r2   r3   )r2   r3   )r2   r,   )r+   r,   rº   r,   r»   r,   r¼   r1   r½   r,   r¾   r1   r¿   r}   rÀ   r1   r‘   rÁ   rÂ   r’   r{   r1   r|   r}   r2   r3   )"r+   r,   rº   r,   r»   r,   r¼   r1   rË   r1   rÅ   r1   rÌ   r1   rÍ   r1   rÎ   r1   r¿   r}   rÀ   r1   r‘   rÁ   rÂ   r’   r¾   r1   r{   r1   r|   r}   r2   r3   )r+   r,   rº   r,   r»   r,   r¼   r1   rÒ   r1   rÓ   r1   rÔ   r1   rÂ   r’   r¾   r1   r{   r1   r|   r}   r2   r3   )r+   r,   rº   r,   r»   r,   r¼   r1   rÂ   r’   r¾   r1   r{   r1   r|   r}   r2   r3   ),Ú
__future__r   r7   Úloggingr…   Úconcurrent.futuresr   r   r   Úpathlibr   Úurllib.parser   rf   r‚   Zduckduckgo_searchr	   Úutilsr
   r   r®   r   Ú	getLoggerrŒ   r‰   rh   rA   r=   r<   rp   ry   r�   r©   Úgroupr«   r¬   ÚcommandÚoptionZChoicerÁ   ro   r–   rÕ   rÖ   r?   r?   r?   r@   Ú<module>   s   
ÿþýüûúùø	÷
öõôóòñð

	

	

ù

$(ÿýý,0"
ÿ