a
    ҏisb                     @   s  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mZmZmZmZmZmZmZmZ ejdkrd dlmZ n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" d d
l#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ erVd dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 G dd deddZ8G dd dZ9ee:e:f edddZ;G dd de$Z<G dd de$Z=G d d! d!e$Z>G d"d# d#e$Z?G d$d% d%Z@dS )&    N)defaultdict)Path)SimpleNamespace)	TYPE_CHECKINGAnyCallable	CoroutineDictListOptionalUnioncast)      )	TypedDict)parse)HeadersHeadersArray
RemoteAddrRequestSizesResourceTimingSecurityDetails)ChannelOwnerfilter_nonefrom_channelfrom_nullable_channel)Error)EventContextManagerImpl)locals_to_params)Waiter)BrowserContextAPIResponse)Frame)Pagec                   @   sN   e Zd ZU ee ed< ee ed< eeeef  ed< eeeef  ed< dS )FallbackOverrideParametersurlmethodheaderspostDataN)	__name__
__module____qualname__r   str__annotations__r	   r   bytes r0   r0   I/home/Claro/venv/lib/python3.9/site-packages/playwright/_impl/_network.pyr%   F   s   
r%   F)totalc                   @   s   e Zd ZddddZdS )SerializedFallbackOverridesNreturnc                 C   s   d | _ d | _d | _d | _d S N)r&   r'   r(   post_data_bufferselfr0   r0   r1   __init__N   s    z$SerializedFallbackOverrides.__init__)r*   r+   r,   r:   r0   r0   r0   r1   r3   M   s   r3   r(   r5   c                 C   s   dd |   D S )Nc                 S   s"   g | ]\}}|d ur||dqS )N)namevaluer0   ).0r<   r=   r0   r0   r1   
<listcomp>V   s   z%serialize_headers.<locals>.<listcomp>)itemsr(   r0   r0   r1   serialize_headersU   s    rB   c                       s  e Zd Zeeeedd fddZedddZeddd	d
Z	e
edddZe
edddZe
edddZedddZe
ee dddZe
ee dddZe
ee dddZed dddZe
ddddZeddd Ze
ed  dd!d"Ze
ed  dd#d$Ze
ee dd%d&Ze
edd'd(Zedd)d*d+Z e
e!dd,d-Z"e!dd.d/Z#e$dd0d1Z%eee d2d3d4Z&d5dd6d7Z'e(j)dd8d9Z*  Z+S ):RequestNparenttypeguidinitializerr5   c              
      s   t  |||| t|d| _d | _| jr6| | j_d | _dddddddddd	| _t| j	d | _
d | _t | _|d}|d urt|| j_d S )NZredirectedFromr   )		startTimedomainLookupStartdomainLookupEndconnectStartsecureConnectionStart
connectEndrequestStartresponseStartresponseEndr(   r)   )superr:   r   get_redirected_from_redirected_to_failure_text_timing
RawHeaders_initializer_provisional_headers_all_headers_futurer3   _fallback_overridesbase64	b64decoder7   )r9   rE   rF   rG   rH   Zbase64_post_data	__class__r0   r1   r:   ^   s6    
zRequest.__init__r4   c                 C   s   d| j d| jdS )Nz<Request url=z method=>)r&   r'   r8   r0   r0   r1   __repr__   s    zRequest.__repr__)	overridesr5   c                 C   s   | d| jj| j_| d| jj| j_| d| jj| j_| d}t|tr^| | j_n.t|t	rr|| j_n|d urt
| | j_d S )Nr&   r'   r(   r)   )rT   r]   r&   r'   r(   
isinstancer-   encoder7   r/   jsondumps)r9   rd   	post_datar0   r0   r1   _apply_fallback_overrides   s     



