
    &th]|                        d Z ddlZddlZddlm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Z ddlmZ ddlmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ erddl
m Z   ej!        e"          Z# G d de          Z$ G d de%          Z&ddddddddddddddd Z' G d! d"e%          Z(d#e)d$e*fd%Z+ G d& d'e%          Z,i d(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIi dJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdki dldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddd	Z-dS )zNetwork Manager module.    N)OrderedDict)SimpleNamespace)	AwaitableDictListOptionalUnionTYPE_CHECKING)unquote)EventEmitter)
CDPSession)NetworkError)FrameManagerFrame)
debugError)Multimap)Setc                       e Zd ZdZ edddd          Zdeded	d
f fdZde	e
e
f         d	d
fdZde	e
e
f         d	d
fdZd	e	e
e
f         fdZded	d
fdZde
d	d
fdZded	d
fdZd2dZde	d	d
fdZde
ded	d
fdZded	d
fdZde	dee
         d	d
fdZde	d	d
fdZ	 d3dd d!ed"e	d#ed$ed%e	d	d
fd&Zd'e
dee
         d(e
d)ed*e
d+e	d,ee
         d-ed          d	d
fd.Zded	d
fd/Zded	d
fd0Zded	d
fd1Z  xZ!S )4NetworkManagerzNetworkManager class.requestresponserequestfailedrequestfinished)RequestResponseRequestFailedRequestFinishedclientframeManagerreturnNc                     t                                                       | _        | _        t	                       _        t	                       _        t                       _        d _	        d _
        t                       _        d _        d _        t                       _        t                       _         j                            d fd            j                            d j                    j                            d j                    j                            d j                    j                            d j                    j                            d	 j                   dS )
zMake new NetworkManager.FNzNetwork.requestWillBeSentc                 h    j         j                                                |                     S N)_client_loopcreate_task_onRequestWillBeSent)eventselfs    m/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/pyppeteer/network_manager.py<lambda>z)NetworkManager.__init__.<locals>.<lambda>:   s-    $,,88))%00      zNetwork.requestInterceptedzNetwork.requestServedFromCachezNetwork.responseReceivedzNetwork.loadingFinishedzNetwork.loadingFailed)super__init__r$   _frameManagerdict_requestIdToRequest_requestIdToResponseWillBeSentr   _extraHTTPHeaders_offline_credentialsset_attemptedAuthentications_userRequestInterceptionEnabled#_protocolRequestInterceptionEnabledr   _requestHashToRequestIds_requestHashToInterceptionIdson_onRequestIntercepted_onRequestServedFromCache_onResponseReceived_onLoadingFinished_onLoadingFailed)r)   r   r   	__class__s   `  r*   r.   zNetworkManager.__init__(   sI   )AE IM+8C#6:=@UU&/4,380(0

%-5ZZ*'   	
 	
 	
 	4d6PQQQ8$:XYYY2D4LMMM143JKKK/1FGGGGGr,   credentialsc                 L   K   || _         |                                  d{V  dS )z"Provide credentials for http auth.N)r5   "_updateProtocolRequestInterception)r)   rC   s     r*   authenticatezNetworkManager.authenticateD   s8      '5577777777777r,   extraHTTPHeadersc           	      \  K   t                      | _        |                                D ]Y\  }}t          |t                    s#t          d| dt          |           d          || j        |                                <   Z| j        	                    dd| j        i           d{V  dS )zSet extra http headers.zExpected value of header "z" to be string, but z
 is found.zNetwork.setExtraHTTPHeadersheadersN)
