
    Xh|                        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y)
    )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y)Client.CapabilitiesF)supportsVariableTypesupportsVariablePagingsupportsRunInTerminalRequestsupportsMemoryReferences#supportsArgsCanBeInterpretedByShellsupportsStartDebuggingRequestN)__name__
__module____qualname__
PROPERTIES     K/var/www/html/myenv/lib/python3.12/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y)Client.Expectationszen-USTpathoptional)localelinesStartAt1columnsStartAt1
pathFormatN)r   r   r   r   enumr   r   r    r!   Expectationsr$   $   s"    !##$))FT:	

r    r-   c                   |dk(  rt        j                  d|        d| _        t        j                  j                         }t        t        j                  d      xt        _
        }t        j                  |j                         t        t        j                  d      xt        _        }t        j                  |j                         n&d| _        t        j                  j                  |      }t!        j"                         5 }t$        | M  ||       d | _        	 d| _        	 d | _        	 d| _        	 d | _        	 g | _        	 d| _        t7               | _        | |_        |j                          d d d        | j<                  j?                  ddd	d
t@        jB                  id       | j<                  j?                  dddd
t@        jB                  id       t!        jD                          y # 1 sw Y   ~xY w)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?HH94@#D++668F !%RZZ 55CIOOEKK("&rzz3"77CJOOFLL)$D++77=F "	7GWf-!DNV$D "&D &+D" (,D$ %'D! /4D+&)eD#!GNE"	L 	'!)7+>+>?	
 	'#)7+>+>?	
 	!m"	 "	s   A.G00G9c                    | j                   1| j                   j                  |       t        j                  d       y | j                  j
                  j                  |       y )NzPropagation deferred.)rO   appendr   debugrR   rS   	propagaterW   events     r!   propagate_after_startzClient.propagate_after_starts   sI    
   ,!!((/II-.KK))%0r    c                F   t        j                  d| j                         | j                  D ]K  }t        j                  d|j	                                | j                  j
                  j                  |       M t        j                  d| j                         d | _        y )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~   su    		94;;G** 	1EII0%..2BCKK))%0	1 	94;;G $r    c                h    | j                   r&| j                   j                  j                  |       y y N)serverrS   r_   r`   s     r!   ra   zClient.event   s&    ;;KK))%0 r    c                L    | j                   j                  j                  |      S rg   )rh   rS   delegaterW   requests     r!   rl   zClient.request   s    {{""++G44r    c                b   | j                   |j                  d       |dd      | _        | j                  | |      | _        | j                  | |      | _        || _         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 R0 --dG< --dG<#*  #, H	 %.^	 *3 P	(
$*
($
,d
 /
 )$	

 /
 (
 +D
 '
 *4
 0
  
 %d
 $T
 "4
 -d
  (!
" '#
$ +/(,*F,0+
 	
r    c                L     t         j                  j                   fd       }|S )Nc           	         |j                  dd      sJ | j                  |j                  d      | j                  s| j                  r|j                  d       |dt        j                  d            | j                  _        | j                  j                  rt        j                          t         |dt        j                  t                          x| j                  _        } | |       |j                  y | j                  r| j                  j!                  | j                         d | _        |j"                  }| j                  r]|j%                  d      d	k(  }d
|v rt'        |      }t)        |d
hz
        |d<   d}|j%                  d      rt'        |      }|d= d}||d<   	 | j                  j*                  j-                  |j.                  |       | j                  j                  r0|| _         d| _!        |j5                  i        | jE                          y | j*                  jG                  d       || _         t0        jH                  S # t0        j2                  $ rf |j5                  i        | j                  j7                  dj9                  | j                  t        j:                  |j.                                     Y y t0        j<                  $ r}|j?                  |       Y d }~d }~ww xY w)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''/(()IJJ}}(()EFF$+It||E7J$KDLL!||$$6689<

38: DLL& dG+{{&&t'?'?@+/(#--	=="+--	":>O"OK'=8 %)O	48)-=,>>5	.1 '+ }}%56$(O	%&67&*6AI23
+KK''//K" ||$$%,"#' #//1 LL##M2!(D(((7 !// 
 OOB'LL))CJJ KK IIgoo6  55 +MM'**+s   /0I A6K=K=!K88K=)r   	Componentmessage_handler)r   r   s   ` r!   _start_message_handlerzClient._start_message_handler   s+    				-	-J	) 
.J	)X r    c                z   ddl m} | j                  j                  dk7  st	        t        j                               rj                  d      t         dt        j                  t                          fd}d}|v rdv rj                  d	      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 rE dt        j                  t        d
d            }	ddj!                  |	      g}
dj                  d<   t	        |||	fD cg c]
  }|dk7  s	| c}      }|dk(  rj                  d      |dk7  rj                  d       dt        j"                  dddd
            } d t        j$                  d!            } d"t        j                  t        d
