o
    M,h/.                     @   s:   d dl mZ G dd dZG dd dZG dd dZdS )	    )command_builderc                   @   s$   e Zd ZdZdd Zedd ZdS )NetworkEventzRepresents a network event.c                 K   s   || _ || _d S N)event_classparams)selfr   kwargs r	   r/var/www/www-root/data/www/bot.pdev.uz/venv/lib/python3.10/site-packages/selenium/webdriver/common/bidi/network.py__init__   s   
zNetworkEvent.__init__c                 C   s   | dd| di|S )Nr   r	   )get)clsjsonr	   r	   r
   	from_json   s   zNetworkEvent.from_jsonN)__name__
__module____qualname____doc__r   classmethodr   r	   r	   r	   r
   r      s
    r   c                   @   s   e Zd ZddddddddZd	d
ddZdd Zg ddfddZd ddZdd Zd!ddZ	dd Z
dd Zdd Zdd ZdS )"Networkznetwork.beforeRequestSentznetwork.responseStartedznetwork.responseCompletedznetwork.authRequiredznetwork.fetchErrornetwork.continueRequestnetwork.continueWithAuth)before_requestresponse_startedresponse_completedauth_requiredfetch_errorcontinue_requestcontinue_authbeforeRequestSentresponseStartedauthRequired)r   r   r   c                 C   s   || _ g | _i | _i | _d S r   )conn
intercepts	callbackssubscriptions)r   r"   r	   r	   r
   r   2   s   
zNetwork.__init__Nc                 C   sn   i }|dur
||d< |dur||d< t |dkr||d< ndg|d< td|}| j|}| j|d  |S )	a  Add an intercept to the network.

        Parameters:
        ----------
            phases (list, optional): A list of phases to intercept.
                Default is empty list.
            contexts (list, optional): A list of contexts to intercept.
                Default is None.
            url_patterns (list, optional): A list of URL patterns to intercept.
                Default is None.

        Returns:
        -------
            str : intercept id
        NcontextsurlPatternsr   phasesr   znetwork.addIntercept	intercept)lenr   r"   executer#   append)r   r(   r&   url_patternsr   cmdresultr	   r	   r
   _add_intercept8   s   


zNetwork._add_interceptc              
   C   s   |du r!| j  }|D ]}| jtdd|i | j | qdS z| jtdd|i | j | W dS  tyH } ztd| d}~ww )as  Remove a specific intercept, or all intercepts.

        Parameters:
        ----------
            intercept (str, optional): The intercept to remove.
                Default is None.

        Raises:
        ------
            Exception: If intercept is not found.

        Notes:
        -----
            If intercept is None, all intercepts will be removed.
        Nznetwork.removeInterceptr)   zException: )r#   copyr"   r+   r   remove	Exception)r   r)   intercepts_to_removeintercept_ider	   r	   r
   _remove_interceptW   s   