z!Request._apply_fallback_overridesc                 C   s   t t| jjp| jd S Nr&   )r   r-   r]   r&   rZ   r8   r0   r0   r1   r&      s    zRequest.urlc                 C   s
   | j d S )NZresourceTyperZ   r8   r0   r0   r1   resource_type   s    zRequest.resource_typec                 C   s   t t| jjp| jd S )Nr'   )r   r-   r]   r'   rZ   r8   r0   r0   r1   r'      s    zRequest.methodc                    s,   |   I d H }|std|jdI d H S )Nz(Unable to fetch sizes for failed requestsizes)responser   _channelsend)r9   ro   r0   r0   r1   rn      s    zRequest.sizesc                 C   s&   | j j}|sd S t|tr"| S |S r6   )r]   r7   re   r/   decode)r9   datar0   r0   r1   ri      s    zRequest.post_datac                 C   s`   | j }|sd S | jd }|dkr.tt|S zt|W S  tyZ   td| Y n0 d S )Ncontent-typez!application/x-www-form-urlencodedz&POST data is not a valid JSON object: )	ri   r(   dictr   	parse_qslrg   loads	Exceptionr   )r9   ri   content_typer0   r0   r1   post_data_json   s    
zRequest.post_data_jsonc                 C   s   | j jS r6   )r]   r7   r8   r0   r0   r1   r7      s    zRequest.post_data_bufferResponsec                    s   t | jdI d H S )Nro   )r   rp   rq   r8   r0   r0   r1   ro      s    zRequest.responser#   c                 C   sD   | j dstdtdt| j d }|js@tdg d|S )Nframez8Service Worker requests do not have an associated frame.r#   
)zGFrame for this navigation request is not available, because the requestzIwas issued before the frame is created. You can check whether the requestz@is a navigation request by calling isNavigationRequest() method.)rZ   rT   r   r   r   _pagejoin)r9   r|   r0   r0   r1   r|      s    	zRequest.framec                 C   s
   | j d S )NZisNavigationRequestrl   r8   r0   r0   r1   is_navigation_request   s    zRequest.is_navigation_requestc                 C   s   | j S r6   )rU   r8   r0   r0   r1   redirected_from   s    zRequest.redirected_fromc                 C   s   | j S r6   )rV   r8   r0   r0   r1   redirected_to   s    zRequest.redirected_toc                 C   s   | j S r6   )rW   r8   r0   r0   r1   failure   s    zRequest.failurec                 C   s   | j S r6   rX   r8   r0   r0   r1   timing   s    zRequest.timing)response_end_timingr5   c                 C   s&   || j d< | j d dkr"|| j d< d S )NrR   rQ   rI   r   )r9   r   r0   r0   r1   _set_response_end_timing   s    
z Request._set_response_end_timingc                 C   s$   | j j}|rt| S | j S r6   )r]   r(   rY   _from_headers_dict_lossyr[   )r9   overrider0   r0   r1   r(      s    zRequest.headersc                    s   |   I d H  S r6   _actual_headersr(   r8   r0   r0   r1   all_headers   s    zRequest.all_headersc                    s   |   I d H  S r6   r   headers_arrayr8   r0   r0   r1   r      s    zRequest.headers_arrayr<   r5   c                    s   |   I d H |S r6   r   rT   r9   r<   r0   r0   r1   header_value   s    zRequest.header_valuerY   c                    sV   | j j}|rtt|S | jsJt | _| jdI d H }| j	t| | jI d H S )NZrawRequestHeaders)
r]   r(   rY   rB   r\   asyncioFuturerp   rq   
set_result)r9   r   r(   r0   r0   r1   r      s    
zRequest._actual_headersc                 C   s>   t td t| jd}|s&t S |j}|s8t S |jS )Nr#   r|   )	r   r   r   rZ   rT   r   r   r~   Z_closed_or_crashed_future)r9   r|   pager0   r0   r1   _target_closed_future  s    zRequest._target_closed_future),r*   r+   r,   r   r-   r	   r:   rc   r%   rj   propertyr&   rm   r'   r   rn   r   ri   r   rz   r/   r7   ro   r|   boolr   r   r   r   r   r   floatr   r   r(   r   r   r   r   r   r   r   r   __classcell__r0   r0   r`   r1   rC   ]   sL   !
rC   c                
       s|  e Zd Zeeeedd fddZddddZedd	d
