
    *dz                        d dl mZ d dlZd dlZd dlZd dlZd dlmZmZmZ d dl	m
Z
mZmZmZ d dlmZmZmZ  G d dej                  Zd Zd	 ZdS )
    )annotationsN)adaptercommonlauncher)jsonlog	messagingsockets)
componentsserverssessionsc                      e Zd ZU dZej        j        Zded<   	  G d dej                  Z G d dej                  Z	 fdZ
d	 Zd
 Zed             Zed             Zed             Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Z fdZd Z xZS )Clientz+Handles the client side of a debug session.zset[servers.Connection]known_subprocessesc                       e Zd ZdddddddZdS )Client.CapabilitiesF)supportsVariableTypesupportsVariablePagingsupportsRunInTerminalRequestsupportsMemoryReferences#supportsArgsCanBeInterpretedByShellsupportsStartDebuggingRequestN)__name__
__module____qualname__
PROPERTIES     7lib/python3.11/site-packages/debugpy/adapter/clients.pyCapabilitiesr      s,        $)&+,1(-38-2
 



r   r    c                  <    e Zd Zddd ej        dd          dZdS )Client.Expectationszen-USTpathoptional)localelinesStartAt1columnsStartAt1
pathFormatN)r   r   r   r   enumr   r   r   r   Expectationsr"   $   s7        !##$)FT:::	
 



r   r+   c                   |dk    rt          j        d|            d| _        t          j                                        }t          t          j        d          xt          _
        }t          j        |j                   t          t          j        d          xt          _        }t          j        |j                   n&d| _        t          j                            |          }t!          j                    5 }t%                                          ||           d | _        	 d| _        	 d | _        	 d| _        	 d | _        	 g | _        	 d| _        t7                      | _        | |_        |                                 d d d            n# 1 swxY w Y   | j                            ddd	d
t@          j!        id           | j                            dddd
t@          j!        id           d S )Nstdioz"Connecting to client over stdio...TrwFoutput	telemetryptvsdpackageVersion)categoryr0   datadebugpy)"r   infousing_stdior	   JsonIOStream
from_stdioopenosdevnullsysstdinatexitregisterclosestdoutfrom_socketr   Sessionsuper__init__	client_idhas_startedstart_requestrestart_requested_initialize_request_deferred_events_forward_terminate_requestsetr   clientchannel
send_eventr6   __version__)selfsockstreamr?   rC   session	__class__s         r   rG   zClient.__init__,   s/   7??H94@@@#D+6688F !%RZ 5 55CIOEK((("&rz3"7"77CJOFL))))$D+77==F "	7GGWf---!DNV$D "&D &+D" (,D$ %'D! /4D+&)eeD#!GNE"	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	 "	L 	'!)7+>? 	
 	
 	
 	'#)7+>? 	
 	
 	
 	
 	
s   :BFFFc                    | j         0| j                             |           t          j        d           d S | j        j                            |           d S )NzPropagation deferred.)rM   appendr   debugrP   rQ   	propagaterT   events     r   propagate_after_startzClient.propagate_after_startr   sZ    
  ,!((///I-.....K))%00000r   c                   t          j        d| j                   | j        D ]H}t          j        d|                                           | j        j                            |           It          j        d| j                   d | _        d S )Nz%Propagating deferred events to {0}...zPropagating deferred {0}z&All deferred events propagated to {0}.)r   r[   rP   rM   describerQ   r\   r7   r]   s     r   _propagate_deferred_eventsz!Client._propagate_deferred_events}   s    	94;GGG* 	1 	1EI0%..2B2BCCCK))%000094;GGG $r   c                V    | j         r!| j         j                            |           d S d S N)serverrQ   r\   r]   s     r   r^   zClient.event   s5    ; 	1K))%00000	1 	1r   c                @    | j         j                            |          S rd   )re   rQ   delegaterT   requests     r   ri   zClient.request   s    {"++G444r   c                t   | j         |                    d           |dd          | _        |                     | |          | _        |                     | |          | _        || _         dddddd	d
ddddddddg}i ddddddddddddddddddddddddddddddddd dd|dd!S )"NzSession is already initializedclientID raisedzRaised ExceptionsFz'Break whenever any exception is raised.)filterlabeldefaultdescriptionuncaughtzUncaught ExceptionsTz=Break when the process is exiting due to unhandled exception.userUnhandledzUser Uncaught Exceptionsz/Break when exception escapes into library code.supportsCompletionsRequestsupportsConditionalBreakpoints supportsConfigurationDoneRequestsupportsDebuggerProperties supportsDelayedStackTraceLoadingsupportsEvaluateForHoverssupportsExceptionInfoRequestsupportsExceptionOptionssupportsFunctionBreakpoints!supportsHitConditionalBreakpointssupportsLogPointssupportsModulesRequestsupportsSetExpressionsupportsSetVariablesupportsValueFormattingOptionssupportsTerminateRequestsupportsGotoTargetsRequest)supportsClipboardContextexceptionBreakpointFilterssupportsStepInTargetsRequest)rL   
isnt_validrH   r    capabilitiesr+   expectations)rT   ri   exception_breakpoint_filterss      r   initialize_requestzClient.initialize_request   s   #/$$%EFFF R00 --dG<< --dG<<#*  #, H	  %.^	  *3 P	 (
$*
($
,d
 /
 )$	

 /
 (
 +D
 '
 *4
 0
  
 %d
 $T
 "4
 -d
  '!
" )$#
$ )-*F,0)
 
 
 	
