o
    PjO                  	   @   s  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mZmZm	Z	m
Z
mZ d dlm  mZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ d dlmZ d dl m!Z! d dl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d d	lm-Z-m.Z. d d
l/m0Z0 ej1rd dl2m3Z3 e
ee4e
e5e6e4f f e!f Z7e
ee8e4f Z9e
ee4e
e8e5e6e4ef f e!f Z:e
ee4e
e5e6e4f f e4f Z;G dd dZ<G dd deZ=dedefddZ>de4dedefddZ?G dd dZ@ddejAde5fddZBdede5fddZCdS )     N)Path)AnyDictListOptionalUnioncast)
ClientCertificateFilePayload	FormFieldHeadersHttpCredentialsProxySettings
RemoteAddrSecurityDetailsServerFilePayloadStorageState)ChannelOwnerfrom_channel)is_target_closed_error)FormData)
Error	NameValueTargetClosedErrorTimeoutSettingsasync_readfileasync_writefileis_file_payloadlocals_to_paramsobject_to_arrayto_impl)serialize_headersto_client_certificates_protocol)Tracing)
Playwrightc                   @   s~   e Zd ZdddZ											ddedeeef d	ed
ededede	de
eeef dee dededdfddZdS )
APIRequest
playwrightr$   returnNc                 C   s   || _ |j| _|jj| _d S N)r&   _loop_connection_dispatcher_fiber)selfr&    r-   L/home/thesage/.local/lib/python3.10/site-packages/playwright/_impl/_fetch.py__init__A   s   zAPIRequest.__init__baseURLextraHTTPHeadershttpCredentialsignoreHTTPSErrorsproxy	userAgenttimeoutstorageStateclientCertificatesfailOnStatusCodemaxRedirectsAPIRequestContextc                    s   t t }d|v r#|d }t|ts#|r#tt|I d H  |d< d|v r/t|d |d< t	|
dI d H |d< ttt| jjdd |I d H }|j| |S )Nr7   r1   r8   
newRequest)r   locals
isinstancedictjsonloadsr   decoder!   r"   getr   r;   r   r&   _channelsend_timeout_settingsset_default_timeout)r,   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   paramsstorage_statecontextr-   r-   r.   new_contextF   s*   
zAPIRequest.new_context)r&   r$   r'   NNNNNNNNNNNN)__name__
__module____qualname__r/   strr   r   boolr   floatr   r   r   r   r	   intrK   r-   r-   r-   r.   r%   @   sL    

	
r%   c                       s"  e Zd Zdededededdf
 fddZd1d	eddfd
dZede	fddZ
										d2dedededededededededededdfddZ										d2dedededededededededededdfddZ										d2dedededededededededededdfddZ										d2dedededededededededededdfd d!Z										d2dedededededededededededdfd"d#Z										d2dedededededededededededdfd$d%Z											d3d&eeejf ded'ededededededededededdfd(d)Z											d3d*eej dee d'edededededededededededdfd+d,Z		d4d-eej ef d.ede!fd/d0Z"  Z#S )5r;   parenttypeguidinitializerr'   Nc                    s4   t  |||| t|d | _d | _td | _d S )Ntracing)superr/   r   _tracing_close_reasonr   rF   )r,   rT   rU   rV   rW   	__class__r-   r.   r/   k   s   zAPIRequestContext.__init__reasonc              
      sx   || _ | j I d H  z| jdd d|iI d H  W n ty4 } zt|r.W Y d }~d S |d }~ww | j  d S )Ndisposer^   )r[   rZ   _export_all_harsrD   rE   r   r   _reset_stack_counter)r,   r^   er-   r-   r.   r_   s   s   zAPIRequestContext.disposec                 C   s   | j S r(   )rZ   r,   r-   r-   r.   rX   ~   s   zAPIRequestContext.tracingurlrH   headersdataform	multipartr6   r9   r3   r:   
