o
    %h                     @   sL  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mZ d dlmZ d dlmZmZmZmZmZm Z m!Z! d dl"m#Z#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/ d dl0m1Z1 d dl2m3Z3 erd dl4m5Z5 d dl6m7Z7 d dl8m9Z9 d dl:m;Z; G dd deddZ<G dd dZ=dee>e>f defddZ?deee  deeee>e>f   fddZ@G dd  d e#ZAG d!d" d"e#ZBd#e jCd$eddfd%d&ZDG d'd( d(ZEG d)d* d*e#ZFG d+d, d,ZGG d-d. d.e#ZHG d/d0 d0e#ZIG d1d2 d2ZJdS )3    N)defaultdict)Path)SimpleNamespace)
TYPE_CHECKINGAnyCallable	CoroutineDictListOptional	TypedDictUnioncast)parse)ClientCertificateHeadersHeadersArray
RemoteAddrRequestSizesResourceTimingSecurityDetails)ChannelOwnerfrom_channelfrom_nullable_channel)Error)EventContextManagerImpl)URLMatchWebSocketRouteHandlerCallbackasync_readfilelocals_to_paramsurl_matches)escape_regex_flags)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 r3   r3   M/var/www/html/myenv/lib/python3.10/site-packages/playwright/_impl/_network.pyr(   H   s
   
 r(   F)totalc                   @   s   e Zd ZdddZdS )SerializedFallbackOverridesreturnNc                 C   s   d | _ d | _d | _d | _d S N)r)   r*   r+   post_data_bufferselfr3   r3   r4   __init__P   s   
z$SerializedFallbackOverrides.__init__r7   N)r-   r.   r/   r<   r3   r3   r3   r4   r6   O   s    r6   r+   r7   c                 C   s   dd |   D S )Nc                 S   s"   g | ]\}}|d ur||dqS )N)namevaluer3   ).0r>   r?   r3   r3   r4   
<listcomp>X   s
    z%serialize_headers.<locals>.<listcomp>)itemsr+   r3   r3   r4   serialize_headersW   s   rD   clientCertificatesc                    s&  | sd S g }| D ]}d|d i}| d }r||d< | d }r,t| |d< | d }rAtt|I d H  |d< | d }rQt| |d< | d }rftt|I d H  |d< | d }	rvt|	 |d< | d }
rtt|
I d H  |d< || q	|S )	Norigin
passphrasepfxpfxPathcertcertPathkeykeyPath)getbase64	b64encodedecoder   append)rE   outclientCertificate
out_recordrG   rH   pfx_pathrJ   	cert_pathrL   key_pathr3   r3   r4   to_client_certificates_protocol_   sF   rY   c                
       s  e Zd Zdededededdf
 fddZdefd	d
Zdedd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defddZe
dee fddZe
dee fddZe
dee fddZded fddZe
d@d d!Zdefd"d#Ze
ded  fd$d%Ze
ded  fd&d'Ze
dee fd(d)Ze
defd*d+Zd,eddfd-d.Z e
de!fd/d0Z"de!fd1d2Z#de$fd3d4Z%d5edee fd6d7Z&dAd9d:Z'de(j)fd;d<Z*dBd>d?Z+  Z,S )CRequestparenttypeguidinitializerr7   Nc              
      sx   t  |||| t|d| _d | _| jr| | j_d | _dddddddddd	| _t| j	d | _
d | _t | _d S )NredirectedFromr   )		startTimedomainLookupStartdomainLookupEndconnectStartsecureConnectionStart
connectEndrequestStartresponseStartresponseEndr+   )superr<   r   rN   _redirected_from_redirected_to_failure_text_timing
RawHeaders_initializer_provisional_headers_all_headers_futurer6   _fallback_overridesr;   r[   r\   r]   r^   	__class__r3   r4   r<      s,   zRequest.__init__c                 C   s   d| j d| jdS )Nz<Request url=z method=>)r)   r*   r:   r3   r3   r4   __repr__      zRequest.__repr__	overridesc                 C   s   | d| jj| j_| d| jj| j_| d| jj| j_| d}t|tr0| | j_d S t|t	r;|| j_d S |d urJt
| | j_d S d S )Nr)   r*   r+   r,   )rN   rs   r)   r*   r+   
isinstancer0   encoder9   r2   jsondumps)r;   rz   	post_datar3   r3   r4   _apply_fallback_overrides   s"   