r   r3   items
isinstancestr	TypeErrortypelowerr$   send)r)   rG   kvs       r*   setExtraHTTPHeadersz"NetworkManager.setExtraHTTPHeadersI   s       "-$**,, 	2 	2DAqa%% 0/ / /77/ / /0 0 0 12D"17799--l =!*D,B CE E 	E 	E 	E 	E 	E 	E 	E 	E 	Er,   c                 $    t          di | j        S )zGet extra http headers. )r0   r3   r)   s    r*   rG   zNetworkManager.extraHTTPHeadersV   s    --d,---r,   valuec                    K   | j         |k    rdS || _         | j                            d| j         dddd           d{V  dS )z#Change offline mode enable/disable.Nz Network.emulateNetworkConditionsr   )offlinelatencydownloadThroughputuploadThroughput)r4   r$   rP   r)   rW   s     r*   setOfflineModezNetworkManager.setOfflineModeZ   s~      =E!!Fl B}"$ "	E
 E
   	 	 	 	 	 	 	 	 	r,   	userAgentc                 P   K   | j                             dd|i           d{V  dS )zSet user agent.zNetwork.setUserAgentOverrider`   N)r$   rP   )r)   r`   s     r*   setUserAgentzNetworkManager.setUserAgentf   sS      l >!,i 8: : 	: 	: 	: 	: 	: 	: 	: 	: 	:r,   c                 L   K   || _         |                                  d{V  dS )zEnable request interception.N)r8   rE   r^   s     r*   setRequestInterceptionz%NetworkManager.setRequestInterceptionk   s8      /4,5577777777777r,   c                   K   | j         pt          | j                  }|| j        k    rd S || _        |rddigng }t	          j        | j                            dd|i          | j                            dd|i                     d {V  d S )N
urlPattern*zNetwork.setCacheDisabledcacheDisabledzNetwork.setRequestInterceptionpatterns)r8   boolr5   r9   asynciogatherr$   rP   )r)   enabledri   s      r*   rE   z1NetworkManager._updateProtocolRequestInterceptionp   s      7 +)** 	d>>>F3:0,3;\3'((nL* '*  L0X& 	
 	
 		
 		
 		
 		
 		
 		
 		
 		
 		
r,   r(   c                   K   | j         rt          |                    di                     }| j                            |          }|r2|                     ||           | j                            ||           nK| j                            ||                    d                     || j	        |                    d          <   d S |                     |d            d S )Nr   	requestId)
r9   generateRequestHashgetr;   
firstValue
_onRequestdeleter:   r6   r2   )r)   r(   requestHashinterceptionIds       r*   r'   z#NetworkManager._onRequestWillBeSent   s      3 		-eii	2.F.FGGK!?JJ;WWN T~666299+~VVVV-11+uyy?U?UVVVNS3EIIk4J4JKFt$$$$$r,   methodmsgc                    K   	 | j                             ||           d {V  d S # t          $ r }t          t          |           Y d }~d S d }~ww xY wr#   )r$   rP   	Exceptionr   logger)r)   rw   rx   es       r*   _sendzNetworkManager._send   s|      	",##FC00000000000 	" 	" 	"vq!!!!!!!!!	"s   !' 
AAAc           
         |                     d          rd}|d         | j        v rd}n)| j        r"d}| j                            |d                    t	          | di                                d          }t	          | di                                d          }| j        j                            |                     d	|d         |||d
d                     d S | j	        sB| j
        r;| j        j                            |                     d	d|d         i                     t          |d                   }| j                            |          }|rn| j        |         }|                     ||                     d                     | j                            ||           | j                            |d            d S | j                            ||d                    d S )NauthChallengeDefaultrv   