maxRetriesAPIResponsec                    *   | j |d||||||||	|
|dI d H S )NDELETEmethodrH   re   rf   rg   rh   r6   r9   r3   r:   ri   fetchr,   rd   rH   re   rf   rg   rh   r6   r9   r3   r:   ri   r-   r-   r.   delete      zAPIRequestContext.deletec                    rk   )NHEADrm   ro   rq   r-   r-   r.   head   rs   zAPIRequestContext.headc                    rk   )NGETrm   ro   rq   r-   r-   r.   rC      rs   zAPIRequestContext.getc                    rk   )NPATCHrm   ro   rq   r-   r-   r.   patch   rs   zAPIRequestContext.patchc                    rk   )NPUTrm   ro   rq   r-   r-   r.   put   rs   zAPIRequestContext.putc                    rk   )NPOSTrm   ro   rq   r-   r-   r.   post  rs   zAPIRequestContext.posturlOrRequestrn   c                    sv   t |tr|nd }t t|tjrttjt|nd }|s't |ts'J d| ||||||||||	|
||I d H S )Nz3First argument must be either URL string or Request)r>   rP   r    networkRequestr   _inner_fetch)r,   r}   rH   rn   re   rf   rg   rh   r6   r9   r3   r:   ri   rd   requestr-   r-   r.   rp   0  s4   
zAPIRequestContext.fetchr   c                    s  | j r	t| j |rdnd|rdnd |rdnd dks!J d|d u s-|dks-J d|d u s9|dks9J d|pA|r@|jn|}|pJ|rI|jnd}|pS|rR|jnd }|rZt|nd }d }d }d }d }|d urt|trt|r}t	|rw|nt
|}n| }nt|tr|}nt|ttttfrt
|}ntdt| |rt|trg }|jD ]\}}t|tjtfrtd|d	|t|t|d
 qnat|}n\|r0g }t|tr|jD ]\}}|t||I d H  qn>| D ]9\}}t|r tt|}t|d tsJ d| d|t |t!|d qt|tr/|t ||d
 q|d u rL|d u rL|d u rL|d u rL|rJ|j"nd }|rVt#$|% nd }| j&'d| j(j)||	t|trkt|nd t|trt|nd |||||||
|||dI d H }t*| |S )N   r   z:Only one of 'data', 'form' or 'multipart' can be specifiedz4'max_redirects' must be greater than or equal to '0'z2'max_retries' must be greater than or equal to '0'rv   zUnsupported 'data' type: zForm field zG must be a string, number or boolean. Use 'multipart' for file uploads.namevaluebufferz Unexpected buffer type of 'data.'r   filerp   )rd   r6   rH   encodedParamsrn   re   postDatajsonDataformDatamultipartDatar9   r3   r:   ri   )+r[   r   rd   rn   re   r!   r>   rP   is_json_content_typeis_json_parsabler@   dumpsencodebytesr?   listrS   rQ   r   rU   r   _fieldspathlibr   appendr   r   _form_data_field_to_form_fielditemsr   r   r
   r   file_payload_to_jsonpost_data_bufferbase64	b64encoderB   rD   rE   rF   r6   rj   )r,   r   rd   rn   re   rf   rH   rg   rh   r6   r9   r3   r:   ri   headers_objserialized_headers	json_data	form_datamultipart_datar   fd_namefd_valuer   r   payload	post_dataresponser-   r-   r.   r   X  s   
"















zAPIRequestContext._inner_fetchpath	indexedDBc                    s:   | j dd d|iI d H }|rt|t|I d H  |S )Nr7   r   )rD   send_return_as_dictr   r@   r   )r,   r   r   resultr-   r-   r.   rI     s   

zAPIRequestContext.storage_stater(   )
NNNNNNNNNNrL   )NN)$rM   rN   rO   r   rP   r   r/   r_   propertyr#   rX   
ParamsTyper   DataTypeFormTypeMultipartTyperR   rQ   rS   rr   ru   rC   rx   rz   r|   r   r~   r   rp   r   r   r   r   r   rI   __classcell__r-   r-   r\   r.   r;   j   sp   	

 	

 	

 	

 	

 	

 	

,	

rr;   r   r'   c                 C   s$   t | d | d t| d  dS )Nr   mimeTyper   r   r   r   )r   r   r   rB   )r   r-   r-   r.   r     s
   r   r   r   c              
      s   t |tjr*tt|\}}t| t|j|pdt	
tt|I d H  ddS t|rItt|}t |d tsAJ d| t| t|dS t |ttttfrZt| t|dS td| dt|j )	Nzapplication/octet-streamr   r   r   z%Unexpected buffer type of form field r   zUnsupported form field z value type: )r>   r   r   	mimetypes
guess_typerP   r   r   r   r   r   r   rB   r   r   r
   r   r   rS   rR   rQ   r   rU   rM   )r   r   	mime_type_r   r-   r-   r.   r     s,   