dZ	ddddZ
edddZeedddZd+eddddZd,eeeef eeef eeeef edddddZd-eeeeef eeeef eeddddZd.eeeeef eeeef ddddZd/eeeeef eeeef dddd Zd0eeeedf d"d#d$Zedd%d&d'Zedd(d)d*Z  ZS )1RouteNrD   c                    s(   t  |||| d | _tdd | _d S )Nr    )rS   r:   _handling_futurer   _contextr9   rE   rF   rG   rH   r`   r0   r1   r:     s    zRoute.__init__zasyncio.Future[bool]r4   c                 C   s   t  | _| jS r6   )r   r   r   r8   r0   r0   r1   _start_handling  s    
zRoute._start_handling)doner5   c                 C   s"   | j }|sJ d | _ || d S r6   )r   r   )r9   r   chainr0   r0   r1   _report_handled  s    zRoute._report_handledc                 C   s   | j stdd S )NzRoute is already handled!)r   r   r8   r0   r0   r1   _check_not_handled"  s    zRoute._check_not_handledc                 C   s   d| j  dS )Nz<Route request=rb   )requestr8   r0   r0   r1   rc   &  s    zRoute.__repr__c                 C   s   t | jd S )Nr   )r   rZ   r8   r0   r0   r1   r   )  s    zRoute.request)	errorCoder5   c              	      sB   |    | | jdt|| jjd dI d H  | d d S )Nabortr&   )r   
requestUrlT)r   _race_with_page_closerp   rq   r   r   rZ   r   )r9   r   r0   r0   r1   r   -  s    

zRoute.abortr"   )statusr(   bodyrg   pathcontentTypero   r5   c                    s$  |    tt }|d ur4|d ur*tdt|}|r|d= |drP|d n|j|d< |drl|d n|j|d< ddl	m
}	 |d u r|d u rt||	r|jj| ju r|j|d< n| I d H }d}
t|tr||d< d	|d
< t| }
njt|tr t| |d< d|d
< t|}
n:|rZ|d= t| }t| |d< d|d
< t|}
dd |di  D }|dr|d |d< n6|rd|d< n&|rttt|d pd|d< |
rd|vrt|
|d< t||d< | jjd |d< | | j !d|I d H  | "d d S )Nz*Can specify either body or json parametersro   r   r(   r   r!   ZfetchResponseUidr   FZisBase64Tr   c                 S   s   i | ]\}}|  t|qS r0   )lowerr-   )r>   kvr0   r0   r1   
<dictcomp>n      z!Route.fulfill.<locals>.<dictcomp>r   rt   zapplication/jsonzapplication/octet-streamzcontent-lengthr&   r   fulfill)#r   r   localsr   
json_utilsrh   rT   r   r(   playwright._impl._fetchr"   re   _request_connectionZ
_fetch_uidr   r-   lenrf   r/   r^   	b64encoderr   r   
read_bytesr@   	mimetypes
guess_typerB   r   rZ   r   rp   rq   r   )r9   r   r(   r   rg   r   r   ro   paramsr"   lengthZfile_contentr0   r0   r1   r   <  s\    





zRoute.fulfill)r&   r'   r(   r)   maxRedirectstimeoutr5   c              	      s&   j  fddI d H S )Nc                	      s   j jjj dS )N)r   r   )r   r   Z_inner_fetchr0   r(   r   r'   r)   r9   r   r&   r0   r1   <lambda>  s   zRoute.fetch.<locals>.<lambda>)r   wrap_api_call)r9   r&   r'   r(   r)   r   r   r0   r   r1   fetch  s    	zRoute.fetch)r&   r'   r(   r)   r5   c                    s2   t ttt }|   | j| | d d S )NF)r   r%   r   r   r   r   rj   r   r9   r&   r'   r(   r)   rd   r0   r0   r1   fallback  s    zRoute.fallbackc                    s@   t ttt }|   | j| |  I d H  | d d S NT)	r   r%   r   r   r   r   rj   _internal_continuer   r   r0   r0   r1   	continue_  s
    zRoute.continue_F)is_internalr5   c                    s   d d fdd}| S )Nr4   c               
      s   zi  j jj d< j jj d< j jj d< j jjd urVtj jj  d< t	  d v rvt
 d  d< j jd  d<  d< j fddI d H  W n, ty }  zs| W Y d } ~ n