#            }
|z  }
t	        |      dkD  xr t'        j                  d"   t              }|r6| j(                  d$   sj                  d%      |dk(  rj                  d&       d't        d
      }|dk(  r*|dk(  rd n"t*        j,                  j/                  |      xs d }t1         |d(d)            }|r$t        j2                  d*k(  rj                  d+       d,t        d
      }|r
|d-k(  | _         d.t*        j,                  j/                  t6        j8                              }t;        j<                         } d/|      }	 t        j>                  |        |jB                  | j                  |g|||
|||||       y c c}w # t@        $ r"}j                  d0| j                  |      d }~ww xY w)1Nr   )r      z"attach" expectedr   c                
   | d   j                         r|d   j                         sJ  | t        d      }|dk(  rd }|v r?|du r9j                  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<'')il.B.B.DDDItd;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
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debugAdapterHostz4{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__r
   get_default_localhostserve	Exceptionspawn_debuggee)rW   rl   r   r   
python_keyr   launcher_pythonr   r   r   r   xnum_targetsr   console_titletarget_argsshell_expand_argsr   r   on_terminatelauncher_path	localhostadapter_hostr   r   s    `                      @r!   launch_requestzClient.launch_request  sN   -<<??a3w':':'<#=%%&9::GNDJJsODE
	( 
 w&((H  W$%JTZZt$%OP6{nn%F',

3T(BCC*0*,'&,(#!"7tLb $QiO"$$$&4i-G9D/6Gm,wXs+F&>D/5Gm,W64::cT#MND$))D/*D/3Gm,w&=Ib1IJ!$$I  A$$H  II!$"	
  =S0TU fdjj&EF  ,q0 
Zf%s6
 $$%JK((N  ++((`  eS40"9 "R-$bggoog.F.N$C,VV<=CLLG+%%&PQQ}cDA.:>Q.QD+ 3RWW__XEVEV5WX113	19=	MM,' 	!	  LL	
G Jx  	%%F 	s$    
P
+P
P 	P:P55P:c                     j                   j                  r|j                  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k7  s|dk7  r,|dk7  r|j                  d      |dk7  r|j                  d      |dk7  rB|dk7  r|j                  d      dk7  r|j                  d      dk7  r|j                  d      dk7  rdk7  r|j                  d      t        j                         }|dk7  rnt        j                         r|j                  d       |d|      } |dt              }d t        _         |dd       _        t        j                  ||      \  }}nOt        j                         st        j                  |       t        j                   t        j"                        \  }}dk7  rot%        t              s	 t	               |dt)        j*                  t                    } fd}		 t        j,                  ||	       t4        j6                  }fd}n'dk(  rd }|dk(  rt4        j6                  nd }nfd}d} j8                  j;                  d||d       t        j<                   j                   ||      }|\dk7  r<|j?                  i         j                   j3                  d jA                               y |jC                  |rd!      d"      	 |jE                   j                          y # t&        $ r |j                  d      w xY w# t&        $ rE}
t/        j0                           j                   j3                  dt        |
             Y d }
~
y d }
~
ww xY w# tF        $ r |jC                  d#|       Y y 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 supportedrestartFz$"processId" must be parseable as intdebugpyArgsc                D    j                   j                  d| |d       y )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                     y)NTr   )r  s    r!   r  z'Client.attach_request.<locals>.<lambda>#  s    r    c                "    | j                   k(  S rg   r  )r  sub_pids    r!   r  z'Client.attach_request.<locals>.<lambda>&  s    DHH$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
   r   r   
