
    Kf<A                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
 dej                  v sJ d dlZd dlmZ d dlZd dlZd dlmZ d dlmZ dZd	j-                  ej.                  e      Z G d
 de      Z e       Zddde_        d Z eed d      Zd Z d Z!d fdZ"d Z#d Z$d Z%d dfde&fdZ'dde fdde!fdd e"d      fd d e#d!d      fd"d# e$d$      fd%d# e$d&      fd'd e#d(d      fd)d*e%fd+d, e"d-      fd.d/ e'd0d1      fd2d3 e'd4      fd5d6 e'd7      fd8d9 e'd:e      fgZ(d; Z)d<e*fd=Z+d> Z,d?e-fd@Z.dAe-fdBZ/ e-       dfd<e*dAe-dCe-fdDZ0dE Z1dF Z2dG Z3dH Z4dI Z5dJ Z6y)K    N)	find_spec)AnyUnionTupleDictpydevd)pydevd_runpy)log)apiz2<filename> | -m <module> | -c <code> | --pid <pid>a0  debugpy {0}
See https://aka.ms/debugpy for documentation.

Usage: debugpy --listen | --connect
               [<host>:]<port>
               [--wait-for-client]
               [--configure-<name> <value>]...
               [--log-to <path>] [--log-to-stderr]
               {1}
               [<arg>]...
c                       e Zd ZU dZdZeeeef   df   e	d<   dZ
dZdZeedf   e	d<   dZeedf   e	d<   dZdZi Zeeef   e	d<   y)OptionsNaddressFtargettarget_kindconfig)__name__
__module____qualname__moder   r   r   strint__annotations__log_tolog_to_stderrr   r   wait_for_clientadapter_access_tokenr   r   r        2lib/python3.12/site-packages/debugpy/server/cli.pyr   r   ,   sp    D,0GU5c?D()0FM#FE#t)#$(KsDy!(OFDcNr   r   noneT)qt
subProcessc                       fd}|S )Nc                      |       }|k  rt        dj                              |k\  rt        dj                              |S )Nzmust be >= {0}zmust be < {0})
ValueErrorformat)snparserstartstops     r   parsezin_range.<locals>.parse=   sV    1IU-44U;<<T	_33D9::r   r   )r)   r*   r+   r,   s   ``` r   in_ranger-   <   s     Lr   c                 l    t        t        t        j                         t        j                  d       y )Nfiler   )printHELPsysstderrexitswitchits     r   print_help_and_exitr9   K   s    	$SZZ HHQKr   c                 `    t        t        j                         t        j                  d       y Nr   )r1   debugpy__version__r3   r5   r6   s     r   print_version_and_exitr>   P   s    	'

HHQKr   c                     | S Nr   xs    r   <lambda>rC   U   s    q r   c                       fd}|S )Nc                 J     t        |            }t        t        |       y r@   )nextsetattroptions)argr8   valuer)   varnames      r   dozset_arg.<locals>.doV   s    tBx %(r   r   )rK   r)   rL   s   `` r   set_argrM   U   s    ) Ir   c                       fd}|S )Nc                 (    t        t               y r@   )rG   rH   )rI   r8   rJ   rK   s     r   rL   zset_const.<locals>.do^   s    %(r   r   )rK   rJ   rL   s   `` r   	set_constrP   ]   s    ) Ir   c                       fd}|S )Nc                 6   t         j                  t        d      t        |      }|j	                  d      \  }}}|sd}|}	 t        |      }d|cxk  rdk  st        d       t        d      t         _        ||ft         _        y # t        $ r d}Y Hw xY w)Nz---listen and --connect are mutually exclusive:z	127.0.0.1r   i   zinvalid port number)rH   r   r%   rF   	partitionr   	Exceptionr   )rI   r8   rJ   hostsepportr   s         r   rL   zset_address.<locals>.doe   s    ??&LMM R//#.c4DD	t9D T#G#233 $233,  	D	s   B
 
