o
    M,h                     @   s   d dl 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 d dlmZ d dlmZ d d	lmZ G d
d dZdS )    )AnyOptionalUnion)interaction)
KeyActions)KeyInput)PointerActions)PointerInput)WheelActions)
WheelInput)Commandc                   @   s&  e Zd Z				d&dee dee dee deddf
dd	Zd
e	dee
d  fddZedee fddZede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	defddZde	d
e	defddZd
e	defddZd'dd Zd'd!d"Zd#e
eeef ddfd$d%ZdS )(ActionBuilderN   mousewheelkeyboarddurationreturnc                 C   sd   |pt tjd}|pttj}|pttj}|||g| _t|| _	t
||d| _t|| _|| _d S )Nr   )r   )r	   r   POINTER_MOUSEr   KEYr   WHEELdevicesr   _key_actionr   _pointer_actionr
   _wheel_actiondriver)selfr   r   r   r   r    r   |/var/www/www-root/data/www/bot.pdev.uz/venv/lib/python3.10/site-packages/selenium/webdriver/common/actions/action_builder.py__init__    s   


zActionBuilder.__init__name)r   r	   r   c                    s   t t fdd| jdS )a  Get the device with the given name.

        Parameters:
        -----------
        name : str
            The name of the device to get.

        Returns:
        --------
        Optional[Union[WheelInput, PointerInput, KeyInput]] : The device with the given name.
        c                    s   |  kS Nr   )xr    r   r   <lambda>=   s    z/ActionBuilder.get_device_with.<locals>.<lambda>N)nextfilterr   )r   r    r   r#   r   get_device_with1   s   zActionBuilder.get_device_withc                 C      dd | j D S )Nc                 S      g | ]	}t |tr|qS r   )
isinstancer	   .0devicer   r   r   
<listcomp>A       z0ActionBuilder.pointer_inputs.<locals>.<listcomp>r   r   r   r   r   pointer_inputs?      zActionBuilder.pointer_inputsc                 C   r(   )Nc                 S   r)   r   )r*   r   r+   r   r   r   r.   E   r/   z,ActionBuilder.key_inputs.<locals>.<listcomp>r0   r1   r   r   r   
key_inputsC   r3   zActionBuilder.key_inputsc                 C      | j S r!   )r   r1   r   r   r   
key_actionG      zActionBuilder.key_actionc                 C   r5   r!   )r   r1   r   r   r   pointer_actionK   r7   zActionBuilder.pointer_actionc                 C   r5   r!   )r   r1   r   r   r   wheel_actionO   r7   zActionBuilder.wheel_actionc                 C      t |}| | |S )a  Add a new key input device to the action builder.

        Parameters:
        -----------
        name : str
            The name of the key input device.

        Returns:
        --------
        KeyInput : The newly created key input device.

        Example:
        --------
        >>> action_builder = ActionBuilder(driver)
        >>> action_builder.add_key_input(name="keyboard2")
        )r   
_add_inputr   r    	new_inputr   r   r   add_key_inputS      
zActionBuilder.add_key_inputkindc                 C   s   t ||}| | |S )a;  Add a new pointer input device to the action builder.

        Parameters:
        -----------
        kind : str
            The kind of pointer input device.
                - "mouse"
                - "touch"
                - "pen"

        name : str
            The name of the pointer input device.

        Returns:
        --------
        PointerInput : The newly created pointer input device.

        Example:
        --------
        >>> action_builder = ActionBuilder(driver)
        >>> action_builder.add_pointer_input(kind="mouse", name="mouse")
        )r	   r;   )r   r@   r    r=   r   r   r   add_pointer_inputh   s   

zActionBuilder.add_pointer_inputc                 C   r:   )a  Add a new wheel input device to the action builder.

        Parameters:
        -----------
        name : str
            The name of the wheel input device.

        Returns:
        --------
        WheelInput : The newly created wheel input device.

        Example:
        --------
        >>> action_builder = ActionBuilder(driver)
        >>> action_builder.add_wheel_input(name="wheel2")
        )r   r;   r<   r   r   r   add_wheel_input   r?   zActionBuilder.add_wheel_inputc                 C   sL   dg i}| j D ]}| }|d r|d | g |_q| jtj| dS )aP  Performs all stored actions.

        Example:
        --------
        >>> action_builder = ActionBuilder(driver)
        >>> keyboard = action_builder.key_input
        >>> el = driver.find_element(id: "some_id")
        >>> action_builder.click(el).pause(keyboard).pause(keyboard).pause(keyboard).send_keys("keys").perform()
        actionsN)r   encodeappendrC   r   executer   W3C_ACTIONS)r   encr-   encodedr   r   r   perform   s   

zActionBuilder.performc                 C   s   | j tj dS )a  Clears actions that are already stored on the remote end.

        Example:
        --------
        >>> action_builder = ActionBuilder(driver)
        >>> keyboard = action_builder.key_input
        >>> el = driver.find_element(By.ID, "some_id")
        >>> action_builder.click(el).pause(keyboard).pause(keyboard).pause(keyboard).send_keys("keys")
        >>> action_builder.clear_actions()
        N)r   rF   r   W3C_CLEAR_ACTIONSr1   r   r   r   clear_actions   s   zActionBuilder.clear_actionsr=   c                 C   s   | j | dS )zAdd a new input device to the action builder.

        Parameters:
        -----------
        new_input : Union[KeyInput, PointerInput, WheelInput]
            The new input device to add.
        N)r   rE   )r   r=   r   r   r   r;      s   zActionBuilder._add_input)NNNr   )r   N)__name__
__module____qualname__r   r	   r   r   intr   strr   r'   propertylistr2   r4   r   r6   r   r8   r
   r9   r>   rA   rB   rJ   rL   r;   r   r   r   r   r      sB    


 r   N)typingr   r   r   !selenium.webdriver.common.actionsr   -selenium.webdriver.common.actions.key_actionsr   +selenium.webdriver.common.actions.key_inputr   1selenium.webdriver.common.actions.pointer_actionsr   /selenium.webdriver.common.actions.pointer_inputr	   /selenium.webdriver.common.actions.wheel_actionsr
   -selenium.webdriver.common.actions.wheel_inputr   !selenium.webdriver.remote.commandr   r   r   r   r   r   <module>   s   