z!Request._apply_fallback_overridesc                 C      t t| jjp
| jd S Nr)   )r   r0   rs   r)   rp   r:   r3   r3   r4   r)         zRequest.urlc                 C   
   | j d S )NresourceTyperp   r:   r3   r3   r4   resource_type      
zRequest.resource_typec                 C   r   )Nr*   )r   r0   rs   r*   rp   r:   r3   r3   r4   r*      r   zRequest.methodc                    s0   |   I d H }|std|jdd I d H S )Nz(Unable to fetch sizes for failed requestsizes)responser   _channelsend)r;   r   r3   r3   r4   r      s   
zRequest.sizesc                 C   s:   | j j}|r
| S | jd}|d urt| S d S Nr,   )rs   r9   rQ   rp   rN   rO   	b64decode)r;   database64_post_datar3   r3   r4   r      s   zRequest.post_datac                 C   sX   | j }|sd S | jd }d|v rtt|S zt|W S  ty+   td| w )Ncontent-typez!application/x-www-form-urlencodedz&POST data is not a valid JSON object: )	r   r+   dictr   	parse_qslr}   loads	Exceptionr   )r;   r   content_typer3   r3   r4   post_data_json   s   
zRequest.post_data_jsonc                 C   s0   | j jr| j jS | jdrt| jd S d S r   )rs   r9   rp   rN   rO   r   r:   r3   r3   r4   r9      s
   zRequest.post_data_bufferResponsec                    s   t | jdd I d H S )Nr   )r   r   r   r:   r3   r3   r4   r      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.)rp   rN   r   r   r   _pagejoinr;   r   r3   r3   r4   r      s   	zRequest.framec                 C   r   )NisNavigationRequestr   r:   r3   r3   r4   is_navigation_request      
zRequest.is_navigation_requestc                 C      | j S r8   )rk   r:   r3   r3   r4   redirected_from     zRequest.redirected_fromc                 C   r   r8   )rl   r:   r3   r3   r4   redirected_to  r   zRequest.redirected_toc                 C   r   r8   )rm   r:   r3   r3   r4   failure  r   zRequest.failurec                 C   r   r8   rn   r:   r3   r3   r4   timing  r   zRequest.timingresponse_end_timingc                 C   s*   || j d< | j d dkr|| j d< d S d S )Nri   rh   r`   r   )r;   r   r3   r3   r4   _set_response_end_timing  s   
z Request._set_response_end_timingc                 C   s$   | j j}|rt| S | j S r8   )rs   r+   ro   _from_headers_dict_lossyrq   )r;   overrider3   r3   r4   r+     s   
zRequest.headersc                       |   I d H  S r8   _actual_headersr+   r:   r3   r3   r4   all_headers     zRequest.all_headersc                    r   r8   r   headers_arrayr:   r3   r3   r4   r   "  r   zRequest.headers_arrayr>   c                       |   I d H |S r8   r   rN   r;   r>   r3   r3   r4   header_value%     zRequest.header_valuero   c                    s^   | j j}|rtt|S | js)t | _| jjdd ddI d H }| j	t| | jI d H S )NrawRequestHeadersT)is_internal)
rs   r+   ro   rD   rr   asyncioFuturer   r   
set_result)r;   r   r+   r3   r3   r4   r   (  s   
zRequest._actual_headersc                 C   s>   t td t| jd}|st S |j}|st S |jS )Nr&   r   )	r   r   r   rp   rN   r   r   r   _closed_or_crashed_future)r;   r   pager3   r3   r4   _target_closed_future4  s   zRequest._target_closed_futureOptional[Page]c                 C   s$   t | jd}|sd S td|jS )Nr   r&   )r   rp   rN   r   r   r   r3   r3   r4   
_safe_page?  s   zRequest._safe_pager7   r&   r7   ro   )r7   r   )-r-   r.   r/   r   r0   r	   r<   rx   r(   r   propertyr)   r   r*   r   r   r   r   r   r   r2   r9   r   r   boolr   r   r   r   r   r   floatr   r   r+   r   r   r   r   r   r   r   r   r   __classcell__r3   r3   ru   r4   rZ      s`    		
rZ   c                       s:  e Zd Zdededededdf
 fddZd<d