CancelAuthProvideCredentialsr5   usernamepassword"Network.continueInterceptedRequest)r   r   r   )rv   authChallengeResponser   )rq   r7   r5   addgetattrr$   r%   r&   r}   r8   r9   rp   r:   rr   r2   rs   rt   popr;   r6   )r)   r(   r   r   r   ru   ro   requestWillBeSentEvents           r*   r=   z$NetworkManager._onRequestIntercepted   s   99_%% 	 H%&$*HHH'" L/.2259I3JKKKt^R88<<ZHHHt^R88<<ZHHHL**4::4&+,<&=$,$,$,. .7 7	, 	, 	 	 	 F4 	8	L**4::4$e,<&=7, ,    *%	*:;;1<<[II	 	Y%)%H%S"OO2EII>N4O4OPPP)00iHHH/33ItDDDDD.22;FV@WXXXXXr,   rv   c                 L   t                      }|                    d          r| j                            |d                   }|r|d         }|                     ||                    d          |                    d          |                    d          |                    d          |                    d                     |j        }t          |                    d          |                    d          k    o|                    d	          d
k              }|                     |d         ||                    di                               d          ||                    d	d          |                    di           |                    d          |           d S )NredirectResponsero   statusrI   fromDiskCachefromServiceWorkerSecurityDetailsloaderIdrN   Documentr   url frameId)listrq   r1   _handleRequestRedirect_redirectChainrj   _handleRequestStart)r)   r(   rv   redirectChainr   r   isNavigationRequests          r*   rs   zNetworkManager._onRequest   s   '+vv99'(( 	7.2253EFFG 
7#();#< ++$((22$((33$((99$(()<==$(():;;   !( 6"IIk""eii
&;&;; ,IIf+
 
 	  +IIi$$((//IIfb!!IIi$$IIi  		
 		
 		
 		
 		
r,   c                 v    | j                             |                    d                    }|r	d|_        d S d S )Nro   T)r1   rq   _fromMemoryCache)r)   r(   r   s      r*   r>   z(NetworkManager._onRequestServedFromCache   sD    *..uyy/E/EFF 	,'+G$$$	, 	,r,   r   redirectStatusredirectHeadersr   r   securityDetailsc           	         t          | j        ||||||          }||_        |j                            |           |                    t          d                     | j                            |j	        d            | j
                            |j                   |                     t          j        j         |           |                     t          j        j        |           d S )Nz2Response body is unavailable for redirect response)r   r$   	_responser   append_bodyLoadedPromiseFulfillr   r1   r   
_requestIdr7   discard_interceptionIdemitr   Eventsr   )r)   r   r   r   r   r   r   r   s           r*   r   z%NetworkManager._handleRequestRedirect   s     DL'>+]<M+- - %%%g...**MNN	
 	
 	
 	 $$W%7>>>&..w/FGGG		.'0(;;;		.'7AAAAAr,   ro   r   r   resourceTyperequestPayloadr   r   c	                     d }	|r!| j         | j                             |          }	t          | j        |||| j        ||||	|
  
        }
|
| j        |<   |                     t          j        j        |
           d S r#   )	r/   framer   r$   r8   r1   r   r   r   )r)   ro   rv   r   r   r   r   r   r   r   r   s              r*   r   z"NetworkManager._handleRequestStart   s      	6t)5&,,W55E$,	>->&}N N /6 +		.'/99999r,   c                    | j                             |d                   }|sd S |                    di           }t          | j        ||                    dd          |                    di           |                    d          |                    d          |                    d                    }||_        |                     t          j        j        |           d S )	Nro   r   r   r   rI   r   r   r   )r1   rq   r   r$   r   r   r   r   )r)   r(   r   _respr   s        r*   r?   z"NetworkManager._onResponseReceived  s    *..u[/ABB 	F		*b))DL'!IIh22!IIi44!IIo66!II&9::!II&788: : %		.'0(;;;;;r,   c                 R   | j                             |d                   }|sd S |j        }|r|                    d            | j                             |j        d            | j                            |j                   | 	                    t          j        j        |           d S )Nro   )r1   rq   r   r   r   r   r7   r   r   r   r   r   r   r)   r(   r   r   s       r*   r@   z!NetworkManager._onLoadingFinished  s    *..u[/ABB  	F# 	5..t444 $$W%7>>>&..w/FGGG		.'7AAAAAr,   c                    | j                             |d                   }|sd S |                    d          |_        |j        }|r|                    d            | j                             |j        d            | j                            |j	                   | 
                    t          j        j        |           d S )Nro   	errorText)r1   rq   _failureTextr   r   r   r   r7   r   r   r   r   r   r   r   s       r*   rA   zNetworkManager._onLoadingFailed   s    *..u[/ABB  	F$yy55# 	5..t444 $$W%7>>>&..w/FGGG		.'5w?????r,   )r    Nr#   )"__name__
__module____qualname____doc__r   r   r   r   r.   r   rL   rF   rS   rG   rj   r_   rb   rd   rE   r'   r0   r}   r=   r   rs   r>   intr   r   r   r?   r@   rA   __classcell__)rB   s   @r*   r   r      s       _%)	  FHz H H$ H H H H H H88d38n 8 8 8 8 8
E$sCx. E'+E E E E.$sCx. . . . .
$ 
4 
 
 
 
:C :D : : : :
8$ 84 8 8 8 8

 
 
 
$% % % % % %"# "D "T " " " "'Y4 'YD 'Y 'Y 'Y 'YR
 
hsm 
 
 
 
 
>,t , , , , , 8<B Bi B B04BEIB26B 15B AEB B B B":S :,4SM:@C:15:EH: -1: <DC=: ,0	?	:
 "&: : : :"< <$ < < < <B B B B B B@d @t @ @ @ @ @ @ @ @r,   r   c                      e Zd ZdZdedee         dee         dedededed	ed
ee	         de
d          ddfdZedefd            Zedefd            Zedee         fd            Zedee         fd            Zedefd            Zeded         fd            Zedee	         fd            ZdefdZede
d          fd            Zdee         fdZd!deddfdZdeddfdZd"deddfd ZdS )#r   a  Request class.

    Whenever the page sends a request, such as for a network resource, the
    following events are emitted by pyppeteer's page:

    - ``'request'``: emitted when the request is issued by the page.
    - ``'response'``: emitted when/if the response is received for the request.
    - ``'requestfinished'``: emitted when the response body is downloaded and
      the request is complete.

    If request fails at some point, then instead of ``'requestfinished'`` event
    (and possibly instead of ``'response'`` event), the ``'requestfailed'``
    event is emitted.

    If request gets a ``'redirect'`` response, the request is successfully
    finished with the ``'requestfinished'`` event, and a new request is issued
    to a redirect url.
    r   ro   rv   r   allowInterceptionr   r   payloadr   r   r    Nc                    || _         || _        || _        || _        || _        d| _        d | _        d | _        || _        |	                                | _
        |                    d          | _        |                    d          | _        |                    di           }d |                                D             | _        |	| _        |
