U
    {f=                  &   @  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Zd dlZd dlZ	d dl
Z	d dl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 ddlmZ dd	d
dZdddddZdddddddZddddddddZdddddddZddddddd d!Zdddd"d#Zej ej e!e!f d$f Z"ej e"d$f Z#ej$e!ej%e!e#e"f f Z&d%dd&d'd(Z'ddd)ddd*d+d,Z(dd-dd.d/d0Z)d1d2d3d3d4d5d6Z*d1d2d3d3d4d7d8Z+d1d2d3dd4d9d:Z,ej-dd;ej.d<e!d=ej/d>d?d@e!dAdBej/dCdDdEe!e!fdFdGdHej/dIdJdKe!dLdBej/dMdNdOe!e!fdFdPdHej/dQdRdSe!ej0dTdUfdFdVdHej/dWdXdYe!e*dZd[ej/d\d]d^e!e!fdFd_dHej/d`dae!e!fdFdbdHej/dcdde!e!fdee+dfdgej/dhdie!ddjdkej/dldme1dndodkej/dpdqdFddrdsej/dtdudFdFdvdsej/dwdxe2dFddydzej/d{e0d|d}dBej/d~de2dFdddzej/ddFdFde,dddddddddddddddddddddddZ3dS )    )annotationsN   )Client)RequestError)Response)codesNone)returnc                  C  sT  t j } | jddd |   | jddd |   | jddd |   t jjjddd	}|j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' |d(d) |d*d+ |d,d- |d.d/ | | d S )0Nz[bold]HTTPX :butterfly:center)justifyzA next generation HTTP client.z7Usage: [bold]httpx[/bold] [cyan]<URL> [OPTIONS][/cyan] leftr   T)paddingpad_edge	Parameterbold)no_wrapr   styleDescriptionz-m, --method [cyan]METHODz{Request method, such as GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD.
[Default: GET, or POST if a request body is included]z#-p, --params [cyan]<NAME VALUE> .../Query parameters to include in the request URL.z-c, --content [cyan]TEXT,Byte content to include in the request body.z!-d, --data [cyan]<NAME VALUE> ...)Form data to include in the request body.z%-f, --files [cyan]<NAME FILENAME> ...*Form files to include in the request body.z-j, --json [cyan]TEXT)JSON data to include in the request body.z$-h, --headers [cyan]<NAME VALUE> .../Include additional HTTP headers in the request.z --cookies [cyan]<NAME VALUE> ..."Cookies to include in the request.z--auth [cyan]<USER PASS>Username and password to include in the request. Specify '-' for the password to use a password prompt. Note that using --verbose/-v will expose the Authorization header, including the password encoding in a trivially reversible format.z--proxy [cyan]URLISend the request via a proxy. Should be the URL giving the proxy address.z--timeout [cyan]FLOATzTimeout value to use for network operations, such as establishing the connection, reading some data, etc... [Default: 5.0]--follow-redirectsAutomatically follow redirects.--no-verifyDisable SSL verification.--http2@Send the request using HTTP/2, if the remote server supports it.z--download [cyan]FILE?Save the response content as a file, rather than displaying it.z-v, --verbosez1Verbose output. Show request as well as response.--helpShow this message and exit.)	richconsoleConsoleprinttableTablegrid
add_columnadd_row)r(   r+    r0   J/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/httpx/_main.py
print_help   s    
 
    r2   r   str)responser	   c                 C  s^   | j d}|d k	rZ|d\}}}ztttj|	 j
W S  tjjk
rX   Y nX dS )NzContent-Type; )headersget	partitiontypingcastr3   pygmentslexersget_lexer_for_mimetypestripnameutilClassNotFound)r4   content_typeZ	mime_type_r0   r0   r1   get_lexer_for_responsee   s     rE   Fzhttpcore.Requestbool)requesthttp2r	   c                   sh    rdnd} fdd| j D }| jd}| jjd}| d| d| gdd |D  }d|S )	NzHTTP/2zHTTP/1.1c                   s$   g | ]\}} r|  n||fqS r0   )lower.0r@   valuerH   r0   r1   
<listcomp>t   s    z*format_request_headers.<locals>.<listcomp>ascii c                 S  s*   g | ]"\}}| d  d| d  qS rO   : decoderJ   r0   r0   r1   rN   y   s    
)r7   methodrT   urltargetjoin)rG   rH   versionr7   rV   rX   linesr0   rM   r1   format_request_headersr   s    
r\   bytesintzbytes | Nonezlist[tuple[bytes, bytes]])http_versionstatusreason_phraser7   r	   c                 C  sT   |  d}|d krt|n| d}| d| d| gdd |D  }d|S )NrO   rP   c                 S  s*   g | ]"\}}| d  d| d  qS rQ   rS   rJ   r0   r0   r1   rN      s    z+format_response_headers.<locals>.<listcomp>rU   )rT   r   Zget_reason_phraserY   )r_   r`   ra   r7   rZ   reasonr[   r0   r0   r1   format_response_headers   s    
rc   c                 C  sV   t j }t| |d}t jj|dddd}|| t jjddddd}|| d S )NrM   http	ansi_darkTtheme	word_wrapr6   )r'   r(   r)   r\   syntaxSyntaxr*   )rG   rH   r(   	http_textri   r0   r0   r1   print_request_headers   s    