dZdeddfddZ	d=ddZ
defddZedefddZd>deddfddZ							d?dedeeef deeef dedeeef deddddfd d!Z							d?dedeeef deeef dedeeef deddddfd"d#Zd$eddfd%d&Z							d?d'ed(edeeef d)eeeef d*ed+ed,eddfd-d.Z				d@d'ed(edeeef d)eeeef ddf
d/d0Z				d@d'ed(edeeef d)eeeef ddf
d1d2ZdAd4eddfd5d6Zd'eddfd7d8Zd9eddfd:d;Z   Z!S )BRouter[   r\   r]   r^   r7   Nc                    s.   t  |||| d | _tdd | _d| _d S )Nr#   F)rj   r<   _handling_futurer   _context
_did_throwrt   ru   r3   r4   r<   G  s   
zRoute.__init__asyncio.Future[bool]c                 C   s   t  | _| jS r8   )r   r   r   r:   r3   r3   r4   _start_handlingO  s   
zRoute._start_handlingdonec                 C   s"   | j }|sJ d | _ || d S r8   )r   r   )r;   r   chainr3   r3   r4   _report_handledS  s   zRoute._report_handledc                 C   s   | j stdd S )NzRoute is already handled!)r   r   r:   r3   r3   r4   _check_not_handledY  s   zRoute._check_not_handledc                 C   s   d| j  dS )Nz<Route request=rw   )requestr:   r3   r3   r4   rx   ]     zRoute.__repr__c                 C   s   t | jd S )Nr   )r   rp   r:   r3   r3   r4   r   `  s   zRoute.request	errorCodec                    s      fddI d H  d S )Nc                      s    jdd d iS )Nabortr   _race_with_page_closer   r   r3   r   r;   r3   r4   <lambda>f  s    zRoute.abort.<locals>.<lambda>_handle_route)r;   r   r3   r   r4   r   d     zRoute.abortstatusr+   bodyr}   pathcontentTyper   r%   c              
      s,     fddI d H  d S )Nc                	      s     S r8   )_inner_fulfillr3   r   r   r+   r}   r   r   r;   r   r3   r4   r   |  s    zRoute.fulfill.<locals>.<lambda>r   )r;   r   r+   r   r}   r   r   r   r3   r   r4   fulfillq  s   
zRoute.fulfillc                    s  t t }|d ur|d urtdt|}|r_|d= |dr%|d n|j|d< |dr3|d n|j|d< ddlm	}	 |d u r_|d u r_t
||	r_|jj| ju rX|j|d< n| I d H }d}
t
|tru||d< d	|d
< t| }
n3t
|trt| |d< d|d
< t|}
n|r|d= t| }t| |d< d|d
< t|}
dd |di  D }|dr|d |d< n|rd|d< n|rttt|d pd|d< |
rd|vrt|
|d< t||d< | | jdd |I d H  d S )Nz*Can specify either body or json parametersr   r   r+   r   r$   fetchResponseUidr   FisBase64Tr   c                 S   s   i | ]\}}|  t|qS r3   )lowerr0   )r@   kvr3   r3   r4   
<dictcomp>  s    z(Route._inner_fulfill.<locals>.<dictcomp>r   r   zapplication/jsonzapplication/octet-streamzcontent-lengthr   )r   localsr   
json_utilsr~   rN   r   r+   playwright._impl._fetchr%   r{   _request_connection
_fetch_uidr   r0   lenr|   r2   rO   rP   rQ   r   
read_bytesrB   	mimetypes
guess_typerD   r   r   r   )r;   r   r+   r   r}   r   r   r   paramsr%   lengthfile_contentr3   r3   r4   r     sX   







 zRoute._inner_fulfillcallbackc              
      sJ   |    z| I d H  | d W d S  ty$ } zd| _|d }~ww NT)r   r   r   r   )r;   r   er3   r3   r4   r     s   zRoute._handle_router)   r*   r,   maxRedirects
maxRetriestimeoutc              
      s*   j  fddI d H S )Nc                
      s    j jjj dS )N)r   r   r   )r   r   _inner_fetchr3   r+   r   r   r*   r,   r;   r   r)   r3   r4   r     s    zRoute.fetch.<locals>.<lambda>)r   wrap_api_call)r;   r)   r*   r+   r,   r   r   r   r3   r   r4   fetch  s   

