o
    øT·j
  ã                   @  s"  d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ z d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ W n eya   dZdZdZdZdZdZdZd
ZY nw dZd4dd„Zd5dd„Zd6dd„Zd7d d!„Zd7d"d#„Zd8d+d,„Zd9d.d/„Z		
d:d;d2d3„Z dS )<é    )ÚannotationsN)ÚLiteral)ÚCurlHttpVersion)ÚResponse)ÚConsole)ÚProgressÚ	BarColumnÚDownloadColumnÚTransferSpeedColumn)ÚSyntax)ÚTextFTÚresponser   ÚreturnúLiteral['1.0', '1.1', '2', '3']c                 C  s<   t jdt jdt jdt jdt jdt jdt jdi}| | j	d¡S )Nz1.0z1.1Ú2Ú3)
r   ÚV1_0ÚV1_1ÚV2_0ÚV2TLSÚV2_PRIOR_KNOWLEDGEÚV3ÚV3ONLYÚgetÚhttp_version)r   Úmapping© r   úW/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/curl_cffi/cli/output.pyÚ_http_ver_label   s   ù	r   Úargsúargparse.NamespaceÚstrc                 C  sP   | j r| j S | jrdS | jrdS | jrdS | jrdS | jrdS tj ¡ r&dS dS )NÚ ÚHhBbÚhÚbÚhb)	Ú
print_specÚquietÚverboseÚheaders_onlyÚ	body_onlyÚdownloadÚsysÚstdoutÚisatty)r   r   r   r   Údetermine_print_spec+   s   
r0   Úconsoler   Úlinesú	list[str]Ú	use_colorÚboolÚNonec                 C  sŠ   |s|D ]}t |ƒ qdS |D ]3}d|v r9| d¡\}}}tƒ }|j|dd� |jddd� | |¡ |   |¡ q|   t|dd�¡ qdS )z3Print HTTP headers, with rich colors when possible.Nú: z	bold cyan©ÚstyleÚdimú
bold green)ÚprintÚ	partitionr   Úappend)r1   r2   r4   ÚlineÚkeyÚ_ÚvalueÚtextr   r   r   Ú_print_headers=   s   

÷rD   c              	   C  s  |j  dd¡}d|v r:z"tj| ¡ ddd�}|r'|  t|dddd	d
�¡ W dS t|ƒ W dS  tjtfy9   Y nw | d¡rRtd|› dt	|j
ƒ› d�tjd� dS |s[t|jƒ dS d|v rn|  t|jdddd	d
�¡ dS d|v r�|  t|jdddd	d
�¡ dS | j|jddd� dS )z9Print response body, with syntax highlight when possible.zcontent-typer"   Újsoné   F)ÚindentÚensure_asciiÚ	ansi_darkTÚdefault©ÚthemeÚ	word_wrapÚbackground_colorNzimage/zBinary image data (z, z bytes)©ÚfileÚhtmlÚxml)Ú	highlightÚmarkup)Úheadersr   rE   Údumpsr<   r   ÚJSONDecodeErrorÚ
ValueErrorÚ
startswithÚlenÚcontentr-   ÚstderrrC   )r1   r   r4   Úcontent_typeÚ	formattedr   r   r   Ú_print_bodyO   sd   ûÿÿÿ
þ
ûÿ	ûÿ
r_   c                 C  sl   t |ƒ}d|› d|j› d|j› �}|st|ƒ dS |jdk r!d}n
|jdk r)d}nd}|  t||d	�¡ dS )
zPrint the HTTP status line.zHTTP/ú Ni,  r;   i�  zbold yellowzbold redr8   )r   Ústatus_codeÚreasonr<   r   )r1   r   r4   ÚverÚstatus_liner9   r   r   r   Ú_print_status…   s   

re   ÚmethodÚurlÚrequest_headersúdict[str, str] | NoneÚrequest_bodyú
str | Noner'   c              	   C  s  t otj ¡ }|rtddd�nd }d|v r;|› d|› �g}|p i  ¡ D ]\}	}
| |	› d|
› �¡ q#t|||ƒ tƒ  d|v rW|rW|rP| t	|dd	dd
d�¡ nt|ƒ tƒ  d|v rtt
|| |ƒ dd„ | j ¡ D ƒ}t|||ƒ tƒ  d|v r€t|| |ƒ d S d S )NTF)Úforce_terminalÚno_colorÚHr`   r7   ÚBrE   rI   rJ   rK   r$   c                 S  s   g | ]\}}|› d |› �‘qS )r7   r   )Ú.0ÚkÚvr   r   r   Ú
<listcomp>»   s    z print_output.<locals>.<listcomp>r%   )ÚHAS_RICHr-   r.   r/   r   Úitemsr>   rD   r<   r   re   rU   r_   )r   rf   rg   rh   rj   r'   r4   r1   r2   rq   rr   Úheader_linesr   r   r   Úprint_output•   s:   ûÿ
ÿrw   Únamec                 C  s6   |   dd¡ d¡d  d¡d } t dd| ¡} | pdS )	z2Remove or replace characters unsafe for filenames.ú r"   ú/éÿÿÿÿú\z[^\w.\-]rA   r,   )ÚreplaceÚsplitÚreÚsub)rx   r   r   r   Ú_sanitize_filenameÄ   s    r�   Úoutput_pathr(   c              	   C  s€  |d u r)| j  dd¡}d|v r| d¡d  d¡ d¡}n| d¡ d¡d p(d	}t|ƒ}| j}t|ƒ}tr–|s–t	d
d�}t
dtƒ tƒ tƒ |d��D}|j||d�}	t|dƒ�(}
d}td||ƒD ]}|||| … }|
 |¡ | |	t|ƒ¡ q_W d   ƒ n1 s�w   Y  W d   ƒ n1 s�w   Y  nt|dƒ�}
|
 |¡ W d   ƒ n1 s«w   Y  |s¾td|› �tjd� d S d S )Nzcontent-dispositionr"   z	filename=é   ú"ú'rz   r{   r,   T)r\   z([progress.description]{task.description})r1   )ÚtotalÚwbi   r   zDownloaded to rO   )rU   r   r~   ÚstripÚrstripr�   r[   rZ   rt   r   r   r   r	   r
   Úadd_taskÚopenÚrangeÚwriteÚadvancer<   r-   r\   )r   rg   r‚   r(   Úcdr[   r†   r1   ÚprogressÚtaskÚfÚ
chunk_sizeÚoffsetÚchunkr   r   r   Úhandle_downloadÍ   sH   
û
ýþ€ø€ÿÿr–   )r   r   r   r   )r   r    r   r!   )r1   r   r2   r3   r4   r5   r   r6   )r1   r   r   r   r4   r5   r   r6   )r   r   rf   r!   rg   r!   rh   ri   rj   rk   r'   r!   r   r6   )rx   r!   r   r!   )NF)
r   r   rg   r!   r‚   rk   r(   r5   r   r6   )!Ú
__future__r   ÚargparserE   r   r-   Útypingr   Úcurl_cffi.constr   Úcurl_cffi.requestsr   Úrich.consoler   Úrich.progressr   r   r	   r
   Úrich.syntaxr   Ú	rich.textr   ÚImportErrorrt   r   r0   rD   r_   re   rw   r�   r–   r   r   r   r   Ú<module>   sD    ø





6

/ü