rl   c                 C  sX   t j }t| |||}t jj|dddd}|| t jjddddd}|| d S )Nrd   re   Trf   r6   )r'   r(   r)   rc   ri   rj   r*   )r_   r`   ra   r7   r(   rk   ri   r0   r0   r1   print_response_headers   s    

rm   c                 C  s   t j }t| }|r| dkrZz|  }tj|dd}W q` tk
rV   | j}Y q`X n| j}t j	j
||ddd}|| n|dt| j d d S )	Njson   )indentre   Trf   <z bytes of binary data>)r'   r(   r)   rE   rI   rn   dumps
ValueErrortextri   rj   r*   lencontent)r4   r(   
lexer_namedatart   ri   r0   r0   r1   print_response   s    
ry   ._PeerCertRetDictType)certr	   c              
   C  s   g }|   D ]\}}t|ttfr|d| d |D ]|}|dkrn|D ]"}|d|d  d|d  qHq8t|trt|dkr|d|d  d|d  q8|d| q8q|d| d| qd	|S )
Nz*   :)subjectZissuerz*     r   rR   r      rU   )items
isinstancelisttupleappendru   rY   )r{   r[   keyrL   itemZsub_itemr0   r0   r1   format_certificate   s    " r   ztyping.Mapping[str, typing.Any])r@   infoverboser	   c                 C  s  t j }| dkr2|r2|d }|d| nh| dkrr|rr|d }|d}|d|d d	|d
   n(| dkr|r|d }|d}| }| }	| }
| }|d|d|	d  |d| |
r|d |t	|
 n| dkr|r|d }t
|dd n|| dkrD|rD|d }t
|dd nV| dkrn|d \}}}}t|||| n,| dkr|d \}}d}d }t|||| d S )Nzconnection.connect_tcp.startedhostz* Connecting to zconnection.connect_tcp.completeZreturn_valueserver_addrz* Connected to r   z	 on port r   zconnection.start_tls.complete
ssl_objectz* SSL established using z / z* Selected ALPN protocol: z* Server certificate:z#http11.send_request_headers.startedrG   FrM   z"http2.send_request_headers.startedTz(http11.receive_response_headers.completez'http2.receive_response_headers.completes   HTTP/2)r'   r(   r)   r*   get_extra_inforZ   ciphergetpeercertselected_alpn_protocolr   rl   rm   )r@   r   r   r(   r   streamr   r   rZ   r   Zserver_certZalpnrG   r_   r`   ra   r7   r0   r0   r1   trace   sD    

"