zRoute.fetchc                    s4   t ttt }|   | j| | d d S NF)r   r(   r   r   r   r   r   r   )r;   r)   r*   r+   r,   rz   r3   r3   r4   fallback  s
   zRoute.fallbackc                    s2   t ttt  d fdd}|I d H S )Nr7   c                      s"   j   dI d H  d S r  )r   r   _inner_continuer3   rz   r;   r3   r4   _inner  s   zRoute.continue_.<locals>._innerr=   )r   r(   r   r   r   )r;   r)   r*   r+   r,   r  r3   r  r4   	continue_  s   zRoute.continue_Fis_fallbackc                    sd   | j j}| | jdd |j|j|jrt|jnd |j	d ur&t
|j	 nd |dI d H  d S )Ncontinue)r)   r*   r+   r,   
isFallback)r   rs   r   r   r   r)   r*   r+   rD   r9   rO   rP   rQ   )r;   r  optionsr3   r3   r4   r    s    
zRoute._inner_continuec                    s       fddI d H  d S )Nc                      s      jdd diS )NredirectNavigationRequestr)   r   r3   r;   r)   r3   r4   r     s    z6Route._redirected_navigation_request.<locals>.<lambda>r   r  r3   r  r4   _redirected_navigation_request  r   z$Route._redirected_navigation_requestfuturec              	      s   t |}t|dtt | jdtd | j	 }t j
||gt jdI d H  | r8| r8tt| | rHt j|ddI d H  d S d S )N__pw_stack__r   return_whenT)return_exceptions)r   create_tasksetattrgetattrcurrent_task_loopinspectstackr   r   waitFIRST_COMPLETEDr   	exceptionr   BaseExceptiongather)r;   r  futtarget_closed_futurer3   r3   r4   r     s"   

zRoute._race_with_page_close)r7   r   r=   r8   )NNNNNNN)NNNN)F)"r-   r.   r/   r   r0   r	   r<   r   r   r   r   rx   r   rZ   r   r   intr   r2   r   r   r   r   r   r   r   r   r  r  r  r  r   r   r   r3   r3   ru   r4   r   F  s    




	



	
@
	




r   loopcoroc                    s   d fdd}|  |  d S )Nr7   c                      s(   z I d H  W d S  t y   Y d S w r8   )r   r3   r#  r3   r4   _ignore_exception/  s   z<_create_task_and_ignore_exception.<locals>._ignore_exceptionr=   )r  )r"  r#  r%  r3   r$  r4   !_create_task_and_ignore_exception,  s   r&  c                   @   s   e Zd ZdddZdeeeef gef ddfdd	Z	dee
e e
e gef ddfd
dZdddZedefddZddededdfddZdeeef ddfddZdS )ServerWebSocketRoutewsWebSocketRoutec                 C   
   || _ d S r8   )_ws)r;   r(  r3   r3   r4   r<   9  r   zServerWebSocketRoute.__init__handlerr7   Nc                 C      || j _d S r8   )r+  _on_server_messager;   r,  r3   r3   r4   