| _        d| _        d S )NFrw   postDatarI   c                 >    i | ]\  }}|                                 |S rU   rO   .0rQ   rR   s      r*   
<dictcomp>z$Request.__init__.<locals>.<dictcomp>W  &    BBB$!QABBBr,   )r$   r   _isNavigationRequestr   _allowInterception_interceptionHandledr   r   _urlrO   _resourceTyperq   _method	_postDatarJ   _headers_framer   r   )r)   r   ro   rv   r   r   r   r   r   r   r   rI   s               r*   r.   zRequest.__init__C  s     #$7!-"3$)!-1+/	)//11{{8,, Z00++i,,BB'--//BBB+ %r,   c                     | j         S )zURL of this request.r   rV   s    r*   r   zRequest.url]       yr,   c                     | j         S )a;  Resource type of this request perceived by the rendering engine.

        ResourceType will be one of the following: ``document``,
        ``stylesheet``, ``image``, ``media``, ``font``, ``script``,
        ``texttrack``, ``xhr``, ``fetch``, ``eventsource``, ``websocket``,
        ``manifest``, ``other``.
        )r   rV   s    r*   r   zRequest.resourceTypeb  s     !!r,   c                     | j         S )z/Return this request's method (GET, POST, etc.).)r   rV   s    r*   rw   zRequest.methodm       |r,   c                     | j         S )z!Return post body of this request.)r   rV   s    r*   r   zRequest.postDatar       ~r,   c                     | j         S )zgReturn a dictionary of HTTP headers of this request.

        All header names are lower-case.
        r   rV   s    r*   rI   zRequest.headersw       }r,   r   c                     | j         S )zReturn matching :class:`Response` object, or ``None``.

        If the response has not been received, return ``None``.
        )r   rV   s    r*   r   zRequest.response  s     ~r,   c                     | j         S )zReturn a matching :class:`~pyppeteer.frame_manager.frame` object.

        Return ``None`` if navigating to error page.
        )r   rV   s    r*   r   zRequest.frame  s     {r,   c                     | j         S )z3Whether this request is driving frame's navigation.)r   rV   s    r*   r   zRequest.isNavigationRequest  s    ((r,   c                 4    t          j         | j                  S )a  Return chain of requests initiated to fetch a resource.

        * If there are no redirects and request was successful, the chain will
          be empty.
        * If a server responds with at least a single redirect, then the chain
          will contain all the requests that were redirected.

        ``redirectChain`` is shared between all the requests of the same chain.
        )copyr   rV   s    r*   r   zRequest.redirectChain  s     y,---r,   c                 &    | j         sdS d| j         iS )a:  Return error text.

        Return ``None`` unless this request was failed, as reported by
        ``requestfailed`` event.

        When request failed, this method return dictionary which has a
        ``errorText`` field, which contains human-readable error message, e.g.
        ``'net::ERR_RAILED'``.
        Nr   )r   rV   s    r*   failurezRequest.failure  s"       	4T.//r,   	overridesc                 R  K   |i }| j         st          d          | j        rt          d          d| _        d| j        i}|                    |           	 | j                            d|           d{V  dS # t          $ r }t          t          |           Y d}~dS d}~ww xY w)aY  Continue request with optional request overrides.

        To use this method, request interception should be enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`. If request
        interception is not enabled, raise ``NetworkError``.

        ``overrides`` can have the following fields:

        * ``url`` (str): If set, the request url will be changed.
        * ``method`` (str): If set, change the request method (e.g. ``GET``).
        * ``postData`` (str): If set, change the post data or request.
        * ``headers`` (dict): If set, change the request HTTP header.
        N$Request interception is not enabled.Request is already handled.Trv   r   )
r   r   r   r   updater$   rP   rz   r   r{   )r)   r   optr|   s       r*   	continue_zRequest.continue_  s       I& 	GEFFF$ 	><===$(!!56

9	",##$H#NNNNNNNNNNN 	" 	" 	"vq!!!!!!!!!	"s   !A< <
B&B!!B&r   c                 N  K   | j                             d          rdS | j        st          d          | j        rt          d          d| _        |                    d          r7t          |d         t                    r|d                             d          }n|                    d          }i }|                    d          r.|d         D ]%}|d         |         ||	                                <   &|                    d	          r|d	         |d
<   |rd|vrt          |          |d<   |                    dd          }t                              |d          }d| d| }d}||z   }	|D ]}|	 | d||          | }	|	|z   }	|	                    d          }
|r|
|z   }
t          j        |
                              d          }	 | j                            d| j        |d           d{V  dS # t$          $ r }t'          t(          |           Y d}~dS d}~ww xY w)aV  Fulfills request with given response.

        To use this, request interception should by enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`. Request
        interception is not enabled, raise ``NetworkError``.

        ``response`` is a dictionary which can have the following fields:

        * ``status`` (int): Response status code, defaults to 200.
        * ``headers`` (dict): Optional response headers.
        * ``contentType`` (str): If set, equals to setting ``Content-Type``
          response header.
        * ``body`` (str|bytes): Optional response body.
        data:Nr   r   Tbodyutf-8rI   contentTypezcontent-typezcontent-lengthr      r   z	HTTP/1.1  z