r   c                @     t           j        j         fd            }|S )Nc           	        |                     dd          sJ | j        |                    d          | j        s| j        r|                    d           |dt          j        d                    | j        _        | j        j        rt          j
                     t           |dt          j        t                                        x| j        _        } | |           |j        d S | j        rn| j                            | j                   d | _        |j        }| j        rr|                    d          d	k    }d
|v r't'          |          }t)          |d
hz
            |d<   d}|                    d          rt'          |          }|d= d}||d<   	 | j        j                            |j        |           n# t0          j        $ rc |                    i            | j                            d                    | j        t          j        |j                                       Y d S t0          j        $ r}|                    |           Y d }~nd }~ww xY w| j        j        r9|| _         d| _!        |                    i            | "                                 d S | j        #                    d           || _         t0          j$        S )NlaunchattachzSession is not initialized yetzSession is already startednoDebugFdebugOptionsconsoleinternalConsoleRedirectOutputTredirectOutputisOutputRedirected){0} disconnected before responding to {1}initialized)%
is_requestrL   r   r   re   r   rp   rW   no_debugr   dont_wait_for_first_connectionrO   arraystrdebug_optionsresponse
initialize	argumentsgetdictlistrQ   ri   commandr	   NoMoreMessagesrespondfinalizeformatreprMessageHandlingErrorr\   rJ   rI   rb   rR   NO_RESPONSE)rT   ri   r   r   redirectingexcfs         r   handlez-Client._start_message_handler.<locals>.handle   s   %%h99999'/(()IJJJ} G G(()EFFF$+GIt|E7J7J$K$KDL!|$ 968889<
388: : DL& AdG+{ *+&&t'?@@@+/(#-	= B"+--	":":>O"OK'=88 %)OO	48)-=,>>5 5	.1 '+ }}%566 +$(OO	%&67&*6AI23
+K'//KKKK /   
 OOB'''L))CJJ K Igo66    FF 5 + + +MM'********+ |$ %,"#' ###//111 L##M222!(D((s    %G A.I$7I$II$)r   	Componentmessage_handler)r   r   s   ` r   _start_message_handlerzClient._start_message_handler   s:    			-J	) J	) J	) J	) 
.	-J	)X r   c                   ddl m} | j        j        dk    s t	          t          j                              r                    d          t           dt          j
        t                                        fd}d}|v rdv r                    d	          ndv rd} |t          j
        t          d
d                    }t	          |          st          j        g}| dt          j
        t          d                    z  }|dd          j        d<   |j        d<    dt          d
          }|dk    r|d         }dx}x}}	dv r dt                    }|g}
|j        d<   dv r dt                    }d|g}
|j        d<   dv rG dt          j
        t          d
d                    }	dd                    |	          g}
dj        d<   t	          d |||	fD                       }|dk    r                    d          |dk    r                    d           dt          j        ddd d
                    } d!t          j        d"                    } d#t          j
        t          d
$                    }|
|z  }
t	          |          dk    ot'          j        d#         t                    }|r=| j        d%         s                    d&          |dk    r                    d'           d(t          d
          }|dk    r)|dk    rd n t*          j                            |          pd }t1           |d)d*                    }|r%t          j        d+k    r                    d,           d-t          d
          }|r|d.k    | _         d/t*          j                            t6          j                            } d0d1          }	 t          j        |           n.# t<          $ r!}                    d2| j        |          d }~ww xY w|                    | j        |g|||
|||||           d S )3Nr   )	launchers   z"attach" expectedr   c                4   | d                                          r|d                                         sJ  | t          d          }|dk    rd }|v rA|du r;                    dt	          j        |           t	          j        |                    d}|S )Nr   Tr$   r   Fz9{0}:false and "debugOptions":[{1}] are mutually exclusive)islowerisupperboolr   r   r   )	prop_name	flag_namevaluer   ri   s      r   property_or_debug_optionz7Client.launch_request.<locals>.property_or_debug_option(  s    Q<''))Dil.B.B.D.DDDDGItd;;;E{{M))E>>!,,S	),,	),,  
 Lr   python
pythonPathz2"pythonPath" is not valid if "python" is specifiedT)r   )	vectorizesize
pythonArgs)r   debugLauncherPythonr$   r   programprocessNamemodulez-mcode)r   z-c
c                    g | ]
}|d k    |S )r   r   ).0xs     r   
<listcomp>z)Client.launch_request.<locals>.<listcomp>^  s    IIIb1r   z7either "program", "module", or "code" must be specifiedz6"program", "module", and "code" are mutually exclusiver   r   integratedTerminalexternalTerminalconsoleTitlezPython Debug Consoleargs)r   r   z8Shell expansion in "args" is not supported by the clientzJShell expansion in "args" is not available for "console":"internalConsole"cwdsudoSudowin32z("sudo":true is not supported on Windows.onTerminateKeyboardInterruptdebugLauncherPathdebugAdapterHost	127.0.0.1z4{0} couldn't create listener socket for servers: {1}) debugpy.adapterr   rW   idlenr   connectionscant_handlerO   r   r   r   r   r>   
executabler   joinr*   rp   
isinstancer   r<   r#   dirnamer   platformrN   r   __file__serve	Exceptionspawn_debuggee)rT   ri   r   r   
python_keyr   launcher_pythonr   r   r   r   num_targetsr   console_titletarget_argsshell_expand_argsr   r   on_terminatelauncher_pathadapter_hostr   r   s    `                    @r   launch_requestzClient.launch_request  s^   ------<?a3w':'<'<#=#=%%&9:::GGNDJsOODDEE
	 	 	 	 	 	( 
  w&&((H   ' W$$%JTZt$%O%O%OPP6{{ 	&n%F'',
3T(B(B(BCCC*0*,'&,(#!'"7tLLLb  $QiO"$$$&4gi--G9D/6Gm,wWXs++F&>D/5Gm,W764:cT#M#M#MNND$))D//*D/3Gm,IIw&=IIIJJ!$$I   A$$H   'I!$"	  
 
  =S0T0TUU gfdj&E&E&EFF  ,,q0 
Zf%s6
 6
  	$%JK ((N   +++((`   geS4000"99 "R--$$bgoog.F.F.N$C,,VV<<== 	RCLG++%%&PQQQw}cDAAA 	R.:>Q.QD+ 3RW__XEV5W5WXXw1;??	M,'''' 	 	 	%%F  	 	  L	
 	
 	
 	
 	