BBr   )r   rL   s   ` r   set_addressrZ   d   s    '( Ir   c                    d}| j                  |      sJ | t        |      d  }t        |      }|t        j                  vrt        dj                  |            t        t        j                  |         }	 |t        u rddd|j                            }n ||      }|t        j                  |<   y # t        $ r& t        dj                  ||j                              w xY w)Nz--configure-zunknown property {0!r}TF)truefalsez{0!r} must be a {1})
startswithlenrF   rH   r   r%   r&   typeboollowerrV   r   )rI   r8   prefixnamerJ   expected_types         r   
set_configrf   |   s    F>>&!!!s6{}DHE7>>!188>??-.MUD !E25;;=AE!%(E !GNN4  U.55dM<R<RSTTUs   8'B3 3/C"c                     | S r@   r   rA   s    r   rC   rC      s    A r   Fkindc                       fd}|S )Nc                    t         _         r| n
t        |            }t        |t              r0	 |j                  t        j                               }|t         _        y |t         _        y # t        $ rT 	 |j                  d      }n3# t        $ r' dd l	}|j                  |j                  d            }Y nw xY wY |t         _        y w xY w)Nutf-8r   F)rH   r   rF   
isinstancebytesdecoder3   getfilesystemencodingUnicodeDecodeErrorlocalegetpreferredencodingr   )rI   r8   r   rq   rh   r)   
positionals       r   rL   zset_target.<locals>.do   s    "ztBx8fe$Os'@'@'BC   & OO#]]73F) O!#]]6+F+Fu+MNFO
  Os5   #A. .	C8B
	C
-B:7C9B::C
Cr   )rh   r)   rs   rL   s   ``` r   
set_targetrt      s     $ Ir   z-(\?|h|-help)z-(V|-version)z--log-toz<path>r   z--log-to-stderrr   z--listenz	<address>listenz	--connectconnectz--wait-for-clientr   z--configure-.+z<value>z--adapter-access-tokenz<token>r    z
<filename>r0   )rs   z-mz<module>module-cz<code>codez--pidz<pid>pidc               #      K   t        t        j                        dk\  rFt        j                  d   } t        j                  d= |  t        t        j                        dk\  rEy y w)N      )r_   r3   argv)rJ   s    r   consume_argvr      sE     
chh-1
HHQK chh-1
s   A!A&$A&argsc              #   ~   K   | t         j                  u rt               E d {    y | r| d   }| d= | | ry y 7 wr;   )r3   r   r   )r   rJ   s     r   consume_argsr      s?     >!!GEQK  	"s    =;==c                     t               } t        |        t        |        t        j                  t        j                  dk(  rt        dt        z         t        j                  t        d      t        j                  t        j                  dk7  rt        d      t        j                  dk(  rt        j                  rt        d      t        j                  J t        j                  J y )Nrw   zmissing target: z(either --listen or --connect is requiredrv   z)--adapter-access-token requires --connectr{   z(--pid does not support --wait-for-client)setparse_args_from_command_lineparse_args_from_environmentrH   r   r%   TARGETr   r   r   r   r   seens    r   
parse_argsr      s     5D &% ~~2!5+f455||CDD##/GLLI4MDEEe#(?(?CDD***??&&&r   r   c                 8    t        t        j                  |        y r@   )parse_args_helperr3   r   r   s    r   r   r      s    chh%r   seenFromCommandLinec                     t         j                  j                  d      }|sy |j                         }t	               }t        || |d       y )NDEBUGPY_EXTRA_ARGVT)osenvirongetsplitr   r   )r   r   argsListseenFromEnvironments       r   r   r      s>    ::>>./Dzz|H%h 35H$Or   r   c                 |   t        |       }	 	 t        |      }|}|j                  d      sd}t        D ]$  \  }}}	t        j                  d|z   dz   |      s$ n t        d|z         |s||v rt        d|z         |r||v rt        d|z         |r||v r|r|j                  |       n|j                  |       	  |	||       |st        j                  y # t        $ r Y y w xY w# t        $ r  |J t        dj                  ||            t        $ r!}
t        d	j                  |||
            d }