r   ztyping.BinaryIO)r4   downloadr	   c              	   C  s   t j }|  | jd}t jddt jjd dt j	 t j
 ^}dt j|j }|j|t|pld|d k	d}|  D ]}|| |j|| jd qW 5 Q R X d S )	NzContent-Lengthz([progress.description]{task.description}z-[progress.percentage]{task.percentage:>3.0f}%)	bar_widthzDownloading [bold]r   )totalstart)	completed)r'   r(   r)   r*   r7   r8   progressProgress	BarColumnDownloadColumnTransferSpeedColumnmarkupescaper@   add_taskr^   Z
iter_byteswriteupdateZnum_bytes_downloaded)r4   r   r(   content_lengthr   descriptionZdownload_taskchunkr0   r0   r1   download_response   s(    


r   zclick.Contextzclick.Option | click.Parameterz
typing.Any)ctxparamrL   r	   c                 C  s>   |d krd S zt |W S  t jk
r8   tdY nX d S )NzNot valid JSON)rn   loadsJSONDecodeErrorclickZBadParameterr   r   rL   r0   r0   r1   validate_json  s    r   c                 C  s2   |dkrd S |\}}|dkr*t jddd}||fS )NNN-ZPasswordT)Z
hide_input)r   prompt)r   r   rL   usernamepasswordr0   r0   r1   validate_auth  s    r   c                 C  s    |r
| j rd S t  |   d S )N)Zresilient_parsingr2   exitr   r0   r0   r1   handle_help+  s    
r   )add_help_optionrW   )typez--methodz-mrV   z{Request method, such as GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD. [Default: GET, or POST if a request body is included])r   helpz--paramsz-pparamsTr   )r   Zmultipler   z	--contentz-crv   r   z--dataz-drx   r   z--filesz-ffilesrb)moder   z--jsonz-jrn   r   )r   callbackr   z	--headersz-hr7   r   z	--cookiescookiesr   z--authauthr   r   )r   defaultr   r   z--proxyproxyr   )r   r   r   z	--timeouttimeoutg      @r   r   follow_redirectsr   )is_flagr   r   r    verifyr!   r"   rH   r#   )r   r   r   r   z
--downloadwbr$   z	--verbosez-vz*Verbose. Show request as well as response.r%   r&   )r   Zis_eagerZexpose_valuer   r   zlist[tuple[str, str]]zlist[tuple[str, click.File]]ztuple[str, str] | Nonefloatztyping.BinaryIO | None)rW   rV   r   rv   rx   r   rn   r7   r   r   r   r   r   r   rH   r   r   r	   c                 C  s  |s|s|s|s|rdnd}zt |
|||dx}|j|| t||t||||t||	|dtjt|did0}|dk	rt|| n|  |j	rt
| W 5 Q R X W 5 Q R X W nT tk
r } z4tj }|dt|j d	|  td
 W 5 d}~X Y nX t|jrdnd
 dS )zU
    An HTTP command line client.
    Sends a request and displays the response.
    POSTGET)r   r   r   rH   r   )r   )
r   rv   rx   r   rn   r7   r   r   r   
extensionsNz[red]z[/red]: r   r   )r   r   r   dict	functoolspartialr   r   readrv   ry   r   r'   r(   r)   r*   r   __name__sysr   Z
is_success)rW   rV   r   rv   rx   r   rn   r7   r   r   r   r   r   r   rH   r   r   clientr4   excr(   r0   r0   r1   main7  sH     # 
r   )F)F)F)4
__future__r   r   rn   r   r:   r   ZhttpcoreZpygments.lexersr<   Zpygments.utilZrich.consoler'   Zrich.markupZrich.progressZrich.syntaxZ
rich.tableZ_clientr   _exceptionsr   Z_modelsr   Z_status_codesr   r2   rE   r\   rc   rl   rm   ry   Tupler3   Z_PCTRTTZ_PCTRTTTDictUnionrz   r   r   r   r   r   r   commandargumentoptionFiler   rF   r   r0   r0   r0   r1   <module>   sF  M	 '


