
    :!f                         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ej                        Zd Zy)    N)adaptercommon)log	messagingsockets)
componentsserversc                        e Zd ZdZej
                  j                  Z fdZed        Zed        Z	ed        Z
ed        Zd Z xZS )Launcherz-Handles the launcher side of a debug session.c                     |5  |j                   rJ t        | 	  ||       d | _        	 d | _        	 | |_         d d d        y # 1 sw Y   y xY wN)launchersuper__init__pid	exit_code)selfsessionstream	__class__s      ;/usr/lib/python3/dist-packages/debugpy/adapter/launchers.pyr   zLauncher.__init__   sU     
	$''''GWf-DHR!DN4#G
	$ 
	$ 
	$s   6AAc                 ^     |dt               | _        | j                  j                  |       y )NsystemProcessId)intr   clientpropagate_after_startr   events     r   process_eventzLauncher.process_event    s#    *C0))%0    c                 :    | j                   j                  |       y r   )r   r   r   s     r   output_eventzLauncher.output_event%   s    ))%0r    c                 (     |dt               | _        y )NexitCode)r   r   r   s     r   exited_eventzLauncher.exited_event)   s    z3/r    c                     	 | j                   j                  j                  dd| j                  i       | j                  j                          y # t        $ r Y &w xY w)Nexitedr$   )r   channel
send_eventr   	Exceptioncloser   s     r   terminated_eventzLauncher.terminated_event1   sP    	KK**8j$..5QR 	  		s   2A 	AAc                     | j                   5  | j                  	 | j                  j                  d       d d d        y # t        $ r Y w xY w# 1 sw Y   y xY w)N	terminate)r   r   r(   requestr*   )r   s    r   terminate_debuggeezLauncher.terminate_debuggee9   sX    \\ 	~~%LL((5	 	 ! 		 	s&   A?	AA
AAA)__name__
__module____qualname____doc__r   	Componentmessage_handlerr   r   r"   r%   r,   r0   __classcell__)r   s   @r   r   r      sq    7 **::O$ 1 1 1 1 0 0  r    r   c                     |
rddgng }||z  }||gz  }i }t        |j                        } j                  s7t        j                  j                         \  }|d<   t        j                  |d<    fd}	 t        j                  d||d      	 j                         \  }}|d
k(  r|n| d| }|t        |      dgz  }||z  }t        j                  t        j                  |t        d      <   t        j                  j                   ddhk7  r>t        dj#                  t        j                  j                               |t        d      <   |dk(  rt        j$                  d |       	 t'        j(                  ||t        t+        t,        j.                  j1                               t+        |j1                               z         t2        j4                  t2        j6                  t2        j                         nt        j$                  d         j8                  j:                  j=                  d       ddd}||   |	||d}|||d<   |rd|d<   	  j8                  j>                  jA                  d|        jI                   fd |
rd ntJ        jL                  !      s|j                  d"      	  jN                  j>                  jQ                  |jR                  |        jI                   fd#tJ        jL                  !      s|j                  d$       j                  r	 jU                          y t        jV                   d% tJ        jL                  !      }||j                  d&      |jY                          jU                          y # t        $ r}|j                  d	 |      d }~ww xY w# t        $ r}|j                  d|      d }~ww xY w# tB        jD                  $ r}|jG                  |       Y d }~d }~ww xY w# tB        jD                  $ r}|jG                  |       Y d }~Rd }~ww xY w# jU                          w xY w)'Nsudoz-EportadapterAccessTokenc                 |    j                          t        j                  j                  |       }t	        |       y r   )r+   r   JsonIOStreamfrom_socketr   )sockr   listenerr   s     r   on_launcher_connectedz-spawn_debuggee.<locals>.on_launcher_connected[   s-    ''33D9&!r    r      )backlogz5{0} couldn't create listener socket for launcher: {1}z	127.0.0.1:z--DEBUGPY_LOG_DIRwarningerror DEBUGPY_LOG_STDERRinternalConsolez{0} spawning launcher: {1!r})cwdenvstdinstdoutstderrzFailed to spawn launcher: {0}z2{0} spawning launcher via "runInTerminal" request.supportsRunInTerminalRequest
integratedexternal)integratedTerminalexternalTerminal)kindtitleargsrL   rK   TargsCanBeInterpretedByShellrunInTerminalc                       j                   S r   )r   r   s   r   <lambda>z spawn_debuggee.<locals>.<lambda>   s    G$$ r    )timeoutz)Timed out waiting for launcher to connectc                  4     j                   j                  d uS r   )r   r   r[   s   r   r\   z spawn_debuggee.<locals>.<lambda>   s    G$$((4 r    z3Timed out waiting for "process" event from launcherc                      y)NT )conns    r   r\   z spawn_debuggee.<locals>.<lambda>   s    r    z'Timed out waiting for debuggee to spawn)-dict	argumentsno_debugr	   r@   getsocknamer   access_tokenr   server*   cant_handlestrr   log_dirrO   levelsjoininfo
subprocessPopenlistosenvironitemssysrM   rN   r   capabilitiesrequirer(   send_requestr   MessageHandlingError	propagatewait_forr   PROCESS_SPAWN_TIMEOUTr   r/   commandr+   wait_for_connectionattach_to_session)r   start_requestpythonlauncher_pathadapter_hostrW   shell_expand_argsrK   consoleconsole_titler9   cmdlinerL   rc   _rA   exclauncher_hostlauncher_portlauncher_addrkindsrequest_argsra   r@   s   `                      @r   spawn_debuggeer   B   s    !%vtn"GvGG
C],,-I&//;;=9V*1*>*>	&'"

==-|Q
V'/';';'=$} + !?!M?3 	
 	C&--4;;"*-++C%&'::G 44-0#**:K:K1L-MC()*''HH3WgFV   T"**"2"2"45SYY[8IIJ)):::: HHI7SNN''//0NO+7ZXEg&	L &)U# >B:;- &&33O\R $!Tv'C'C   
  ++,WXX	)$$,,]-B-BIN 400   
  ++E   	 **&0L0L
 <++,UVVw' 	w  
''CWc
 	

D  V#//0OQTUUV( 11 -m,,- -- 	)MM-((	)0 	s   7N CP> -BN7 :AP> &O :9P> 40P $AP> 7AP> 	N4N//N47	O OOP> P	-P>P> P		P> P;P60P> 6P;;P> >Q)rq   rn   rt   debugpyr   r   debugpy.commonr   r   r   debugpy.adapterr   r	   r5   r   r   r`   r    r   <module>r      s5   
 
  
 # 2 2 /1z## 1h}r    