on_message<     zServerWebSocketRoute.on_messagec                 C   r-  r8   )r+  _on_server_closer/  r3   r3   r4   on_close?  r1  zServerWebSocketRoute.on_closec                 C   s   t d)Nz>connectToServer must be called on the page-side WebSocketRoute)NotImplementedErrorr:   r3   r3   r4   connect_to_serverB  s   z&ServerWebSocketRoute.connect_to_serverc                 C   s   | j jd S r   )r+  rp   r:   r3   r3   r4   r)   G     zServerWebSocketRoute.urlcodereasonc              
   C   s(   t | jj| jjdd ||dd d S )NcloseServerTr7  r8  wasClean)r&  r+  r  r   r   r;   r7  r8  r3   r3   r4   closeK  s   zServerWebSocketRoute.closemessagec              	   C   s`   t |trt| jj| jjdd |dd d S t| jj| jjdd t|	 dd d S )NsendToServerFr>  r   T)
r{   r0   r&  r+  r  r   r   rO   rP   rQ   r;   r>  r3   r3   r4   r   Y  s   
zServerWebSocketRoute.send)r(  r)  r=   NN)r-   r.   r/   r<   r   r   r0   r2   r   r0  r   r!  r3  r5  r   r)   r=  r   r3   r3   r3   r4   r'  8  s    
$&
r'  c                
       s  e Zd Zdededededdf
 fddZd	eddfd
dZd	eddfddZd	eddfddZ	d	eddfddZ
edefddZd$dededdfddZd%ddZdeeef ddfddZdeeeef gef ddfddZdeee ee gef ddfd d!Zd&d"d#Z  ZS )'r)  r[   r\   r]   r^   r7   Nc                    s~   t  |||| d | _d | _d | _d | _t| | _d| _| j	
d| j | j	
d| j | j	
d| j | j	
d| j d S )NFmessageFromPagemessageFromServer	closePager9  )rj   r<   _on_page_message_on_page_closer.  r2  r'  _server
_connectedr   on_channel_message_from_page_channel_message_from_server_channel_close_page_channel_close_serverrt   ru   r3   r4   r<   m  s   
zWebSocketRoute.__init__eventc                 C   sZ   | j r|  |d rt|d  d S |d  d S | jr+t| j| jdd | d S d S )Nr   r>  r?  )rF  rO   r   rI  r&  r  r   r   r;   rO  r3   r3   r4   rK    s   z)WebSocketRoute._channel_message_from_pagec                 C   sP   | j r|  |d rt|d  d S |d  d S t| j| jdd | d S )Nr   r>  
sendToPage)r.  rO   r   r&  r  r   r   rP  r3   r3   r4   rL    s   z+WebSocketRoute._channel_message_from_serverc                 C   :   | j r|  |d |d  d S t| j| jdd | d S )Nr7  r8  r9  )rG  r&  r  r   r   rP  r3   r3   r4   rM    
   z"WebSocketRoute._channel_close_pagec                 C   rR  )Nr7  r8  rE  )r2  r&  r  r   r   rP  r3   r3   r4   rN    rS  z$WebSocketRoute._channel_close_serverc                 C   r   r   r   r:   r3   r3   r4   r)     r   zWebSocketRoute.urlr7  r8  c                    s<   z| j dd ||ddI d H  W d S  ty   Y d S w )NrE  Tr:  )r   r   r   r<  r3   r3   r4   r=    s   zWebSocketRoute.closec                 C   s4   | j rtdd| _ t| jdd  td| jS )NzAlready connected to the serverTconnectr)  )rI  r   r   r  r   r   r   rH  r:   r3   r3   r4   r5    s   z WebSocketRoute.connect_to_serverr>  c              	   C   sX   t |trt| j| jdd |dd d S t| j| jdd t| dd d S )NrQ  Fr@  T)	r{   r0   r&  r  r   r   rO   rP   rQ   rA  r3   r3   r4   r     s"   
zWebSocketRoute.sendr,  c                 C   r*  r8   )rF  r/  r3   r3   r4   r0    r   zWebSocketRoute.on_messagec                 C   r*  r8   )rG  r/  r3   r3   r4   r3    r   zWebSocketRoute.on_closec                    s<   | j rd S z| jdd I d H  W d S  ty   Y d S w )NensureOpened)rI  r   r   r   r:   r3   r3   r4   _after_handle  s   zWebSocketRoute._after_handlerB  )r7   r)  r=   )r-   r.   r/   r   r0   r	   r<   rK  rL  rM  rN  r   r)   r!  r=  r5  r   r2   r   r   r   r0  r   r3  rV  r   r3   r3   ru   r4   r)  l  s0    
$&r)  c                   @   s`   e Zd Zdee dedefddZede	d  de	e
 fdd	Zd