z: asciir   )rv   rawResponse)r   
startswithr   r   r   rq   rK   rL   encoderO   lenstatusTextsbase64	b64encodedecoder$   rP   r   rz   r   r{   )r)   r   responseBodyresponseHeadersheader
statusCode
statusText
statusLineCRLFtextresponseBufferr   r|   s                r*   respondzRequest.respond  s      9(( 	F& 	GEFFF$ 	><===$(!<< 	0Jx/?$E$E 	0,4V,<,C,CG,L,LLL#<<//L<<	"" 	N"9- N N2:92Ef2M//<<&& 	F.6}.EON+ 	B,OCC03L0A0AO,-\\(C00
 __Z44
:::j::
D % 	F 	FFEFEEof&=EtEEDDd{W-- 	;+l:N&~66==gFF	",##$H"&"6*K K             	" 	" 	"vq!!!!!!!!!	"s   )G: :
H$HH$failed	errorCodec                   K   t           |         }|s"t          d                    |                    | j        st          d          | j        rt          d          d| _        	 | j                            dt          | j        |                     d{V  dS # t          $ r }t          t          |           Y d}~dS d}~ww xY w)ar  Abort request.

        To use this, request interception should be enabled by
        :meth:`pyppeteer.page.Page.setRequestInterception`.
        If request interception is not enabled, raise ``NetworkError``.

        ``errorCode`` is an optional error code string. Defaults to ``failed``,
        could be one of the following:

        - ``aborted``: An operation was aborted (due to user action).
        - ``accessdenied``: Permission to access a resource, other than the
          network, was denied.
        - ``addressunreachable``: The IP address is unreachable. This usually
          means that there is no route to the specified host or network.
        - ``blockedbyclient``: The client chose to block the request.
        - ``blockedbyresponse``: The request failed because the request was
          delivered along with requirements which are not met
          ('X-Frame-Options' and 'Content-Security-Policy' ancestor check,
          for instance).
        - ``connectionaborted``: A connection timeout as a result of not
          receiving an ACK for data sent.
        - ``connectionclosed``: A connection was closed (corresponding to a TCP
          FIN).
        - ``connectionfailed``: A connection attempt failed.
        - ``connectionrefused``: A connection attempt was refused.
        - ``connectionreset``: A connection was reset (corresponding to a TCP
          RST).
        - ``internetdisconnected``: The Internet connection has been lost.
        - ``namenotresolved``: The host name could not be resolved.
        - ``timedout``: An operation timed out.
        - ``failed``: A generic failure occurred.
        zUnknown error code: {}r   r   Tr   )rv   errorReasonN)errorReasonsr   formatr   r   r$   rP   r0   r   rz   r   r{   )r)   r  r  r|   s       r*   abortzRequest.abort  s      B #9- 	K7>>yIIJJJ& 	GEFFF$ 	><===$(!	",##$H$#3'K K K             	" 	" 	"vq!!!!!!!!!	"s   (5B 
