o
    h
=                     @  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mZ ddlmZ ddlmZ ddlmZ ejrUd dlZdd
dZdddZddddZdd d!Zddd"d#Zdd$d%Zdd&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'dd+d,Z(	ddd1d2Z)dd5d6Z*dd=d>Z+dd?d@Z,ddAdBZ-ej.ddCej/dDe"dEej0dFdGdHe"dIdJej0dKdLdMe"e"fdNdOdPej0dQdRdSe"dTdJej0dUdVdWe"e"fdNdXdPej0dYdZd[e"ej1d\d]fdNd^dPej0d_d`dae"e+dbdcej0dddede"e"fdNdfdPej0dgdhe"e"fdNdidPej0djdke"e"fdle,dmdnej0dodpe"ddqdrej0dsdte2dudvdrej0dwdxdNddydzej0d{d|dNdNd}dzej0d~de3dNdddej0de1dddJej0dde3dNdddej0ddNdNde-dddddZ4dS )    )annotationsN   )Client)RequestError)Response)codesreturnNonec                  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   _/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/httpx/_main.py
print_help   s|   

r2   responser   strc                 C  s^   | j d}|d ur-|d\}}}ztttj|	 j
W S  tjjy,   Y dS w dS )NzContent-Type; )headersget	partitiontypingcastr4   pygmentslexersget_lexer_for_mimetypestripnameutilClassNotFound)r3   content_type	mime_type_r0   r0   r1   get_lexer_for_responseg   s   rF   Frequesthttpcore.Requesthttp2boolc                   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rI   r0   r1   
<listcomp>v   s    z*format_request_headers.<locals>.<listcomp>ascii c                 S  *   g | ]\}}| d  d| d  qS rQ   : decoderL   r0   r0   r1   rP   {       
)r7   methodrW   urltargetjoin)rG   rI   versionr7   rZ   r\   linesr0   rO   r1   format_request_headerst   s   

r`   http_versionbytesstatusintreason_phrasebytes | Noner7   list[tuple[bytes, bytes]]c                 C  sT   |  d}|d u rt|n| d}| d| d| gdd |D  }d|S )NrQ   rR   c                 S  rS   rT   rV   rL   r0   r0   r1   rP      rX   z+format_response_headers.<locals>.<listcomp>rY   )rW   r   get_reason_phraser]   )ra   rc   re   r7   r^   reasonr_   r0   r0   r1   format_response_headers   s   


rj   c                 C  sV   t j }t| |d}t jj|dddd}|| t jjddddd}|| d S )NrO   http	ansi_darkTtheme	word_wrapr6   )r'   r(   r)   r`   syntaxSyntaxr*   )rG   rI   r(   	http_textrp   r0   r0   r1   print_request_headers   s   

rs   c                 C  sX   t j }t| |||}t jj|dddd}|| t jjddddd}|| d S )Nrk   rl   Trm   r6   )r'   r(   r)   rj   rp   rq   r*   )ra   rc   re   r7   r(   rr   rp   r0   r0   r1   print_response_headers   s   

rt   c                 C  s   t j }t| }|r?| dkr+z|  }tj|dd}W n ty*   | j}Y nw | j}t j	j
||ddd}|| d S |dt| j d d S )	Njson   )indentrl   Trm   <z bytes of binary data>)r'   r(   r)   rF   rK   ru   dumps
ValueErrortextrp   rq   r*   lencontent)r3   r(   
lexer_namedatar{   rp   r0   r0   r1   print_response   s   

r   .cert_PeerCertRetDictTypec              
   C  s   g }|   D ]a\}}t|ttfr\|d| d |D ]>}|dv r7|D ]}|d|d  d|d  q$qt|trRt|dkrR|d|d  d|d  q|d| qq|d| d| qd	|S )
Nz*   :)subjectissuerz*     r   rU   r      rY   )items
isinstancelisttupleappendr|   r]   )r   r_   keyrN   itemsub_itemr0   r0   r1   format_certificate   s     	
r   r@   infotyping.Mapping[str, typing.Any]verbosec                 C  s  t j }| dkr|r|d }|d| d S | dkr9|r9|d }|d}|d|d d	|d
   d S | dkr|r|d }|d}| }| }	| }
| }|d|d|	d  |d| |
r}|d |t	|
 d S d S | dkr|r|d }t