~
ww xY w)
N-rw   z^(z)$zunrecognized switch z"duplicate switch on command line: z#duplicate switch from environment: z{0}: missing {1}zinvalid {0} {1}: {2})r   rF   StopIterationr^   switchesrematchr%   addr&   rV   rH   r   )r   r   r   isFromEnvironmentiteratorrI   r7   patternplaceholderactionexcs              r   r   r      s{   D!H
	x.C   %F,4 	>(G[&xxw-v6	> 3f<== "f0C&CAFJKKF.A$ABVKLLF.A$A "#''/#''/	V3! "gnn&@Y   		>  	M***/66v{KLL 	V3::6;PSTUU	Vs)   C >	C* 	C'&C'*0D;D66D;c                    | t         j                  d<   t        j                  dt         j                         t	        j
                  t        j                         t        j                  dk(  r4t        j                  $t	        j                  t        j                         nyt        j                  dk(  rDt        j                  4t	        j                  t        j                  t        j                         n"t        t        t        j                              t        j                  rt	        j                          y y )Nr   zsys.argv after patching: {0!r}ru   rv   )access_token)r3   r   r
   debugr<   	configurerH   r   r   r   ru   rv   r   AssertionErrorreprr   )argv_0s    r   start_debuggingr   )  s     CHHQKII.9gnn%||xGOO$?w'		"w'Bg6R6RST',,/00! r   c                     t         j                  } t        |        | _t        j                  j                  |       r@t        j                  j                  |       }t        j                  j                  d|       nt        j                  d|        t        j                  d       t        j                  d|        t        j                  | d       y )Nr   zNot a file: {0!r}Pre-launch environment:zRunning file {0!r}__main__)run_name)rH   r   r   r   pathisfiledirnamer3   insertr
   r   describe_environmentinforunpyrun_path)r   dirs     r   run_filer   >  s    ^^FF bggnnV4ggoof%3		%v.67HH!6*	NN6J/r   c                     t         j                  j                  dt        d             t         j                  d   } 	 t
        j                  d nt        t
        j                        }||j                  } t        |        t        j                  d       t        j                  dt
        j                         	 t        j                   } |t
        j                  d       y # t        $ r t        j                  d       Y w xY w# t"        $ r= t        j$                  d       t        j&                  t
        j                  d	       Y y w xY w)
Nr   rw   z*Error determining module path for sys.argvr   zRunning module {0!r}T)
alter_argvzArunpy._run_module_as_main is missing, falling back to run_module.)	alter_sys)r3   r   r   r   r   rH   r   r   originrV   r
   swallow_exceptionr   r   r   r   _run_module_as_mainAttributeErrorwarning
run_module)r   specrun_module_as_mains      r   r   r   S  s     HHOOAs2w XXa[FL~~-t9W^^3L[[F F67HH#W^^4<"66
 	7>>d;%  LJKL  9WX489s$   9C% <D	 %DD	AEEc                     t         j                  t        j                  j	                  dt        d             t        t         j                  t        d      t        d            } t        t        d             t        j                  d       t        j                  dt         j                         t        | i        y t        j                  d       y )	Nr   rw   z<string>execry   r   zRunning code:

{0}zNo target to run.)rH   r   r3   r   r   r   compiler   r
   r   r   evalerror)rz   s    r   run_coder   t  s    ~~!3r7#w~~s:FDD	"  !:;'8T2		%&r   c                     t         j                  } t        j                  d|        d }t        j
                  j                  t        j                  j                        }t        j
                  j                  |      sJ  ||      }t         j                  t         j                  t         j                  t         j                  t         j                  d} |t!        j"                  |            }d}|j%                  dd      j%                  dd      j'                  ||      }t        j                  d	|j%                  d