d } ~ 0 0 d S )	Nr&   r'   r(   r)   r   Z
isFallbackc                      s    jd S )Ncontinue)r   rp   rq   r0   )r   r9   r0   r1   r     s
   zBRoute._internal_continue.<locals>.continue_route.<locals>.<lambda>)r   r]   r&   r'   r(   r7   r^   r   rr   r   rB   rZ   r   r   rx   )er   r9   r   r1   continue_route  s*    	z0Route._internal_continue.<locals>.continue_router0   )r9   r   r   r0   r   r1   r     s    zRoute._internal_continue)r&   r5   c                    s4   |    | | jdd|iI d H  | d d S )NZredirectNavigationRequestr&   T)r   r   rp   rq   r   )r9   r&   r0   r0   r1   _redirected_navigation_request  s
    
z$Route._redirected_navigation_request)futurer5   c                    s   t |}t|dtt | jdt  | j	 }t j
||gt jdI d H  | rl| rltt| | rt j|ddI d H  d S )NZ__pw_stack__Zreturn_whenT)Zreturn_exceptions)r   create_tasksetattrgetattrZcurrent_taskZ_loopinspectstackr   r   waitFIRST_COMPLETEDr   	exceptionr   BaseExceptionZgather)r9   r   ZfutZtarget_closed_futurer0   r0   r1   r     s    

zRoute._race_with_page_close)N)NNNNNNN)NNNNNN)NNNN)NNNN)F)r*   r+   r,   r   r-   r	   r:   r   r   r   r   rc   r   rC   r   r   intr   r/   r   r   r   r   r   r   r   r   r   r   r   r   r0   r0   r`   r1   r     s          


E      
    
    
 "r   c                       sv  e Zd Zeeeedd fddZedddZeeddd	Z	ee
dd
dZeedddZeedddZeedddZee
dddZedddZedddZeee dddZeee dddZddddZee dd d!Zee dd"d#Zddd$d%Zedd&d'Z edd(d)Z!e"dd*d+Z#ee$dd,d-Z%ed.dd/d0Z&  Z'S )1r{   NrD   c                    s   t  |||| t| jd | _| jd }|d | jjd< |d | jjd< |d | jjd< |d | jjd< |d | jjd< |d | jjd< |d	 | jjd	< |d
 | jjd
< ttt| jd | _	d | _
t | _d S )Nr   r   rJ   rK   rL   rM   rN   rO   rP   rQ   r(   )rS   r:   r   rZ   r   rX   rY   r   r   r[   _raw_headers_futurer   r   _finished_future)r9   rE   rF   rG   rH   r   r`   r0   r1   r:     s     
zResponse.__init__r4   c                 C   s   d| j d| j dS )Nz<Response url=z	 request=rb   )r&   r   r8   r0   r0   r1   rc     s    zResponse.__repr__c                 C   s
   | j d S rk   rl   r8   r0   r0   r1   r&     s    zResponse.urlc                 C   s*   | j d dkp(| j d dko(| j d dkS )Nr   r      i+  rl   r8   r0   r0   r1   ok  s    zResponse.okc                 C   s
   | j d S )Nr   rl   r8   r0   r0   r1   r     s    zResponse.statusc                 C   s
   | j d S )NZ
