U
    /e                     @   sj   d dl Z d dlZd dlZd dlmZmZ d dlmZmZm	Z	 d dl
mZmZ G dd dejZdd ZdS )	    N)adaptercommon)log	messagingsockets)
componentsserversc                       s`   e Zd ZdZejjZ fddZedd Zedd Z	edd	 Z
ed
d Zdd Z  ZS )Launcherz-Handles the launcher side of a debug session.c              	      s>   |0 |j rtt || d | _d | _| |_ W 5 Q R X d S N)launcherAssertionErrorsuper__init__pid	exit_code)selfsessionstream	__class__ =/tmp/pip-unpacked-wheel-dg3irmqq/debugpy/adapter/launchers.pyr      s    
zLauncher.__init__c                 C   s   |dt | _| j| d S )NZsystemProcessId)intr   clientpropagate_after_startr   eventr   r   r   process_event    s    zLauncher.process_eventc                 C   s   | j | d S r
   )r   r   r   r   r   r   output_event%   s    zLauncher.output_eventc                 C   s   |dt | _d S )NexitCode)r   r   r   r   r   r   exited_event)   s    zLauncher.exited_eventc                 C   s>   z| j jdd| ji W n tk
r.   Y nX | j  d S )NZexitedr   )r   channelZ
send_eventr   	Exceptioncloser   r   r   r   terminated_event1   s
    zLauncher.terminated_eventc              	   C   sF   | j 6 | jd kr8z| jd W n tk
r6   Y nX W 5 Q R X d S )N	terminate)r   r   r!   requestr"   )r   r   r   r   terminate_debuggee9   s    
zLauncher.terminate_debuggee)__name__
__module____qualname____doc__r   	ComponentZmessage_handlerr   r   r   r    r$   r'   __classcell__r   r   r   r   r	      s   



r	   c              
      sB  |
rddgng }||7 }||g7 }i }t |j}jsRtj \}|d< tj|d<  fdd}ztj	d||dd	 W n0 t
k
r } z|d
|W 5 d }~X Y nX z  \}}|dkr|n| d| }|t|dg7 }||7 }tjd k	rtj|td< tjjddhkr0tdtjj|td< |dkrtd| z:tj||t ttj t|  tjtjtjd W n0 t
k
r } z|d|W 5 d }~X Y nX ntd jjd ddd}|| |	||d}|d k	r||d< |rd|d< zjj !d | W n0 t"j#k
rP } z|$| W 5 d }~X Y nX j%fd!d"|
rjd nt&j'd#s|d$zj(j )|j*| W n0 t"j#k
r } z|$| W 5 d }~X Y nX j%fd%d"t&j'd#s|d&jrW <d S tj+d'd" t&j'd#}|d kr&|d(|, W 5    X d S ))Nsudoz-EportZadapterAccessTokenc                    s"       tj| }t| d S r
   )r#   r   ZJsonIOStreamZfrom_socketr	   )sockr   listenerr   r   r   on_launcher_connected[   s    z-spawn_debuggee.<locals>.on_launcher_connectedr	      )backlogz5{0} couldn't create listener socket for launcher: {1}z	127.0.0.1:z--ZDEBUGPY_LOG_DIRwarningerror ZDEBUGPY_LOG_STDERRZinternalConsolez{0} spawning launcher: {1!r})cwdenvstdinstdoutstderrzFailed to spawn launcher: {0}z2{0} spawning launcher via "runInTerminal" request.ZsupportsRunInTerminalRequestZ
integratedZexternal)ZintegratedTerminalZexternalTerminal)kindtitleargsr;   r:   TZargsCanBeInterpretedByShellZrunInTerminalc                      s    j S r
   )r   r   r   r   r   <lambda>       z spawn_debuggee.<locals>.<lambda>)timeoutz)Timed out waiting for launcher to connectc                      s    j jd k	S r
   )r   r   r   rB   r   r   rC      rD   z3Timed out waiting for "process" event from launcherc                 S   s   dS )NTr   )connr   r   r   rC      rD   z'Timed out waiting for debuggee to spawn)-dict	argumentsZno_debugr   r2   getsocknamer   Zaccess_tokenr   Zserver"   Zcant_handler#   strr   Zlog_dirr>   levelsjoininfo
subprocessPopenlistosenvironitemssysr<   r=   r   Zcapabilitiesrequirer!   send_requestr   ZMessageHandlingError	propagatewait_forr   ZPROCESS_SPAWN_TIMEOUTr   r&   commandZwait_for_connectionZattach_to_session)r   Zstart_requestpythonZlauncher_pathZadapter_hostrA   Zshell_expand_argsr:   consoleZconsole_titler.   Zcmdliner;   rH   _r3   excZlauncher_hostZlauncher_portZlauncher_addrkindsZrequest_argsrF   r   r1   r   spawn_debuggeeB   s    


   
  

 




  

r_   )rQ   rN   rT   Zdebugpyr   r   Zdebugpy.commonr   r   r   Zdebugpy.adapterr   r   r,   r	   r_   r   r   r   r   <module>   s   4