d             h dt)        |      z  rJ d       t        j
                  j+                  t        j
                  j                  t,        j                        d      }t        j
                  j                  |      sJ t.        j
                  j1                  |       	 dd l}t        j                  d|        |j5                  | |dt7        t	        j8                  dd                   t        j                  d|        y # t:        $ r t        j<                  d|        Y 8w xY w)Nz!Attaching to process with PID={0}c                 P    | #t        t        | j                  d                  S d S )Nrk   )list	bytearrayencode)r'   s    r   rC   zattach_to_pid.<locals>.<lambda>  s"    Q]tIahhw&789 PT r   )r   r   r   r   r   a9  
import codecs;
import json;
import sys;

decode = lambda s: codecs.utf_8_decode(bytearray(s))[0] if s is not None else None;

script_dir = decode({script_dir});
setup = json.loads(decode({setup}));

sys.path.insert(0, script_dir);
import attach_pid_injected;
del sys.path[0];

attach_pid_injected.attach(setup);
rw   
)
script_dirsetupzCode to be injected: 
{0};z;
>   r   r   "'zOInjected code should not contain any single quotes, double quotes, or newlines.pydevd_attach_to_processr   z,Injecting code into process with PID={0} ...T DEBUGPY_ATTACH_BY_PID_DEBUG_INFO0)connect_debugger_tracingshow_debug_infoz#Code injection into PID={0} failed:z&Code injection into PID={0} completed.)rH   r   r
   r   r   r   r   r<   server__file__existsr   r   r   r   r   jsondumpsreplacer&   r   joinr   r3   appendadd_code_to_python_processrun_python_coder   getenvrV   reraise_exception)r{   r   r   r   python_codepydevd_attach_to_process_pathr   s          r   attach_to_pidr     s   
..CHH0#6TF!8!89J77>>*%%%
#J ??"22.. ' < <E 4::e$%EK" 	D"%	r		:U	3 
 HH);+>+>sE+JK 	[!11YXY  %'GGLL
(*D%! 77>>7888HHOO12J)?E"22%)		*Lc RS	 	3 	
 HH5s;  JCSIJs   1AI I65I6c                  f   t        t        j                        } 	 t                t        j                  #t        j                  t        j                         t        j                  r#t        j                  t        j                         t        j                          t!        j"                  t        d      | t        j                         	 t        j$                  0t&        t(        t*        t,        dt        j$                     } |        y y # t        $ r`}t        t        t              t        d      z   t        |      z   t        j                         t        j                  d       Y d }~Nd }~ww xY w# t.        $ r,}t!        j0                  d|j2                  d       Y d }~y d }~ww xY w)	Nz
Error: r/   r}   z=sys.argv before parsing: {0!r}
         after parsing:  {1!r})r0   rx   rz   r{   z%Debuggee exited via SystemExit: {0!r}r   )level)r   r3   r   r   rV   r1   r   r2   r4   r5   rH   r   r<   r   r   ensure_loggingr
   r   r   r   r   r   r   
SystemExitr   rz   )original_argvr   runs      r   mainr     s,   NM
 ~~!w~~&szz"HHOP
* $ $	
 !!#C E +%  c$i#k**SX5CJJG4  
3SXXW	
 	

s0   
D ?E; 	E8AE33E8;	F0"F++F0)7r   r   r   r3   importlib.utilr   typingr   r   r   r   modulesr   _pydevd_bundler	   r   r<   debugpy.serverdebugpy.commonr
   r   r   r&   r=   r2   objectr   rH   r   r-   r   r{   r9   r>   rM   rP   rZ   rf   r   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s!  
  	 	 
 $ * *
 3;;   1     
>
 F 	 f 	  )d3	 sAt

 ) 0!* #.5 S 8 4GH4JKGH4EFIot4TUK4IJK	4JKI>OQU4VW	J? G<R4ST JvRV4WX	
Jx4HI	Jv4FGJuc4JK-6t ',&s &PS P X[W\pu /D /s /QT /b"*0*<B' B<J!
r   