o
    œhi  ã                   @   st   d Z ddlZddlmZmZ ddlmZ ddlmZ ddl	m
Z
 G dd	„ d	eƒZG d
d„ deƒZG dd„ de
ƒZdS )zf Implements a fully blocking kernel client.

Useful for test suites and blocking terminal interfaces.
é    N)ÚEmptyÚQueue)ÚTypeé   )ÚInProcessChannel)ÚInProcessKernelClientc                       sB   e Zd ZdZ‡ fdd„Zdd„ Zddd	„Zd
d„ Zdd„ Z‡  Z	S )ÚBlockingInProcessChannelzA blocking in-process channel.c                    s   t ƒ j|i |¤Ž tƒ | _dS )zInitialize the channel.N)ÚsuperÚ__init__r   Ú	_in_queue)ÚselfÚargsÚkwds©Ú	__class__© úRc:\Users\shubh\Videos\agent\nova\Lib\site-packages\ipykernel/inprocess/blocking.pyr
      s   z!BlockingInProcessChannel.__init__c                 C   s   | j  |¡ dS )z Call the handlers for a message.N)r   Úput©r   Úmsgr   r   r   Úcall_handlers   s   z&BlockingInProcessChannel.call_handlersTNc                 C   s   |du rd}| j  ||¡S )z-Gets a message if there is one that is ready.Ni€:	 )r   Úget)r   ÚblockÚtimeoutr   r   r   Úget_msg#   s   z BlockingInProcessChannel.get_msgc                 C   s4   g }	 z|  | jdd�¡ W n
 ty   Y |S w q)z*Get all messages that are currently ready.TF)r   )Úappendr   r   )r   Zmsgsr   r   r   Úget_msgs+   s   þýz!BlockingInProcessChannel.get_msgsc                 C   s   | j  ¡  S )z*Is there a message that has been received?)r   Úempty)r   r   r   r   Ú	msg_ready5   s   z"BlockingInProcessChannel.msg_ready)TN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r   Ú__classcell__r   r   r   r   r      s    

r   c                   @   s   e Zd ZdZdd„ ZdS )ÚBlockingInProcessStdInChannelz$A blocking in-process stdin channel.c                 C   sZ   |d d }|dkr+| j jj}|d d }t|dtjd� tj ¡  | j  |ƒ ¡ dS dS )	zfOverridden for the in-process channel.

        This methods simply calls raw_input directly.
        ÚheaderÚmsg_typeZinput_requestÚcontentÚpromptÚ )ÚendÚfileN)ÚclientZkernelZ_sys_raw_inputÚprintÚsysÚ
__stdout__ÚflushÚinput)r   r   r&   Ú
_raw_inputr(   r   r   r   r   =   s   

ûz+BlockingInProcessStdInChannel.call_handlersN)r   r    r!   r"   r   r   r   r   r   r$   :   s    r$   c                   @   s0   e Zd ZdZeeƒZeeƒZeeƒZ	dd„ Z
dS )ÚBlockingInProcessKernelClientz$A blocking in-process kernel client.c                 C   s®   	 |   ¡  z
| jjddd�}W n	 ty   Y n!w |d dkr9z
| jjddd� W n	 ty2   Y nw |  |¡ nq	 z| jjddd�}t|d ƒ W n
 tyU   Y dS w q;)z,Wait for kernel info reply on shell channel.Tr   )r   r   r&   Zkernel_info_replygš™™™™™É?N)Zkernel_infoZshell_channelr   r   Ziopub_channelZ_handle_kernel_info_replyr-   r   r   r   r   Úwait_for_readyS   s0   ÿÿ
ñÿüz,BlockingInProcessKernelClient.wait_for_readyN)r   r    r!   r"   r   r   Zshell_channel_classZiopub_channel_classr$   Zstdin_channel_classr4   r   r   r   r   r3   K   s    r3   )r"   r.   Úqueuer   r   Z	traitletsr   Zchannelsr   r,   r   r   r$   r3   r   r   r   r   Ú<module>   s    #