C	)CC	r#   )r  )r   r   r   r   r   r   rL   rj   r0   r   r   r.   propertyr   r   rw   r   r   rI   r   r   r   r   r   r   r  r  rU   r,   r*   r   r   /  s        &&z &hsm &!)#&EI&$(&/2&BE& & (0& !%Y	&
 & & & &4 S    X "c " " " X"     X (3-    X     X (:.    X x    X)T ) ) ) ) 
.tI 
. 
. 
. X
.0$ 0 0 0 0" " " " " " "<9"d 9"t 9" 9" 9" 9"v/" /"S /" /" /" /" /" /" /"r,   r   AbortedAccessDeniedAddressUnreachableBlockedByClientBlockedByResponseConnectionAbortedConnectionClosedConnectionFailedConnectionRefusedConnectionResetInternetDisconnectedNameNotResolvedTimedOutFailed)abortedaccessdeniedaddressunreachableblockedbyclientblockedbyresponseconnectionabortedconnectionclosedconnectionfailedconnectionrefusedconnectionresetinternetdisconnectednamenotresolvedtimedoutr  c                      e Zd ZdZ	 ddedededeeef         de	de	d	ed
dfdZ
dee         d
dfdZed
efd            Zed
e	fd            Zed
efd            Zed
efd            Zed
eedf         fd            Zd
efdZd
ee         fdZd
efdZd
efdZed
efd            Zed
e	fd            Zed
e	fd            ZdS )r   zCResponse class represents responses which are received by ``Page``.Nr   r   r   rI   r   r   r   r    c                    || _         || _        || _        | j         j                                        | _        | j         j                                        | _        |j        | _        || _	        || _
        d |                                D             | _        i | _        |r8t          |d         |d         |d         |d         |d                   | _        d S d S )Nc                 >    i | ]\  }}|                                 |S rU   r   r   s      r*   r   z%Response.__init__.<locals>.<dictcomp>[  r   r,   subjectNameissuer	validFromvalidToprotocol)r$   _request_statusr%   create_future_contentPromise_bodyLoadedPromiser   r   _fromDiskCache_fromServiceWorkerrJ   r   _securityDetailsr   )r)   r   r   r   rI   r   r   r   s           r*   r.   zResponse.__init__N  s     #|1??AA"&,"4"B"B"D"DK	+"3BB'--//BBB>@ 	$3.),	*