|dd d S | dkr|r|d }t
|dd d S | dkr|d \}}}}t|||| d S | dkr|d \}}d}d }t|||| d S d S )Nzconnection.connect_tcp.startedhostz* Connecting to zconnection.connect_tcp.complete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   FrO   z"http2.send_request_headers.startedTz(http11.receive_response_headers.completez'http2.receive_response_headers.completes   HTTP/2)r'   r(   r)   r*   get_extra_infor^   ciphergetpeercertselected_alpn_protocolr   rs   rt   )r@   r   r   r(   r   streamr   r   r^   r   server_certalpnrG   ra   rc   re   r7   r0   r0   r1   trace   sH   

"

r   downloadtyping.BinaryIOc                 C  s   t j }|  | jd}t jddt jjd dt j	 t j
 5}dt j|j }|j|t|p6d|d ud}|  D ]}|| |j|| jd qAW d    d S 1 s\w   Y  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_taskrd   
iter_byteswriteupdatenum_bytes_downloaded)r3   r   r(   content_lengthr   descriptiondownload_taskchunkr0   r0   r1   download_response   s,   


"r   ctxclick.Contextparamclick.Option | click.ParameterrN   
typing.Anyc                 C  s4   |d u rd S zt |W S  t jy   tdw )NzNot valid JSON)ru   loadsJSONDecodeErrorclickBadParameterr   r   rN   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-PasswordT)
hide_input)r   prompt)r   r   rN   usernamepasswordr0   r0   r1   validate_auth  s   r   c                 C  s    |r| j rd S t  |   d S )N)resilient_parsingr2   exitr   r0   r0   r1   handle_help-  s   
r   )add_help_optionr[   )typez--methodz-mrZ   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   multipler   z	--contentz-cr}   r   z--dataz-dr   r   z--filesz-ffilesrb)moder   z--jsonz-jru   r   )r   callbackr   z	--headersz-hr   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"   r#   )r   r   r   r   z
--downloadwbr$   z	--verbosez-vz*Verbose. Show request as well as response.r%   r&   )r   is_eagerexpose_valuer   r   list[tuple[str, str]]list[tuple[str, click.File]]tuple[str, str] | Nonefloattyping.BinaryIO | Nonec                 C  sJ  |s|s
|s
|s
|rdnd}z]t |
|||dK}|j|| t||t||||t||	|dtjt|did}|durAt|| n|  |j	rLt
| W d   n1 sVw   Y  W d   n1 sew   Y  W n* ty } ztj }|dt|j d	|  td
 W Y d}~nd}~ww t|jrd dS d
 dS )zU
    An HTTP command line client.
    Sends a request and displays the response.
    POSTGET)r   r   rI   r   r   )r   )
r   r}   r   r   ru   r7   r   r   r   
extensionsNz[red]z[/red]: r   r   )r   r   r   dict	functoolspartialr   r   readr}   r   r   r'   r(   r)   r*   r   __name__sysr   
is_success)r[   rZ   r   r}   r   r   ru   r7   r   r   r   r   r   r   rI   r   r   clientr3   excr(   r0   r0   r1   main9  sJ    #
r   )r   r	   )r3   r   r   r4   )F)rG   rH   rI   rJ   r   r4   )
ra   rb   rc   rd   re   rf   r7   rg   r   r4   )rG   rH   rI   rJ   r   r	   )
ra   rb   rc   rd   re   rf   r7   rg   r   r	   )r3   r   r   r	   )r   r   r   r4   )r@   r4   r   r   r   rJ   r   r	   )r3   r   r   r   r   r	   )r   r   r   r   rN   r   r   r   )r   r   r   r   rN   r   r   r	   )$r[   r4   rZ   r4   r   r   r}   r4   r   r   r   r   ru   r4   r7   r   r   r   r   r   r   r4   r   r   r   rJ   r   rJ   rI   rJ   r   r   r   rJ   r   r	   )5
__future__r   r   ru   r   r:   r   pygments.lexersr<   pygments.utilrich.consoler'   rich.markuprich.progressrich.syntax
rich.table_clientr   _exceptionsr   _modelsr   _status_codesr   TYPE_CHECKINGhttpcorer2   rF   r`   rj   rs   rt   r   Tupler4   _PCTRTT_PCTRTTTDictUnionr   r   r   r   r   r   r   commandargumentoptionFiler   rJ   r   r0   r0   r0   r1   <module>   sJ   

M

	


'





4