is_servingr   access_tokenrM   r   get_addresslistenerr   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   r   debugpy_argsr   etimeoutpredr  r  r  s   `             @@r!   attach_requestzClient.attach_request  s   <<  $$%NOOvsT2vsT24$7)TD9kC:=.#=}dTB.:>Q.QD+2:|((G  "}((H  R<"}((C  by((E  "}((H  "9B$$G  113	R<!!#((M  &),D&#&D#'G %,Y%>D" tT2JD$%%'i( ,,W-=-=>JD$6 "9c3'Uc(C #=$**S/BLsL)< 22G/D"}(:@B,&66D7 9DRV;WX**4<<wG<"}
 #%%AHHQ %%  E   O 	H""4<<0q ! U!,,-STTU  %%'%%ADQI T  	H @$G	Hs6   *M* N O *N	O;OOO76O7c           	        | j                   | j                  r|j                  d       	 d| _        	 | j                  j                  j                  |      }|j                  |       	 | j                   j                  ,| j                   j                  i        | j!                          	 t'        j(                         D ]D  }|j                  |j*                  | j                  j,                  k(  s4| j/                  |       F y # t        j                  $ r |j                  i        | j                   j                  i        | j                  j                  dj                  | j                  t        j                  |j                                     Y | j                   j                  ,| j                   j                  i        | j!                          y y w xY w# t        j"                  $ r/}| j                   j                  t%        |             Y d }~d }~ww xY w# | j                   j                  ,| j                   j                  i        | j!                          w w xY w)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_requestE  s   %)9)9)
	2#D(,,55g>  ' !!**2""**2.//1 '') 	0D{{"tyyDLL4D4D'D))$/	03 ++ 
 #""**2.%%?FF		'//2  !!**2""**2.//1 3'  -- 	5**3s844	5 !!**2""**2.//1 3sT   G! %D G! )H& BGG! GG! !H#4$HH& H##H& &AI*c                    | j                   j                  j                        }fd}|j                  |       t        j
                  S )Nc                <    j                  | j                         y rg   )r   body)r   rl   s    r!   handle_responsez0Client.evaluate_request.<locals>.handle_responser  s    OOHMM*r    )rh   rS   r_   on_responser	   r   )rW   rl   propagated_requestr"  s    `  r!   evaluate_requestzClient.evaluate_requestn  s?    ![[00::7C	+ 	&&7$$$r    c                j    d|j                   d<   | j                  j                  j                  |      S )N*threadId)r   rh   rS   rj   rk   s     r!   pause_requestzClient.pause_requesty  s-    (+*%{{""++G44r    c                    d|j                   d<   	 | j                  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~  sT    (+*%	1;;&&//88'' 	1 *400		1s   $6 AAc                    ddt         j                  ii}| j                  r9	 | j                  j                  j	                  d      }|j                  |       |S |S # t        $ r Y |S w xY w)Nr8   versionpydevdSystemInfo)r8   rU   rh   rS   rl   updater   )rW   rl   r  pydevd_infos       r!   debugpySystemInfo_requestz Client.debugpySystemInfo_request  sr    i)<)<=>;;+"kk1199:LM k*v    s   %A 	A)(A)c                    d| _         | j                  r%| j                  j                  j	                  |      S | j
                  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  sP     "'** ;;&&//88<QUV	r    c                2   d| _          |dt        d      }|dk(  rd }| j                  j                  d|       |j	                  i        | j
                  r^t        j                          t        j                  d|        t        j                         D ]  }	 |j                  j                           	 | j                  j                          y # t        $ r t        j                          Y [w xY w# t        $ r t        j                  d	       Y y 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   r4  r  s       r!   disconnect_requestzClient.disconnect_request  s     "'$%8$N#!%=?QR   "HHY[_`++- ,,LL&&(,	3LL  ! ,))+,  	3!!	2	3s$   C6C4 C10C14DDc                "    t         |           y rg   )rH   
disconnect)rW   r[   s    r!   r>  zClient.disconnect  s    r    c           	     *   t         j                  t        j                  t        j                  fD cg c]2  }|.t	        j
                  |      \  }}|||t         j                  ud4 }}}}| j                  j                  dd|i       y c c}}}w )N)r   r   internaldebugpySocketsr
   )r   r  r   r   r
   r  rS   rT   )rW   r  r   r   sockss        r!   rV   zClient.report_sockets  s     %--y/A/A7CSCST	
 	
 #!(!4!4X!>t $G,<,<<	
 	
 	5	
	
s   7Bc                x   t        j                  d| |       | j                  5  | j                  || j                  v r
	 d d d        y d| j                  j
                  v r*t        j                  d| j                         	 d d d        y t        j                  d| |       t        | j                  j
                        }| j                  j                  |       | j                  j                          d d d        dD ]  }j                  |d         dj                  |j                        d<   |j                  |d<   d	D ]  }|j                  |d         |j                  d
d       }|j                  dd       }d|vri |d<   d
|d   vr t        j                         }|xs ||d   d
<   d|d   vr&|t        j                  t               \  }}||d   d<   | j"                  d   r | j$                  j'                  dd|d       y d|d<   | j$                  j)                  d|       y # 1 sw Y   ;xY w)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   startDebuggingr   )rl   configurationrl   debugpyAttach)r   r9   rZ   rL   r   r   r8  r   addnotify_changedpopr   r  r
   r   r  r  r   rS   rl   rT   )rW   r  r!  keyr   r   r   _s           r!   r  zClient.notify_of_subprocess  s'   .d;\\ 	*!!)TT5L5L-L	* 	* d00:::LLL
 	* 	* HH/t<**445D##''-LL'')	*  a 	 CHHS$	  (..txx8V#xx^6 	 CHHS$	  xx%xx%D  DOi(557I&*&7iDOF#i(|!--h74&*DOF#<=LL  !1#!%4 
 'DOLL##OT:Y	* 	*s   H/	9H/A+H//H9)r   r   r   __doc__r   r   r   __annotations__r"   r-   rI   rb   re   ra   rl   r   r   r   r  r  r%  r)  r,  r2  r5  r<  r>  rV   r  __classcell__)r[   s   @r!   r   r      sg   5 **::O//
z.. 

z.. 
E"N	1% 1 1
 5 5 4
 4
tN` P
 P
d QH QHf &0 &0P % % 5 5 	1 	1    " 3 38
$.;r    r   c                    t        j                  dt        | |      at	        j
                          t        j                  t              S )Nr   )r
   r   r   r  r   rV   r  r	  s     r!   r   r     s3    }}XvtT:Hx((r    c                     t         	 t         j                          d a t        j                          y # t        $ r t        j                  d       Y 8w xY w)Nr8  r9  )r  rD   r   r   r  r   rV   r   r    r!   r;  r;    sI    	3NN   	3!!	2	3s   3 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>rV     sG   
 #  	 
  - - 8 8 M My;Z!! y;x)r    