B
    pjÆ`ò  ã               @   sŽ   d Z ddlZddlZddlZddlmZ ddlmZ ej 	ej 	ej
¡¡ZG dd„ deƒZdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )zH
code to initialize the remote side of a gateway once the io is created
é    Né   )Úgateway_base)ÚGatewayc               @   s   e Zd ZdS )ÚHostNotFoundN)Ú__name__Ú
__module__Ú__qualname__© r	   r	   ú8lib/python3.7/site-packages/execnet/gateway_bootstrap.pyr      s   r   c             C   sT   t | ddt dt dddd|j d|j ƒ	 |  d	¡}|d
 d¡ksPtt|ƒƒ‚d S )Nz
import syszif %r not in sys.path:z    sys.path.insert(0, %r)zDfrom execnet.gateway_base import serve, init_popen_io, get_execmodelzsys.stdout.write('1')zsys.stdout.flush()zexecmodel = get_execmodel(%r)z/serve(init_popen_io(execmodel), id='%s-worker')r   Ú1Úascii)ÚsendexecÚ	importdirÚ	execmodelÚidÚreadÚencodeÚAssertionErrorÚrepr)ÚioÚspecÚsr	   r	   r
   Úbootstrap_import   s    
r   c             C   sx   yDt | t t¡d|j ddd|j ƒ |  d¡}|d d¡ksBt‚W n. t	k
rr   |  
¡ }|dkrnt| jƒ‚Y nX d S )	Nzexecmodel = get_execmodel(%r)zio = init_popen_io(execmodel)zio.write('1'.encode('ascii'))zserve(io, id='%s-worker')r   r   r   éÿ   )r   ÚinspectÚ	getsourcer   r   r   r   r   r   ÚEOFErrorÚwaitr   Zremoteaddress)r   r   r   Úretr	   r	   r
   Úbootstrap_exec'   s    
r   c             C   sV   ddl m} t| t t¡dt |¡dddddd	| ƒ
 |  d
¡}|d d¡ksRt‚d S )Nr   )ÚSocketIOzimport socketztry: execmodelzexcept NameError:z&   execmodel = get_execmodel('thread')z$io = SocketIO(clientsock, execmodel)zio.write('1'.encode('ascii'))zserve(io, id='%s-worker')r   r   r   )	Zexecnet.gateway_socketr    r   r   r   r   r   r   r   )r   r   r    r   r	   r	   r
   Úbootstrap_socket9   s    

r!   c             G   s&   d  |¡}|  t|ƒd  d¡¡ d S )NÚ
r   )ÚjoinÚwriter   r   )r   ZsourcesÚsourcer	   r	   r
   r   M   s    
r   c             C   s<   | j | j }}|jr8|js8|jjdkr8|  d¡ ¡ |j_dS )z
    fix for jython 2.5.1
    Nz$import os; channel.send(os.getpid()))r   Ú_ioÚpopenÚviaÚpidZremote_execZreceive)Úgwr   r   r	   r	   r
   Úfix_pid_for_jython_popenR   s
    r+   c             C   sr   |j r*|js|jrt| |ƒ q\t| |ƒ n2|js6|jrBt| |ƒ n|jrTt| |ƒ nt	dƒ‚t
| |ƒ}t|ƒ |S )Nz$unknown gateway type, cant bootstrap)r'   r(   Zpythonr   r   ZsshZvagrant_sshZsocketr!   Ú
ValueErrorr   r+   )r   r   r*   r	   r	   r
   Ú	bootstrap`   s    
r-   )Ú__doc__r   ÚosZexecnetÚ r   Zgatewayr   ÚpathÚdirnameÚ__file__r   Ú	Exceptionr   r   r   r!   r   r+   r-   r	   r	   r	   r
   Ú<module>   s   