statusTextrl   r8   r0   r0   r1   status_text  s    zResponse.status_textc                 C   s
   | j  S r6   )r[   r(   r8   r0   r0   r1   r(     s    zResponse.headersc                 C   s
   | j d S )NZfromServiceWorkerrl   r8   r0   r0   r1   from_service_worker  s    zResponse.from_service_workerc                    s   |   I d H  S r6   r   r8   r0   r0   r1   r     s    zResponse.all_headersc                    s   |   I d H  S r6   r   r8   r0   r0   r1   r     s    zResponse.headers_arrayr   c                    s   |   I d H |S r6   r   r   r0   r0   r1   r   "  s    zResponse.header_valuec                    s   |   I d H |S r6   )r   get_allr   r0   r0   r1   header_values%  s    zResponse.header_valuesrY   c                    sD   | j s8t | _ tt| jdI d H }| j t| | j I d H S )NZrawResponseHeaders)	r   r   r   r   r   rp   rq   r   rY   )r9   r(   r0   r0   r1   r   (  s
    
zResponse._actual_headersc                    s   | j dI d H S )NZ
serverAddrrp   rq   r8   r0   r0   r1   server_addr/  s    zResponse.server_addrc                    s   | j dI d H S )NZsecurityDetailsr   r8   r0   r0   r1   security_details2  s    zResponse.security_detailsc                    sf   d d fdd}t | }t jtttt jt jf   j|gt j	dI d H  |
 rb|I d H  d S )Nr4   c                      s    j  I d H  tdd S )NzTarget closed)r   r   r   r0   r8   r0   r1   on_finished6  s    z&Response.finished.<locals>.on_finishedr   )r   r   r   r   r
   r   ZTaskr   r   r   r   )r9   r   Zon_finished_taskr0   r8   r1   finished5  s    zResponse.finishedc                    s   | j dI d H }t|S )Nr   )rp   rq   r^   r_   )r9   binaryr0   r0   r1   r   E  s    zResponse.bodyc                    s   |   I d H }| S r6   )r   rr   )r9   contentr0   r0   r1   textI  s    zResponse.textc                    s   t |  I d H S r6   )rg   rw   r   r8   r0   r0   r1   rg   M  s    zResponse.jsonc                 C   s   | j S r6   )r   r8   r0   r0   r1   r   P  s    zResponse.requestr#   c                 C   s   | j jS r6   )r   r|   r8   r0   r0   r1   r|   T  s    zResponse.frame)(r*   r+   r,   r   r-   r	   r:   rc   r   r&   r   r   r   r   r   r   r(   r   r   r   r   r   r   r
   r   r   r   r   r   r   r   r/   r   r   r   rg   rC   r   r|   r   r0   r0   r`   r1   r{     s>   r{   c                       s   e Zd ZedddddZeeeedd fdd	Zed
ddZ	e
ed
ddZdeeeedddZdeeeedddZeeddddZeeddddZed
ddZdd
ddZ  ZS )	WebSocketcloseZframereceivedZ	framesentZsocketerror)CloseFrameReceived	FrameSentr   NrD   c                    s   t  |||| d _td| _ jd fdd  jd fdd  jd fd	d  jd
 fdd d S )NFr$   Z	frameSentc                    s     | d | d S Nopcoders   )_on_frame_sentr   r8   r0   r1   r   i  r   z$WebSocket.__init__.<locals>.<lambda>ZframeReceivedc                    s     | d | d S r   )_on_frame_receivedr   r8   r0   r1   r   m  r   ZsocketErrorc                    s     tjj| d S )Nerror)emitr   Eventsr   r   r8   r0   r1   r   q  r   r   c                    s      S r6   )	_on_closer   r8   r0   r1   r   s  r   )rS   r:   
_is_closedr   r~   rp   onr   r`   r8   r1   r:   a  s     


zWebSocket.__init__r4   c                 C   s   d| j dS )Nz<WebSocket url=rb   )r&   r8   r0   r0   r1   rc   u  s    zWebSocket.__repr__c                 C   s
   | j d S rk   rl   r8   r0   r0   r1   r&   x  s    zWebSocket.url)event	predicater   r5   c                    s   |d u rt t jj }t d| d}|t t|d| d| d |tj	j