r   c                   @   s  e Zd ZdededdfddZdefddZede	fd	d
Z
edefddZedefddZedefddZedefddZedejfddZdefddZdefddZdefddZdee fddZdee fddZd%dd Zedefd!d"Zde e fd#d$Z!dS )&rj   rJ   rW   r'   Nc                 C   s2   |j | _ |jj| _|| _|| _t|d | _d S )Nre   )r)   r*   r+   _request_initializerr~   
RawHeaders_headers)r,   rJ   rW   r-   r-   r.   r/     s
   
zAPIResponse.__init__c                 C   s   d| j d| jd| jdS )Nz<APIResponse url=z status=z status_text=>)rd   statusstatus_textrc   r-   r-   r.   __repr__  s   zAPIResponse.__repr__c                 C   s   | j dko	| j dkS )N   i+  )r   rc   r-   r-   r.   ok  s   zAPIResponse.okc                 C   
   | j d S )Nrd   r   rc   r-   r-   r.   rd        
zAPIResponse.urlc                 C   r   )Nr   r   rc   r-   r-   r.   r     r   zAPIResponse.statusc                 C   r   )N
statusTextr   rc   r-   r-   r.   r   
  r   zAPIResponse.status_textc                 C   
   | j  S r(   )r   re   rc   r-   r-   r.   re     r   zAPIResponse.headersc                 C   r   r(   )r   headers_arrayrc   r-   r-   r.   r     r   zAPIResponse.headers_arrayc              
      sn   z j j fdddI d H }|d u rtdt|d W S  ty6 } z
t|r0td|d }~ww )Nc                      s    j jdd d jiS )NfetchResponseBodyfetchUid)r   rD   r   
_fetch_uidr-   rc   r-   r.   <lambda>  s    z"APIResponse.body.<locals>.<lambda>TzResponse has been disposedbinary)r   r*   wrap_api_callr   r   	b64decoder   )r,   r   excr-   rc   r.   body  s   


zAPIResponse.bodyc                    s   |   I d H }| S r(   )r   rB   r,   contentr-   r-   r.   text*  s   zAPIResponse.textc                    s   |   I d H }t|S r(   )r   r@   rA   r   r-   r-   r.   r@   .  s   
zAPIResponse.jsonc                       | j dpd S )NsecurityDetailsr   rC   rc   r-   r-   r.   security_details2     zAPIResponse.security_detailsc                    r   )N
serverAddrr   rc   r-   r-   r.   server_addr5  r   zAPIResponse.server_addrc                    s$   | j jdd d| jiI d H  d S )NdisposeAPIResponser   r   rD   rE   r   rc   r-   r-   r.   r_   8  s   zAPIResponse.disposec                 C   r   )Nr   r   rc   r-   r-   r.   r   A  r   zAPIResponse._fetch_uidc                    s    | j jdd d| jiI d H S )NfetchLogr   r   rc   r-   r-   r.   
_fetch_logE  s   
zAPIResponse._fetch_log)r'   N)"rM   rN   rO   r;   r   r/   rP   r   r   rQ   r   rd   rS   r   r   r   re   r~   HeadersArrayr   r   r   r   r   r@   r   r   r   r   r   r_   r   r   r   r-   r-   r-   r.   rj     s0    
	rj   re   c                 C   s4   | sdS | D ]}|d dkr|d  d  S qdS )NFr   zContent-Typer   zapplication/json)
startswith)re   headerr-   r-   r.   r   O  s   r   c                 C   s6   t | tsdS zt|  W dS  tjy   Y dS w )NFT)r>   rP   r@   rA   JSONDecodeError)r   r-   r-   r.   r   X  s   

r   r(   )Dr   r@   r   r   typingr   r   r   r   r   r   r   playwright._impl._network_impl_networkr~    playwright._impl._api_structuresr	   r
   r   r   r   r   r   r   r   r   playwright._impl._connectionr   r   playwright._impl._errorsr   playwright._impl._form_datar   playwright._impl._helperr   r   r   r   r   r   r   r   r   r    r!   r"   playwright._impl._tracingr#   TYPE_CHECKINGplaywright._impl._playwrightr$   rP   rQ   rR   r   r   r   r   r   r%   r;   r   r   rj   r   r   r   r-   r-   r-   r.   <module>   s<    00"*  m\	