o
    i                     @   s  d dl 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adefd	d
Z	dedef dee
 fddZdedef dee
 fddZdee
ef dedef dee
ef fddZdedef dee
 fddZdedef dee
ef dee
 fddZdddZdS )    N)Any)Callable)Dict)List)SetFreturnc                  C   s   ddl m}  | dS )Nr   )__version__z3.)prompt_toolkitr   
startswith)ptk_version r   E/home/ubuntu/.local/lib/python3.10/site-packages/questionary/utils.pyis_prompt_toolkit_3   s   
r   func.c                 C   s   t | }dd |j D S )z<Return all parameter names of ``func`` with a default value.c                 S   s0   g | ]\}}|j tjjus|jtjjkr|qS r   )defaultinspect	ParameteremptykindPOSITIONAL_OR_KEYWORD.0kvr   r   r   
<listcomp>   s    z%default_values_of.<locals>.<listcomp>)r   	signature
parametersitems)r   r   r   r   r   default_values_of   s   
r   c                 C   s   t t| j S )z4Return the parameter names of the function ``func``.)listr   r   r   keys)r   r   r   r   arguments_of   s   r!   kwargsc                    s   t |  fdd|  D S )zReturns only the kwargs which can be used by a function.

    Args:
        kwargs: All available kwargs.
        func: The function which should be called.

    Returns:
        Subset of kwargs which are accepted by ``func``.
    c                    s   i | ]\}}| v r||qS r   r   r   possible_argumentsr   r   
<dictcomp>0   s    zused_kwargs.<locals>.<dictcomp>)r!   r   )r"   r   r   r#   r   used_kwargs#   s   r&   c                 C   s*   t | }t| }|r|dt|  }|S )zDReturn all arguments of a function that do not have a default value.N)r   r!   len)r   defaultsargsr   r   r   required_arguments3   s
   r*   argdictc                 C   s   t t| t |  S )z3Return all arguments that are missing to call func.)setr*   r    )r   r+   r   r   r   missing_arguments=   s   r-   c                     s"   t  sddl} | j  dadS )zxConfigure prompt toolkit to use the asyncio event loop.

    Needs to be async, so we use the right event loop in py 3.5r   NT)r   r	   	eventloopuse_asyncio_event_loopACTIVATED_ASYNC_MODE)ptr   r   r   "activate_prompt_toolkit_async_modeB   s
   
r2   )r   N)r   typingr   r   r   r   r   r0   boolr   strr   r!   r&   r*   r-   r2   r   r   r   r   <module>   s    .*
