a
    
a@                     @   s   d dl mZmZmZmZ 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mZmZ d dlmZmZ G dd dejZdd	 ZdS )
    )absolute_importdivisionprint_functionunicode_literalsN)adaptercommon)compatfmt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                    sV   |> |j rJ tt| || d | _d | _| |_ W d    n1 sH0    Y  d S N)launchersuperr   __init__pid	exit_code)selfsessionstream	__class__ 8lib/python3.9/site-packages/debugpy/adapter/launchers.pyr      s    
zLauncher.__init__c                 C   s   |dt | _| j| d S )NZsystemProcessId)intr   clientpropagate_after_startr   Z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y,   Y n0 | j  d S )NZexitedr#   )r   channelZ
send_eventr   	Exceptioncloser    r   r   r   terminated_event3   s
    zLauncher.terminated_eventc              	   C   sX   | j > | jd u r6z| jd W n ty4   Y n0 W d    n1 sJ0    Y  d S )NZ	terminate)r   r   r%   requestr&   )r   r   r   r   terminate_debuggee;   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
                    s  |	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 n2 t
y } z|d
|W Y d }~n
d }~0 0 z  \}}|dkr|n
td||}|
t|dg7 }
|
|7 }
tjd ur
ttj|td< tjjddhkr6tdtjj|td< |dkrtd|
 zt|
D ]R\}}zt||
|< W n4 ty } z|d||W Y d }~n
d }~0 0 qXtj|
|t ttj t|  tjtj tjd W n2 t
y } z|d|W Y d }~n
d }~0 0 ntd j!j"#d ddd}|| ||
|d}|d urb||d< zj!j$%d| W n2 t&j'y } z|(| W Y d }~n
d }~0 0 j)fd d!|	rd nt*j+d"s|d#zj,j$%|j-| W n2 t&j'y  } z|(| W Y d }~n
d }~0 0 j)fd$d!t*j+d"sF|d%jr\W  .  d S tj/d&d! t*j+d"}|d u r|d'|0 W  .  n
 .  0 d S )(Nsudoz-EZportZadapterAccessTokenc                    s"       tj| }t| d S r   )r'   r   ZJsonIOStreamZfrom_socketr   )Zsockr   listenerr   r   r   on_launcher_connected\   s    z-spawn_debuggee.<locals>.on_launcher_connectedr      )Zbacklogz5{0} couldn't create listener socket for launcher: {1}z	127.0.0.1z{0}:{1}z--ZDEBUGPY_LOG_DIRZwarningerror ZDEBUGPY_LOG_STDERRZinternalConsolez{0} spawning launcher: {1!r}z(Invalid command line argument {0!j}: {1})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argsr9   r8   ZrunInTerminalc                      s    j S r   )r   r   r   r   r   <lambda>       z spawn_debuggee.<locals>.<lambda>)Ztimeoutz)Timed out waiting for launcher to connectc                      s    j jd uS r   )r   r   r   r@   r   r   rA      rB   z3Timed out waiting for "process" event from launcherc                 S   s   dS )NTr   )connr   r   r   rA      rB   z'Timed out waiting for debuggee to spawn)1dict	argumentsZno_debugr   r3   Zgetsocknamer   Zaccess_tokenr   Zserver&   Zcant_handler	   strr
   Zlog_dirr   Zfilename_strr<   Zlevelsjoininfo	enumerateUnicodeEncodeError
subprocessPopenlistosenvironitemssysr:   r;   r   ZcapabilitiesZrequirer%   r)   r   ZMessageHandlingErrorZ	propagateZwait_forr   ZPROCESS_SPAWN_TIMEOUTr   Zcommandr'   Zwait_for_connectionZattach_to_session)r   Zstart_requestZpythonZlauncher_pathZadapter_hostr?   r8   ZconsoleZconsole_titler1   Zcmdliner9   rE   _r4   excZlauncher_hostZlauncher_portZlauncher_addriargZkindsZrequest_argsrC   r   r2   r   spawn_debuggeeD   s    






$

 

 


rV   )Z
__future__r   r   r   r   rN   rK   rQ   Zdebugpyr   r   Zdebugpy.commonr   r	   r
   r   r   Zdebugpy.adapterr   r   r/   r   rV   r   r   r   r   <module>   s   4