
    Mhb{                        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mZmZ  G d dej                  Zd Zd	 ZdS )
    )annotationsN)adaptercommonlauncher)jsonlog	messagingsockets)clients
components	launchers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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     W/var/www/html/test/jupyter/venv/lib/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           t!          j"                     d S )Nstdioz"Connecting to client over stdio...TrwFoutput	telemetryptvsdpackageVersion)categoryr2   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_eventr8   __version__report_sockets)selfsockstreamrA   rE   session	__class__s         r!   rI   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.)rO   appendr   debugrR   rS   	propagaterW   events     r!   propagate_after_startzClient.propagate_after_starts   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^   rR   rO   describerS   r_   r9   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)serverrS   r_   r`   s     r!   ra   zClient.event   s5    ; 	1K))%00000	1 	1r    c                @    | j         j                            |          S rg   )rh   rS   delegaterW   requests     r!   rl   zClient.request   s    {"++G444r    c                v   | 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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supportsTerminateDebuggeesupportsTerminateRequest)supportsGotoTargetsRequestsupportsClipboardContextexceptionBreakpointFilterssupportsStepInTargetsRequest)rN   
isnt_validrJ   r"   capabilitiesr-   expectations)rW   rl   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_requestrN   r   r   rh   r   rs   rZ   no_debugr   dont_wait_for_first_connectionrQ   arraystrdebug_optionsresponse
initialize	argumentsgetdictlistrS   rl   commandr	   NoMoreMessagesrespondfinalizeformatreprMessageHandlingErrorr_   rL   rK   re   rT   NO_RESPONSE)rW   rl   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        | j        |g|||
|||||           d S )3Nr   )r      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   rl   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   rZ   idlenr   connectionscant_handlerQ   r   r   r   r   r@   
executabler   joinr,   rs   
isinstancer   r>   r%   dirnamer   platformrP   r   __file__serve	Exceptionspawn_debuggee)rW   rl   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 )Nr2   )r6   r2   )rS   rT   )r6   r2   rW   s     r!   	on_outputz(Client.attach_request.<locals>.on_output  s:    ''$,"(     r    z$Error when trying to attach to PID:
c                    | j         k    S rg   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 rg   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.)"rZ   r   r   r   intr   r   rP   r   
is_servingr   access_tokenrM   r   listenergetsocknamer   r   r   r   injectr   swallow_exceptionr   r   PROCESS_SPAWN_TIMEOUTrS   rT   wait_for_connectionr   r   r   attach_to_session
ValueError)rW   rl   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   )rL   rK   r   rh   rS   rj   r   r	   r   rZ   r   r   r   r   r   r   re   r   r   r   r   ppidr  notify_of_subprocess)rW   rl   resultr   r  s        r!   configurationDone_requestz Client.configurationDone_requestC  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 rg   )r   body)r   rl   s    r!   handle_responsez0Client.evaluate_request.<locals>.handle_responsep  s    OOHM*****r    )rh   rS   r_   on_responser	   r   )rW   rl   propagated_requestr$  s    `  r!   evaluate_requestzClient.evaluate_requestl  sT    ![0::7CC	+ 	+ 	+ 	+ 	+ 	&&777$$r    c                T    d|j         d<   | j        j                            |          S )N*threadId)r   rh   rS   rj   rk   s     r!   pause_requestzClient.pause_requestw  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   rh   rS   rj   r	   r   rk   s     r!   continue_requestzClient.continue_request|  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 )Nr8   versionpydevdSystemInfo)r8   rU   rh   rS   rl   updater   )rW   rl   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)rM   rP   rh   rS   rj   rZ   r   rk   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 ]?}	 |j                                         # t          $ r t          j                     Y <w xY w	 | j                                         d S # t          $ r t          j        d	           Y d S w xY w)
NFterminateDebuggeeTr&   r   zclient requested "disconnect"zB{0} disconnected from stdio; closing remaining server connections.warninglevel)rM   r   rZ   r   r   r:   r   stop_servingr   r9   r   rS   rD   r   r  )rW   rl   r6  r  s       r!   disconnect_requestzClient.disconnect_request  sL    "'$W%8$NNN##!%=?QRRR 		,  """HY[_```+-- , ,,L&&((((  , , ,)+++++,	3L      	3 	3 	3!	2222222	3s$   B22CCC1 1DDc                H    t                                                       d S rg   )rH   
disconnect)rW   r[   s    r!   r@  zClient.disconnect  s    r    c                    d t           j        t          j        t          j        fD             }| j                            dd|i           d S )Nc                d    g | ]-}||                                 \  }}|||t          j        ud.S )N)r   r   internal)r  r   r  )r   r  r   r   s       r!   r   z)Client.report_sockets.<locals>.<listcomp>  sY     	
 	
 	
 #!)!5!5!7!7t $G,<<  $##r    debugpySocketsr
   )r   r  r   r   rS   rT   )rW   r
   s     r!   rV   zClient.report_sockets  se    	
 	
 %-y/A7CST	
 	
 	
 	7	
 	
 	
 	
 	
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postDebugTaskrl   r   zSubprocess {0}namer   )r   r   r   r   r   r   r   r   startDebuggingr   )rl   configurationrl   debugpyAttach)r   r9   rZ   rL   r   r   r:  r   addnotify_changedpopr   r  r  r  r   rS   rl   rT   )rW   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-   rI   rb   re   ra   rl   r   r   r   r  r   r'  r+  r.  r4  r7  r>  r@  rV   r  __classcell__)r[   s   @r!   r   r      sw        55 *:O////
 
 
 
 
z. 
 
 

 
 
 
 
z. 
 
 
E" E" E" E" E"N	1 	1 	1% % % 1 1 _1
 5 5 _5 4
 4
 _4
tN N N` O
 O
 O
b PH PH PHd &0 &0 _&0P % % _% 5 5 _5 	1 	1 _	1   _   _" 3 3 _38    
 
 
$-; -; -; -; -; -; -;r    r   c                    t          j        dt          | |          at	          j                     t                                          S )Nr   )r
   r   r   r  r   rV   r  r  s     r!   r   r   
  s8    }XvtT::H!!!r    c                     t           B	 t                                            n%# t          $ r t          j        d           Y nw xY wd a t          j                     d S )Nr:  r;  )r  rD   r   r   r  r   rV   r   r    r!   r=  r=    so    	3NN 	3 	3 	3!	222222	3s   # AA)
__future__r   rB   r>   r@   r8   r   r   r   debugpy.commonr   r   r	   r
   r   r   r   r   r   r   r   r   r   r=  r   r    r!   <module>rX     s  
 # " " " " "  				 



  - - - - - - - - - - 8 8 8 8 8 8 8 8 8 8 8 8 M M M M M M M M M M M M M Mv; v; v; v; v;Z! v; v; v;r" " "    r    