krn| tj	j
td |tj	jkr| tj	jtd | jd fd	d
 | || t| S )Nzweb_socket.expect_event()zTimeout z%ms exceeded while waiting for event ""zSocket closedzSocket errorr   c                      s
    j  S r6   )r~   Z_close_error_with_reasonr0   r8   r0   r1   r     r   z(WebSocket.expect_event.<locals>.<lambda>)r   r   _parentZ_timeout_settingsr   r   Zreject_on_timeoutr   r   r   r   Zreject_on_eventr   r~   wait_for_eventr   result)r9   r   r   r   waiterr0   r8   r1   expect_event|  s     zWebSocket.expect_eventc              	      sL   |  |||4 I d H }W d   I d H  qB1 I d H s80    Y  |I d H S r6   )r  )r9   r   r   r   Z
event_infor0   r0   r1   r    s    *zWebSocket.wait_for_event)r   rs   r5   c                 C   s<   |dkr |  tjjt| n|dkr8|  tjj| d S N      )r   r   r   r   r^   r_   r9   r   rs   r0   r0   r1   r     s    zWebSocket._on_frame_sentc                 C   s<   |dkr |  tjjt| n|dkr8|  tjj| d S r  )r   r   r   r   r^   r_   r	  r0   r0   r1   r     s    zWebSocket._on_frame_receivedc                 C   s   | j S r6   )r   r8   r0   r0   r1   	is_closed  s    zWebSocket.is_closedc                 C   s   d| _ | tjj|  d S r   )r   r   r   r   r   r8   r0   r0   r1   r     s    zWebSocket._on_close)NN)NN)r*   r+   r,   r   r   r   r-   r	   r:   rc   r   r&   r   r   r   r  r   r  r   r   r   r   r
  r   r   r0   r0   r`   r1   r   Y  s:      r   c                   @   s   e Zd ZeddddZeeeef d dddZee	e ddd	Z
eee dd
dZeeef dddZedddZdS )rY   Nr;   c                 C   s8   || _ tt| _|D ]}d| j|d   |d < qd S )NTr<   r=   )_headers_arrayr   ru   _headers_mapr   )r9   r(   headerr0   r0   r1   r:     s    
zRawHeaders.__init__c                 C   s   t t| S r6   )rY   rB   rA   r0   r0   r1   r     s    z#RawHeaders._from_headers_dict_lossyr   c                 C   s0   |  |}|sd S | dkr"dnd}||S )Nz
set-cookier}   z, )r   r   r   )r9   r<   values	separatorr0   r0   r1   rT     s
    
zRawHeaders.getc                 C   s   t | j|   S r6   )listr  r   keysr   r0   r0   r1   r     s    zRawHeaders.get_allr4   c                 C   s,   i }| j  D ]}tt| |||< q|S r6   )r  r  r   r-   rT   )r9   r  r<   r0   r0   r1   r(     s    zRawHeaders.headersc                 C   s   | j S r6   )r  r8   r0   r0   r1   r     s    zRawHeaders.headers_array)r*   r+   r,   r   r:   staticmethodr	   r-   r   r   rT   r
   r   r(   r   r0   r0   r0   r1   rY     s   rY   )Ar   r^   r   rg   r   r   syscollectionsr   pathlibr   typesr   typingr   r   r   r   r	   r
   r   r   r   version_infor   Ztyping_extensionsurllibr   Z playwright._impl._api_structuresr   r   r   r   r   r   Zplaywright._impl._connectionr   r   r   r   Zplaywright._impl._errorsr   Z'playwright._impl._event_context_managerr   Zplaywright._impl._helperr   Zplaywright._impl._waiterr   Z!playwright._impl._browser_contextr    r   r"   Zplaywright._impl._framer#   Zplaywright._impl._pager$   r%   r3   r-   rB   rC   r   r{   r   rY   r0   r0   r0   r1   <module>   sF   ,
  4 ZpU