s   7P 
P7P22P7c                |     j         j        r|                    d           |dt          d          } |dt          d          } |dt
          d          } |dt
          d          } |dt          t          fd           |d	t          d           |d
t          d          }|r|dk     _        |dk    s|dk    r6|dk    r|                    d          |dk    r|                    d          |dk    rQ|dk    r|                    d          dk    r|                    d          dk    r|                    d          dk    rdk    r|                    d          |dk    r{t          j	                    r|                    d           |dd          } |dt                    }d t          _         |dd           _        t          j        ||          \  }}nGt          j	                    st          j                     t          j                                        \  }}dk    rt!          t                    s4	 t	                    n## t"          $ r |                    d          w xY w |dt%          j        t                              } fd}	 t          j        ||           nU# t"          $ rH}	t+          j                      j                             dt          |	                     Y d }	~	d S d }	~	ww xY wt0          j        }
fd}n%dk    rd }|dk    rt0          j        nd }
nfd}d}
 j                            d||d            t          j         j         ||
          }|ddk    rD|                    i             j                             d!                                         d S |                    |
rd"nd#          	 |                      j                    d S # tB          $ r |                    d$|           Y d S w xY w)%Nz'"noDebug" is not supported for "attach"hostTr$   portlistenconnect	processIdsubProcessIdr   r   r   z1"listen" and "host"/"port" are mutually exclusivez2"connect" and "host"/"port" are mutually exclusivez-"listen" and "connect" are mutually exclusivez/"listen" and "processId" are mutually exclusivez2"listen" and "subProcessId" are mutually exclusivez5"processId" and "subProcessId" are mutually exclusivez7Multiple concurrent "listen" sessions are not supportedr   restartFz$"processId" must be parseable as intdebugpyArgsc                D    j                             d| |d           d S )Nr0   )r4   r0   )rQ   rR   )r4   r0   rT   s     r   	on_outputz(Client.attach_request.<locals>.on_output	  s:    ''$,"(     r   z$Error when trying to attach to PID:
c                    | j         k    S rd   pid)connr  s    r   <lambda>z'Client.attach_request.<locals>.<lambda>  s    C r   c                    dS )NTr   )r  s    r   r  z'Client.attach_request.<locals>.<lambda>  s    D r   c                    | j         k    S rd   r   )r  sub_pids    r   r  z'Client.attach_request.<locals>.<lambda>"  s    DH$7 r   r   debugpyWaitingForServerr   r   z+No known subprocess with "subProcessId":{0}z.Timed out waiting for debug server to connect.z3There is no debug server connected to this adapter.z{0} is already being debugged.)"rW   r   r   r   intr   r   rN   r   
is_servingr   access_tokenrK   r   listenergetsocknamer   r   r   r   injectr   swallow_exceptionr   r   PROCESS_SPAWN_TIMEOUTrQ   rR   wait_for_connectionr   r   r   attach_to_session
ValueError)rT   ri   r   r   r   r   r   debugpy_argsr   etimeoutpredr  r  r  s   `            @@r   attach_requestzClient.attach_request  s/   <  	P$$%NOOOwvsT222wvsT2224$777')TD999gkC:==='.#===w}dTBBB 	R.:>Q.QD+2::||((G   "}}((H   R<<"}}((C   byy((E   "}}((H   "99B$$G   R<<!## ((M   6&+..D6&#&&D#'G %,WY%>%>D" tT22JD$$%''   )5577JD$6 "99c3'' UUc((CC  U U U!,,-STTTU"7=$*S//BBL    sL)<<<<   %'''%%%ADQI    2G////DD"}}((:@B,,&66D7777 9DRV;W;WXXX*4<wGG<"}}
 ###%%AHHQQ   %% ODDN  	H""4<00000 	H 	H 	H @$GGGGGG	Hs6   I, , J8K 
L!=LL!;P  P;:P;c           	     j   | j         | j        r|                    d           	 d| _        	 | j        j                            |          }|                    |           n# t          j        $ r |                    i            | j                             i            | j	        
                    d                    | j        t          j        |j                                       Y | j         j        0| j                             i            |                                  d S d S w xY wnC# t          j        $ r1}| j                             t%          |                     Y d }~nd }~ww xY w| j         j        .| j                             i            |                                  n@# | j         j        /| j                             i            |                                  w w xY wt'          j                    D ]3}|j        *|j        | j	        j        k    r|                     |           4d S )NzX"configurationDone" is only allowed during handling of a "launch" or an "attach" requestTr   )rJ   rI   r   re   rQ   rg   r   r	   r   rW   r   r   r   r   r   r   rb   r   r   r   r   ppidr  notify_of_subprocess)rT   ri   resultr   r  s        r   configurationDone_requestz Client.configurationDone_requestA  sg   %)9%)  
	2#D(,55g>>  '''' +   
 ###"**2...%%?FF	'/22     !*2"**2...//11111 32' (- 	5 	5 	5**3s8844444444	5 !*2"**2...//111 !*2"**2...//1111 3 ')) 	0 	0D{"tyDL4D'D'D))$///	0 	0sS   D. A" D. "BD**D. )D**D. -F, .E.='E)$F, )E..F, ,=G)c                    | j         j                                      }fd}|                    |           t          j        S )Nc                <                         | j                   d S rd   )r   body)r   ri   s    r   handle_responsez0Client.evaluate_request.<locals>.handle_responsen  s    OOHM*****r   )re   rQ   r\   on_responser	   r   )rT   ri   propagated_requestr!  s    `  r   evaluate_requestzClient.evaluate_requestj  sT    ![0::7CC	+ 	+ 	+ 	+ 	+ 	&&777$$r   c                T    d|j         d<   | j        j                            |          S )N*threadId)r   re   rQ   rg   rh   s     r   pause_requestzClient.pause_requestu  s(    (+*%{"++G444r   c                    d|j         d<   	 | j        j                            |          S # t          j        $ r ddicY S w xY w)Nr&  r'  allThreadsContinuedT)r   re   rQ   rg   r	   r   rh   s     r   continue_requestzClient.continue_requestz  s^    (+*%	1;&//888' 	1 	1 	1 *40000		1s   + A Ac                    ddt           j        ii}| j        rF	 | j        j                            d          }|                    |           n# t          $ r Y nw xY w|S )Nr6   versionpydevdSystemInfo)r6   rS   re   rQ   ri   updater   )rT   ri   r  pydevd_infos       r   debugpySystemInfo_requestz Client.debugpySystemInfo_request  s~    i)<=>; 	++"k199:LMM k****      s   A 
AAc                    d| _         | j        r| j        j                            |          S | j                            dd           i S )NFzclient requested "terminate"T)terminate_debuggee)rK   rN   re   rQ   rg   rW   r   rh   s     r   terminate_requestzClient.terminate_request  sT     "'* 	9 ;&//888<QUVVV	r   c                   d| _          |dt          d          }|dk    rd }| j                            d|           |                    i            | j        r{t          j                     t          j	        d|            t          j
                    D ]A}	 |j                                         # t          $ r t          j                     Y <w xY wd S d S )NFterminateDebuggeeTr$   r   zclient requested "disconnect"zB{0} disconnected from stdio; closing remaining server connections.)rK   r   rW   r   r   r8   r   stop_servingr   r7   r   rQ   rB   r   r  )rT   ri   r3  r  s       r   disconnect_requestzClient.disconnect_request  s	    "'$W%8$NNN##!%=?QRRR 		,  """HY[_```+-- , ,,L&&((((  , , ,)+++++,		, 		,