edefddZdddZdS )WebSocketRouteHandlerbase_urlr)   r,  c                 C   s   || _ || _|| _d S r8   )	_base_urlr)   r,  )r;   rX  r)   r,  r3   r3   r4   r<     s   
zWebSocketRouteHandler.__init__handlersr7   c                 C   sp   g }d}| D ](}t |jtr|d|ji qt |jtjr,||jjt|jd qd}q|r6ddigS |S )NFglob)regexSource
regexFlagsTz**/*)r{   r)   r0   rR   rePatternpatternr!   )rZ  patternsall_urlsr,  r3   r3   r4   prepare_interception_patterns  s   
z3WebSocketRouteHandler.prepare_interception_patternsws_urlc                 C   s   t | j|| jdS r   )r    rY  r)   )r;   rd  r3   r3   r4   matches  s   zWebSocketRouteHandler.matcheswebsocket_router)  Nc                    s2   |  |}t|r|I d H  | I d H  d S r8   )r,  r   iscoroutinerV  )r;   rf  coro_or_futurer3   r3   r4   handle  s
   


zWebSocketRouteHandler.handle)rf  r)  r7   N)r-   r.   r/   r   r0   r   r   r<   staticmethodr
   r   rc  r   re  ri  r3   r3   r3   r4   rW    s     

rW  c                
       sv  e Zd Zdededededdf
 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
fddZdefddZdefddZdedee fddZdedee fddZd4d!d"Zdee fd#d$Zdee fd%d&Zd5d'd(Zdefd)d*Z defd+d,Z!de"fd-d.Z#ede$fd/d0Z%ed6d2d3Z&  Z'S )7r   r[   r\   r]   r^   r7   Nc                    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   ra   rb   rc   rd   re   rf   rg   rh   r+   )rj   r<   r   rp   r   rn   ro   r   r   rq   _raw_headers_futurer   r   _finished_future)r;   r[   r\   r]   r^   r   ru   r3   r4   r<     s    
zResponse.__init__c                 C   s   d| j d| j dS )Nz<Response url=z	 request=rw   )r)   r   r:   r3   r3   r4   rx   *  ry   zResponse.__repr__c                 C   r   r   r   r:   r3   r3   r4   r)   -  r   zResponse.urlc                 C   s*   | j d dkp| j d dko| j d dkS )Nr   r      i+  r   r:   r3   r3   r4   ok1  s   zResponse.okc                 C   r   )Nr   r   r:   r3   r3   r4   r   8  r   zResponse.statusc                 C   r   )N
statusTextr   r:   r3   r3   r4   status_text<  r   zResponse.status_textc                 C   s
   | j  S r8   )rq   r+   r:   r3   r3   r4   r+   @  r   zResponse.headersc                 C   r   )NfromServiceWorkerr   r:   r3   r3   r4   from_service_workerD  r   zResponse.from_service_workerc                    r   r8   r   r:   r3   r3   r4   r   H  r   zResponse.all_headersc                    r   r8   r   r:   r3   r3   r4   r   K  r   zResponse.headers_arrayr>   c                    r   r8   r   r   r3   r3   r4   r   N  r   zResponse.header_valuec                    r   r8   )r   get_allr   r3   r3   r4   header_valuesQ  r   zResponse.header_valuesro   c                    sH   | j st | _ tt| jdd I d H }| j t| | j I d H S )NrawResponseHeaders)	rk  r   r   r   r   r   r   r   ro   )r;   r+   r3   r3   r4   r   T  s   
zResponse._actual_headersc                       | j dd I d H S )N
serverAddrr   r   r:   r3   r3   r4   server_addra  
   
zResponse.server_addrc                    rv  )NsecurityDetailsrx  r:   r3   r3   r4   security_detailsg  rz  zResponse.security_detailsc                    sh   d fdd}t | }t jtttt jt jf   j|gt j	dI d H  |
 r2|I d H  d S d S )Nr7   c                      s    j  I d H  td)NzTarget closed)r   r   r   r3   r:   r3   r4   on_finishedn  s   z&Response.finished.<locals>.on_finishedr  r=   )r   r  r  r   r
   r   Taskr   rl  r  r   )r;   r}  on_finished_taskr3   r:   r4   finishedm  s   zResponse.finishedc                    s    | j dd I d H }t|S )Nr   )r   r   rO   r   )r;   binaryr3   r3   r4   r   }  s   

zResponse.bodyc                    s   |   I d H }| S r8   )r   rQ   )r;   contentr3   r3   r4   text  s   zResponse.textc                    s   t |  I d H S r8   )r}   r   r  r:   r3   r3   r4   r}     r   zResponse.jsonc                 C   r   r8   )r   r:   r3   r3   r4   r     r   zResponse.requestr&   c                 C   s   | j jS r8   )r   r   r:   r3   r3   r4   r     s   zResponse.framer   r=   r   )(r-   r.   r/   r   r0   r	   r<   rx   r   r)   r   rn  r!  r   rp  r   r+   rr  r   r   r   r   r   r
   rt  r   r   ry  r   r|  r  r2   r   r  r   r}   rZ   r   r   r   r3   r3   ru   r4   r     sP    

r   c                
       s   e Zd ZedddddZdededed	ed
df
 fddZd
efddZ	e
d
efddZ		d#dededed
efddZ	d#dededed
efddZdeded
dfddZdeded
dfddZd
efdd Zd$d!d"Z  ZS )%	WebSocketr=  framereceived	framesentsocketerror)CloseFrameReceived	FrameSentr   r[   r\   r]   r^   r7   Nc                    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'   	frameSentc                         | d | d S Nopcoder   )_on_frame_sentr   r:   r3   r4   r         z$WebSocket.__init__.<locals>.<lambda>frameReceivedc                    r  r  )_on_frame_receivedr  r:   r3   r4   r     r  socketErrorc                    s     tjj| d S )Nerror)emitr  Eventsr   r  r:   r3   r4   r     r  r=  c                    s      S r8   )	_on_closer  r:   r3   r4   r     s    )rj   r<   
_is_closedr   r   r   rJ  rt   ru   r:   r4   r<     s    


zWebSocket.__init__c                 C   s   d| j dS )Nz<WebSocket url=rw   )r)   r:   r3   r3   r4   rx     r   zWebSocket.__repr__c                 C   r   r   r   r:   r3   r3   r4   r)     r   zWebSocket.urlrO  	predicater   c                    s   |d u rt t jj }t d| d}|t t|d| d| d |tj	j
kr7| tj	j
td |tj	jkrH| 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 r8   )r   _close_error_with_reasonr3   r:   r3   r4   r     s   
 z(WebSocket.expect_event.<locals>.<lambda>)r   r   _parent_timeout_settingsr   r"   reject_on_timeoutr   r  r  r  reject_on_eventr   r   wait_for_eventr   result)r;   rO  r  r   waiterr3   r:   r4   expect_event  s    zWebSocket.expect_eventc              	      sN   |  |||4 I d H }W d   I d H  n1 I d H sw   Y  |I d H S r8   )r  )r;   rO  r  r   
event_infor3   r3   r4   r    s
   (
zWebSocket.wait_for_eventr  r   c                 C   B   |dkr|  tjjt| d S |dkr|  tjj| d S d S N      )r  r  r  r  rO   r   r;   r  r   r3   r3   r4   r    
   zWebSocket._on_frame_sentc                 C   r  r  )r  r  r  r  rO   r   r  r3   r3   r4   r    r  zWebSocket._on_frame_receivedc                 C   r   r8   )r  r:   r3   r3   r4   	is_closed     zWebSocket.is_closedc                 C   s   d| _ | tjj|  d S r   )r  r  r  r  r  r:   r3   r3   r4   r    s   zWebSocket._on_closerB  r=   )r-   r.   r/   r   r  r   r0   r	   r<   rx   r   r)   r   r   r   r  r   r  r!  r  r  r   r  r  r   r3   r3   ru   r4   r    s\    

r  c                   @   s   e Zd ZdeddfddZedeeef dd fddZdede	e fd	d
Z
dedee fddZdeeef fddZdefddZdS )ro   r+   r7   Nc                 C   s8   || _ tt| _|D ]}d| j|d   |d < q
d S )NTr>   r?   )_headers_arrayr   r   _headers_mapr   )r;   r+   headerr3   r3   r4   r<     s
   
zRawHeaders.__init__c                 C   s   t t| S r8   )ro   rD   rC   r3   r3   r4   r     r6  z#RawHeaders._from_headers_dict_lossyr>   c                 C   s0   |  |}|s	d S | dkrdnd}||S )Nz
set-cookier   z, )rs  r   r   )r;   r>   values	separatorr3   r3   r4   rN     s
   

zRawHeaders.getc                 C   s   t | j|   S r8   )listr  r   keysr   r3   r3   r4   rs    ry   zRawHeaders.get_allc                 C   s,   i }| j  D ]}tt| |||< q|S r8   )r  r  r   r0   rN   )r;   r  r>   r3   r3   r4   r+     s   zRawHeaders.headersc                 C   r   r8   )r  r:   r3   r3   r4   r     r  zRawHeaders.headers_array)r-   r.   r/   r   r<   rj  r	   r0   r   r   rN   r
   rs  r+   r   r3   r3   r3   r4   ro     s    ro   )Kr   rO   r  r}   r   r   r^  collectionsr   pathlibr   typesr   typingr   r   r   r   r	   r
   r   r   r   r   urllibr    playwright._impl._api_structuresr   r   r   r   r   r   r   playwright._impl._connectionr   r   r   playwright._impl._errorsr   'playwright._impl._event_context_managerr   playwright._impl._helperr   r   r   r   r    playwright._impl._str_utilsr!   playwright._impl._waiterr"   !playwright._impl._browser_contextr#   r   r%   playwright._impl._framer&   playwright._impl._pager'   r(   r6   r0   rD   rY   rZ   r   AbstractEventLoopr&  r'  r)  rW  r   r  ro   r3   r3   r3   r4   <module>   sb   0$	

" F g
4},U