+% %D!!!	 	r,   rW   c                 :    | j                             |           d S r#   )r1  
set_resultr^   s     r*   r   z"Response._bodyLoadedPromiseFulfillf  s    **511111r,   c                     | j         S )zURL of the response.r   rV   s    r*   r   zResponse.urli  r   r,   c                 B    | j         dk    pd| j         cxk    odk    nc S )z@Return bool whether this request is successful (200-299) or not.r   r   i+  r.  rV   s    r*   okzResponse.okn  s4     |q >C4<$>$>$>$>3$>$>$>$>>r,   c                     | j         S )zStatus code of the response.r9  rV   s    r*   r   zResponse.statuss  r   r,   c                     | j         S )zfReturn dictionary of HTTP headers of this response.

        All header names are lower-case.
        r   rV   s    r*   rI   zResponse.headersx  r   r,   r   c                     | j         S )zReturn security details associated with this response.

        Security details if the response was received over the secure
        connection, or `None` otherwise.
        )r4  rV   s    r*   r   zResponse.securityDetails  s     $$r,   c                 *  K   | j          d {V }t          |t                    r|| j                            dd| j        j        i           d {V }|                    dd          }|                    d          rt          j	        |          S |S )NzNetwork.getResponseBodyro   r   r,   base64Encoded)
