U
    /e                     @   s`  d dl Z d dlZd dlZd dlmZ d dlmZ d dlZ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 d	lmZ zd dlZW n ek
r   dZY nX edk	reej\ZZd
ZeekreZeek reZeejeef ejdkre e   G dd dZ G dd de eZ!G dd de eZ"ej#dd Z$ej#dd Z%dS )    N)no_type_check)	MagicMock)Session)IOLoop)	ZMQStream)IPythonKernel)Kernel)ZMQInteractiveShelli   ntc                   @   sd   e Zd Ze Zdd Zdd Zdd Ze	dd Z
e	d	d
 Zdd Zdd Zdd Zdd ZdS )KernelMixinc                 C   s   t   | _}|t j| _|t j| _t | _	| jg| _
g | _dD ]N}|t j}t|}|| j | j
| | j| t| | d| qFd S )N)shellcontrol_stream)zmqContextcontextsocketZPUBiopub_socketZROUTERZstdin_socketr   sessiontest_socketstest_streamsr   Zon_send_on_sendappendsetattr)selfr   namer   stream r   </tmp/pip-unpacked-wheel-g43y689f/ipykernel/tests/conftest.py_initialize/   s    
zKernelMixin._initializec                    s   i S Nr   )r   msgr   r   r   do_debug_request?   s    zKernelMixin.do_debug_requestc                 C   s6   | j D ]}|  q| jD ]}|  q| j  d S r    )r   closer   r   destroy)r   r   r   r   r   r   r$   B   s
    



zKernelMixin.destroyc                    s4   | j ||}| |I d H  | j  |  I d H S r    )	_prep_msgZdispatch_shellZshell_streamflush_wait_for_msgr   argskwargsZmsg_listr   r   r   test_shell_messageI   s    
zKernelMixin.test_shell_messagec                    s4   | j ||}| |I d H  | j  |  I d H S r    )r%   Zprocess_controlZcontrol_streamr&   r'   r(   r   r   r   test_control_messageP   s    
z KernelMixin.test_control_messagec                 O   s
   || _ d S r    )_reply)r   r!   r)   r*   r   r   r   r   W   s    zKernelMixin._on_sendc                 O   s.   d | _ | jj||}| j|}dd |D S )Nc                 S   s   g | ]}t |qS r   )r   Message).0mr   r   r   
<listcomp>^   s     z)KernelMixin._prep_msg.<locals>.<listcomp>)r-   r   r!   	serialize)r   r)   r*   Zraw_msgr!   r   r   r   r%   Z   s    zKernelMixin._prep_msgc                    s6   | j stdI d H  q | j| j \}}| j|S )Ng?)r-   asynciosleepr   Zfeed_identitiesZdeserialize)r   _r!   r   r   r   r'   `   s    zKernelMixin._wait_for_msgc                 C   s   d S r    r   )r   r   r   r   _send_interrupt_childrenf   s    z$KernelMixin._send_interrupt_childrenN)__name__
__module____qualname__logging	getLoggerlogr   r"   r$   r   r+   r,   r   r%   r'   r6   r   r   r   r   r   ,   s   

r   c                       sF   e Zd ZdZdZdZdZddddZdZ fd	d
Z	dddZ
  ZS )
MockKerneltestz1.0zno-opz0.1z
text/plainz.txt)r   mimetypeZfile_extensionztest kernelc                    s"   |    t | _t j|| d S r    )r   r   r   super__init__r   r)   r*   	__class__r   r   rA   w   s    zMockKernel.__init__TNFc                 C   s.   |sd|d}|  | jd| d| jg i dS )Nstdout)r   textr   ok)statusexecution_countpayloaduser_expressions)Zsend_responser   rI   )r   codeZsilentZstore_historyrK   Zallow_stdinZstream_contentr   r   r   
do_execute|   s    
zMockKernel.do_execute)TNF)r7   r8   r9   implementationimplementation_versionlanguageZlanguage_versionZlanguage_infoZbannerrA   rM   __classcell__r   r   rC   r   r=   k   s        r=   c                       s   e Zd Z fddZ  ZS )MockIPyKernelc                    s   |    t j|| d S r    )r   r@   rA   rB   rC   r   r   rA      s    zMockIPyKernel.__init__)r7   r8   r9   rA   rQ   r   r   rC   r   rR      s   rR   c                  C  s"   t  } t | _| V  |   d S r    )r=   r   currentio_loopr$   kernelr   r   r   rV      s    
rV   c                  C  s*   t  } t | _| V  |   t  d S r    )rR   r   rS   rT   r$   r	   Zclear_instancerU   r   r   r   ipkernel   s
    
rW   )&r3   r:   ostypingr   Zunittest.mockr   Zpytestr   Zjupyter_client.sessionr   Ztornado.ioloopr   Zzmq.eventloop.zmqstreamr   Zipykernel.ipkernelr   Zipykernel.kernelbaser   Zipykernel.zmqshellr	   resourceImportErrorZ	getrlimitZRLIMIT_NOFILEZsofthardZDEFAULT_SOFTZ	setrlimitr   Zset_event_loop_policyZWindowsSelectorEventLoopPolicyr   r=   rR   ZfixturerV   rW   r   r   r   r   <module>   sB   
?!