, ,s   B22CCc                H    t                                                       d S rd   )rF   
disconnect)rT   rX   s    r   r:  zClient.disconnect  s    r   c                2   t          j        d| |           | j        5  | j        	|| j        v r	 d d d            d S d| j        j        v r(t          j        d| j                   	 d d d            d S t          j        d| |           t          | j        j                  }| j                            |           | j        	                                 d d d            n# 1 swxY w Y   dD ]}|
                    |d            d                    |j                  |d<   |j        |d<   d	D ]}|
                    |d            |
                    d
d           }|
                    dd           }d|vri |d<   d
|d         vr||nd|d         d
<   d|d         vr)|t                                          \  }}||d         d<   | j        d         r | j                            dd|d           d S d|d<   | j                            d|           d S )Nz{1} is a subprocess of {0}.r   zrNot reporting subprocess for {0}, because the parent process was attached to using "processId" rather than "port".zNotifying {0} about {1}.)r   r   preLaunchTaskpostDebugTaskri   r   zSubprocess {0}namer   )r   r   r   r   r   r   r   r   startDebuggingr   )ri   configurationri   debugpyAttach)r   r7   rW   rJ   r   r   warningr   addnotify_changedpopr   r  r  r  r   rQ   ri   rR   )rT   r  r   keyr   r   _s          r   r  zClient.notify_of_subprocess  s   .d;;;\ 	* 	*!)TT5L-L-L	* 	* 	* 	* 	* 	* 	* 	* d0:::LL  
 	* 	* 	* 	* 	* 	* 	* 	* H/t<<<*455D#''---L'')))	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*  a 	  	 CHHS$'..tx88V#x^6 	  	 CHHS$xx%%xx%%D   DOi((.2.>ddKDOF#i((|"..004&*DOF#<= 	;L  !1#!%4 4     
 'DOL##OT:::::s   C!)C!3A"C!!C%(C%)r   r   r   __doc__r   r   r   __annotations__r    r+   rG   r_   rb   r^   ri   r   r   r   r  r  r$  r(  r+  r1  r4  r8  r:  r  __classcell__)rX   s   @r   r   r      sh        55 *:O////
 
 
 
 
z. 
 
 

 
 
 
 
z. 
 
 
D
 D
 D
 D
 D
L	1 	1 	1% % % 1 1 _1
 5 5 _5 3
 3
 _3
rN N N` O
 O
 O
b PH PH PHd &0 &0 _&0P % % _% 5 5 _5 	1 	1 _	1   _   _" , , _,,    -; -; -; -; -; -; -;r   r   c                l    t          j        dt          | |          at                                          S )Nr   )r
   r   r   r  r  r  s     r   r   r     s)    }XvtT::H!!!r   c                     	 t                                            d S # t          $ r t          j        d           Y d S w xY w)NrB  )level)r  rB   r   r   r  r   r   r   r7  r7    sU    / / / /I......./s    A A )
__future__r   r@   r<   r>   r6   r   r   r   debugpy.commonr   r   r	   r
   r   r   r   r   r   r   r   r7  r   r   r   <module>rP     s   
 # " " " " "  				 



  - - - - - - - - - - 8 8 8 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9\; \; \; \; \;Z! \; \; \;~" " "/ / / / /r   