r1  rK   rz   r$   rP   r-  r   rq   r   	b64decode)r)   resultr   r   s       r*   _bufreadzResponse._bufread  s      .......fi(( 	L**+D1G
         ||FC((<<(( 	*#D)))r,   c                     | j                                         s1| j        j                            |                                           S | j         S )z<Return awaitable which resolves to bytes with response body.)r0  doner$   r%   r&   rB  rV   s    r*   bufferzResponse.buffer  sD    #((** 	C<%11$--//BBB##r,   c                    K   |                                   d{V }t          |t                    r|S |                    d          S )z)Get text representation of response body.Nr   )rE  rK   rL   r   r)   contents     r*   r   zResponse.text  sN      %%%%%%gs## 	+N>>'***r,   c                 b   K   |                                   d{V }t          j        |          S )z)Get JSON representation of response body.N)r   jsonloadsrG  s     r*   rJ  zResponse.json  s5      		######z'"""r,   c                     | j         S )z%Get matching :class:`Request` object.)r-  rV   s    r*   r   zResponse.request       }r,   c                 (    | j         p| j        j        S )zReturn ``True`` if the response was served from cache.

        Here `cache` is either the browser's disk cache or memory cache.
        )r2  r-  r   rV   s    r*   	fromCachezResponse.fromCache  s     "Ddm&DDr,   c                     | j         S )z?Return ``True`` if the response was served by a service worker.)r3  rV   s    r*   r   zResponse.fromServiceWorker  s     &&r,   r#   )r   r   r   r   r   r   r   r   rL   rj   r.   r   rz   r   r	  r   r:  r   rI   r	   r   bytesrB  r   rE  r   r0   rJ  r   rO  r   rU   r,   r*   r   r   K  sa       MM CG z G S sCx.9=$(;?    02x	/B 2t 2 2 2 2 S    X ?D ? ? ? X?     X     X %t->'>!? % % % X%
 
 
 
 
$	%( $ $ $ $+C + + + +#D # # # #
     X E4 E E E XE '4 ' ' ' X' ' 'r,   r   r   r    c                     |                      dd          }	 t          |          }n# t          $ r Y nw xY w||                      d          |                      d          i d}|                    d          srt	          | d                                                   }|                                 |D ]4}| d         |         }|                                }|dv r)||d         |<   5t          j	        |          S )	zGenerate request hash.r   r   rw   r   )r   rw   r   rI   r   rI   )acceptrefererz/x-devtools-emulate-network-conditions-client-idcookie)
rq   r   rz   r   r   keyssortrO   rJ  dumps)r   normalizedURL_hashrI   r   headerValues         r*   rp   rp     s"   KKr**M..    ++h''KK
++	 E ##G,, 3wy)..0011 
	3 
	3F!),V4K\\^^F    '2E)V$$:es   ( 
55c                       e Zd ZdZdedededededdfd	Zedefd
            Zedefd            Z	edefd            Z
edefd            Zedefd            ZdS )r   z6Class represents responses which are received by page.r(  r)  r*  r+  r,  r    Nc                 L    || _         || _        || _        || _        || _        d S r#   )_subjectName_issuer
_validFrom_validTo	_protocol)r)   r(  r)  r*  r+  r,  s         r*   r.   zSecurityDetails.__init__  s*    '#!r,   c                     | j         S )z:Return the subject to which the certificate was issued to.)r^  rV   s    r*   r(  zSecurityDetails.subjectName  s       r,   c                     | j         S )z;Return a string with the name of issuer of the certificate.)r_  rV   s    r*   r)  zSecurityDetails.issuer  r   r,   c                     | j         S )z<Return UnixTime of the start of validity of the certificate.)r`  rV   s    r*   r*  zSecurityDetails.validFrom  s     r,   c                     | j         S )z:Return UnixTime of the end of validity of the certificate.)ra  rV   s    r*   r+  zSecurityDetails.validTo  rM  r,   c                     | j         S )z;Return string of with the security protocol, e.g. "TLS1.2".)rb  rV   s    r*   r,  zSecurityDetails.protocol  r   r,   )r   r   r   r   rL   r   r.   r	  r(  r)  r*  r+  r,  rU   r,   r*   r   r     s       @@"C " " ""),"15" " " " !S ! ! ! X!     X 3    X     X #    X  r,   r   100Continue101zSwitching Protocols102
Processing200OK201Created202Accepted203zNon-Authoritative Information204z
No Content206zPartial Content207zMulti-Status208zAlready Reported209zIM Used300zMultiple Choices301zMoved Permanently302Found303z	See Other304zNot Modified305z	Use Proxy306zSwitch Proxy307zTemporary Redirect308zPermanent Redirect400zBad Request401Unauthorized402zPayment Required403	Forbidden404z	Not Found405zMethod Not Allowed406zNot Acceptable407zProxy Authentication Required408zRequest Timeout409Conflict410Gone411zLength Required412zPrecondition Failed413zPayload Too Large414zURI Too Long415zUnsupported Media Type416zRange Not Satisfiable417zExpectation Failed418zI'm a teapot421zMisdirected Request422zUnprocessable Entity423Locked424zFailed Dependency426zUpgrade Required428zPrecondition Required429zToo Many Requests431zRequest Header Fields Too Large451zUnavailable For Legal Reasons500zInternal Server Error501zNot ImplementedzBad GatewayzService UnavailablezGateway TimeoutzHTTP Version Not SupportedzVariant Also NegotiateszInsufficient StoragezLoop DetectedzNot ExtendedzNetwork Authentication Required)	502503504505506507508510511).r   rk   r   collectionsr   r   rJ  loggingtypesr   typingr   r   r   r   r	   r
   urllib.parser   pyeer   pyppeteer.connectionr   pyppeteer.errorsr   pyppeteer.frame_managerr   r   pyppeteer.helperr   pyppeteer.multimapr   r   	getLoggerr   r{   r   objectr   r  r   r0   rL   rp   r   r   rU   r,   r*   <module>r     sW       # # # # # #    ! ! ! ! ! ! H H H H H H H H H H H H H H H H                   + + + + + + ) ) ) ) ) ) 7 7 7 7 7 7 7 7 ' ' ' ' ' ' ' ' ' ' ' ' 		8	$	$N@ N@ N@ N@ N@\ N@ N@ N@bG" G" G" G" G"f G" G" G"V ".(,,**,(2( $m' m' m' m' m'v m' m' m'` #    @" " " " "f " " "J=	:=	 = 
<= 
4	=
 
9= 
:= 
*= 
<= 
= 
>= 
= 
9= 
= 
= 
7=  
;!=" 
>#= =$ 
;%=& 
>'=( 
)=* 
+=, 
=-=. 
>/=0 
1=2 
;3=4 
;5=6 
7=8 
9=: 
*;=< 
==> 
:?=@ 
6A=B 
C=D 
 E= = =F 
G=H 
>I=J 
#K=L 
"M=N 
O=P 
?Q=R 
 S=T 
!U=V 
8W=X 
Y=Z 
[=\ 
"]=^ 
_=` 
,a=b 
*c=d 
"e=f 
g= =h  '$!,y= = =r,   