zNetwork._remove_interceptc                    sR   t |} fdd}j||}|jv r!j| | |S |gj|< |S )a`  Set a callback function to subscribe to a network event.

        Parameters:
        ----------
            event_name (str): The event to subscribe to.
            callback (function): The callback function to execute on event.
                Takes Request object as argument.

        Returns:
        -------
            int : callback id
        c                    s   t | jd dd | jd dd | jd dd | jd dd | jd dd | jd dd | jd dd | jd dd d		} | d S )
NrequestbodySizecookieszgoog:resourceTypeheadersheadersSizetimingsurl)	network
request_id	body_sizer:   resource_typer;   headers_sizer=   r>   )Requestr   r   )
event_datar8   callbackr   r	   r
   	_callback   s   z&Network._on_request.<locals>._callback)r   r"   add_callbackr$   r,   )r   
event_namerG   eventrH   callback_idr	   rF   r
   _on_requests   s   
zNetwork._on_requestc           
      C   s   z| j | }| j| }W n ty   td| dw | j|g||d}| ||}|| jv r9| j| | ni }	|g|	d< | j	t
d|	 |g| j|< |d | j|< |S )a0  Add a request handler to the network.

        Parameters:
        ----------
            event (str): The event to subscribe to.
            url_patterns (list, optional): A list of URL patterns to intercept.
                Default is None.
            contexts (list, optional): A list of contexts to intercept.
                Default is None.
            callback (function): The callback function to execute on request interception
                Takes Request object as argument.

        Returns:
        -------
            int : callback id
        Event 
 not found)r(   r-   r&   eventszsession.subscriber)   )EVENTSPHASESKeyErrorr3   r0   rM   r%   r,   r"   r+   r   r$   )
r   rK   rG   r-   r&   rJ   
phase_namer/   rL   r   r	   r	   r
   add_request_handler   s    


zNetwork.add_request_handlerc                 C   s   z| j | }W n ty   td| dw t|}| j|| | | j|  | j|= | j| 	| t
| j| dkrUi }|g|d< | jtd| | j|= dS dS )zRemove a request handler from the network.

        Parameters:
        ----------
            event_name (str): The event to unsubscribe from.
            callback_id (int): The callback id to remove.
        rN   rO   r   rP   session.unsubscribeN)rQ   rS   r3   r   r"   remove_callbackr7   r$   r%   r2   r*   r+   r   )r   rK   rL   rJ   	net_eventr   r	   r	   r
   remove_request_handler   s    
zNetwork.remove_request_handlerc                 C   st   | j D ]1}t|}| j | D ]}| j|| | | j|  | j|= qi }|g|d< | jtd| qi | _ dS )z,Clear all request handlers from the network.rP   rV   N)r%   r   r"   rW   r7   r$   r+   r   )r   rJ   rX   rL   r   r	   r	   r
   clear_request_handlers   s   



zNetwork.clear_request_handlersc                    s   d} fdd}|  ||S )a  Add an authentication handler to the network.

        Parameters:
        ----------
            username (str): The username to authenticate with.
            password (str): The password to authenticate with.

        Returns:
        -------
            int : callback id
        r   c                    s   |    d S r   )_continue_with_auth)r8   passwordusernamer	   r
   rH      s   z+Network.add_auth_handler.<locals>._callback)rU   )r   r^   r]   rK   rH   r	   r\   r
   add_auth_handler   s   zNetwork.add_auth_handlerc                 C   s   d}|  || dS )zRemove an authentication handler from the network.

        Parameters:
        ----------
            callback_id (int): The callback id to remove.
        r   N)rY   )r   rL   rK   r	   r	   r
   remove_auth_handler   s   zNetwork.remove_auth_handlerr   NN)r   r   r   rQ   rR   r   r0   r7   rM   rU   rY   rZ   r_   r`   r	   r	   r	   r
   r   !   s,    

'&r   c                   @   sL   e Zd ZdZ								ddefddZdd Zddd	Zdd
dZdS )rD   z*Represents an intercepted network request.Nr?   c                 C   s@   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	d S r   )
r?   r@   rA   r:   rB   r;   rC   methodr=   r>   )r   r?   r@   rA   r:   rB   r;   rC   rb   r=   r>   r	   r	   r
   r     s   
zRequest.__init__c                 C   s0   | j stdd| j i}| jjtd| dS )zFail this request.Request not found.r8   znetwork.failRequestNr@   
ValueErrorr?   r"   r+   r   )r   r   r	   r	   r
   fail_request   s   
zRequest.fail_requestc                 C   s   | j stdd| j i}|dur||d< |dur||d< |dur$||d< |dur,||d< |dur4||d< | jjtd	| dS )
z)Continue after intercepting this request.rc   r8   Nbodyrb   r;   r:   r>   r   rd   )r   rg   rb   r;   r:   r>   r   r	   r	   r
   r   )  s   
zRequest.continue_requestc                 C   sP   i }| j |d< |r|sd|d< nd|d< d||d|d< | jjtd| d	S )
ay  Continue with authentication.

        Parameters:
        ----------
            request (Request): The request to continue with.
            username (str): The username to authenticate with.
            password (str): The password to authenticate with.

        Notes:
        -----
            If username or password is None, it attempts auth with no credentials
        r8   defaultactionprovideCredentialsr]   )typer^   r]   credentialsr   N)r@   r?   r"   r+   r   )r   r^   r]   r   r	   r	   r
   r[   =  s   

zRequest._continue_with_auth)NNNNNNNN)NNNNNra   )	r   r   r   r   r   r   rf   r   r[   r	   r	   r	   r
   rD     s     

	rD   N)%selenium.webdriver.common.bidi.commonr   r   r   rD   r	   r	   r	   r
   <module>   s
    e