o
    [Zh?                     @   sP  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	ejeZG d
d deZe Zddde_dd Zeed dZdd Z dd Z!dd fddZ"dd Z#dd Z$dd Z%dd d fd!e&fd"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d0de#d1dfd2d3e%fd4d5e"d6fd7d8e'd9dd:fd;d<e'd=fd>d?e'd@fdAdBe'dCefgZ(dDdE Z)dFe*fdGdHZ+dIdJ Z,dKe-fdLdMZ.dNe-fdOdPZ/e- d fdFe*dNe-dQe-fdRdSZ0dTdU Z1dVdW Z2dXdY Z3dZd[ Z4d\d] Z5d^d_ Z6dS )`    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                   @   sz   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< dS )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    r   r   I/var/www/html/lang_env/lib/python3.10/site-packages/debugpy/server/cli.pyr   ,   s   
 r   noneT)ZqtZ
subProcessc                        fdd}|S )Nc                    sH    | }d ur|k rt dd ur"|kr"t d|S )Nzmust be >= {0}zmust be < {0})
ValueErrorformat)snparserstartstopr   r   parse=   s   zin_range.<locals>.parser   )r$   r%   r&   r'   r   r#   r   in_range<   s   r(   c                 C   s   t ttjd td d S )Nfiler   )printHELPsysstderrexitswitchitr   r   r   print_help_and_exitK   s   r3   c                 C   s   t tj td d S Nr   )r+   debugpy__version__r-   r/   r0   r   r   r   print_version_and_exitP   s   
r7   c                 C      | S Nr   xr   r   r   <lambda>U       r<   c                        fdd}|S )Nc                    s    t |}tt| d S r9   )nextsetattroptions)argr2   valuer$   varnamer   r   doV   s   zset_arg.<locals>.dor   )rE   r$   rF   r   rD   r   set_argU   s   rG   c                    r>   )Nc                    s   t t  d S r9   )r@   rA   )rB   r2   rC   rE   r   r   rF   ^      zset_const.<locals>.dor   )rE   rC   rF   r   rH   r   	set_const]   s   rJ   c                    s    fdd}|S )Nc                    s   t jd ur	tdt|}|d\}}}|sd}|}zt|}W n ty,   d}Y nw d|  kr:dk s?td td t _||ft _d S )Nz---listen and --connect are mutually exclusive:z	127.0.0.1r   i   zinvalid port number)rA   r   r   r?   	partitionr   	Exceptionr   )rB   r2   rC   hostsepportr   r   r   rF   e   s$   
zset_address.<locals>.dor   )r   rF   r   rR   r   set_addressd   s   rS   c                 C   s   d}|  |s	J | t|d  }t|}|tjvr!td|ttj| }z|tu r7ddd|	  }n||}W n t
yL   td||jw |tj|< d S )Nz--configure-zunknown property {0!r}TF)truefalsez{0!r} must be a {1})
startswithlenr?   rA   r   r   r    typeboollowerrN   r   )rB   r2   prefixnamerC   expected_typer   r   r   
set_config|   s    
r^   c                 C   r8   r9   r   r:   r   r   r   r<      r=   Fkindc                    r   )Nc                    s    t _r| nt|}t|trBz	|t }W n& tyA   z|d}W n ty>   dd l	}||
d}Y nw Y nw |t _d S )Nutf-8r   F)rA   r   r?   
isinstancebytesdecoder-   getfilesystemencodingUnicodeDecodeErrorlocalegetpreferredencodingr   )rB   r2   r   rf   r_   r$   
positionalr   r   rF      s   

zset_target.<locals>.dor   )r_   r$   ri   rF   r   rh   r   
set_target   s   rj   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>r*   )ri   z-mz<module>module-cz<code>codez--pidz<pid>pidc                  c   s>    t tjdkrtjd } tjd= | V  t tjdksd S d S )N      )rW   r-   argv)rC   r   r   r   consume_argv   s   
ru   argsc                 c   s@    | t ju rt E d H  d S | r| d }| d= |V  | sd S d S r4   )r-   rt   ru   )rv   rC   r   r   r   consume_args   s   
rw   c                  C   s   t  } t|  t|  tjd u stjdkrtdt tjd u r$tdtjd ur2tjdkr2tdtj	dkr>tj
r>tdtj	d usEJ tjd usLJ d S )Nrm   zmissing target: z(either --listen or --connect is requiredrl   z)--adapter-access-token requires --connectrq   z(--pid does not support --wait-for-client)setparse_args_from_command_lineparse_args_from_environmentrA   r   r   TARGETr   r   r   r   r   seenr   r   r   
parse_args   s   
r~   r}   c                 C   s   t tj|  d S r9   )parse_args_helperr-   rt   r|   r   r   r   ry      rI   ry   seenFromCommandLinec                 C   s4   t jd}|s
d S | }t }t|| |d d S )NZDEBUGPY_EXTRA_ARGVT)osenvirongetsplitrx   r   )r   rv   ZargsListseenFromEnvironmentr   r   r   rz      s   rz   r   c              
   C   s@  t | }	 zt|}W n
 ty   Y d S w |}|dsd}tD ]\}}}	td| d |r2 nq!td| |sE||v rEtd| |rQ||v rQtd| |rX||v rXq|r`|| n|| z|	|| W n) ty   |d usyJ td		|| t
y }
 z	td
	|||
d }
~
ww |stjd urd S q)NT-rm   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})rw   r?   StopIterationrV   switchesrematchr   addr    rN   rA   r   )rv   r   r   ZisFromEnvironmentiteratorrB   r1   patternplaceholderactionexcr   r   r   r      sH   

r   c                 C   s   | t jd< tdt j ttj tj	
dddkrNtjdkr,tjd ur,ttj ntjdkr@tjd ur@tjtjtjd ntttjtjrNt  dtj	d< d S )	Nr   zsys.argv after patching: {0!r}ZDEBUGPY_RUNNINGrU   rT   rk   rl   )Zaccess_token)r-   rt   r	   debugr5   	configurerA   r   r   r   r   r   r   rk   rl   r   AssertionErrorreprr   )argv_0r   r   r   start_debugging5  s   
r   c                  C   sr   t j} t|  | d urtj| rtj| }tjd| nt	
d|  t	d t	d|  tj| dd d S )Nr   zNot a file: {0!r}Pre-launch environment:zRunning file {0!r}__main__)Zrun_name)rA   r   r   r   pathisfiledirnamer-   insertr	   r   describe_environmentinforunpyZrun_path)r   dirr   r   r   run_fileM  s   
r   c                  C   s   t jdtd t jd } ztjd u rd nttj}|d ur"|j} W n t	y1   t
d Y nw t|  t
d t
dtj ztj}W n ty^   t
d tjtjdd Y d S w |tjdd	 d S )
Nr   rm   z*Error determining module path for sys.argvr   zRunning module {0!r}zArunpy._run_module_as_main is missing, falling back to run_module.T)Z	alter_sys)Z
alter_argv)r-   r   r   r   rt   rA   r   r   originrN   r	   Zswallow_exceptionr   r   r   r   Z_run_module_as_mainAttributeErrorwarning
run_module)r   specZrun_module_as_mainr   r   r   r   b  s(   



r   c                  C   sr   t jd ur2tjdtd tt jtdtd} ttd t	d t
dt j t| i  d S td d S )	Nr   rm   z<string>execro   r   zRunning code:

{0}zNo target to run.)rA   r   r-   r   r   r   compiler   r	   r   r   evalerror)rp   r   r   r   run_code  s   

r   c               	   C   sR  t j} td|  dd }tjtjj	}tj
|sJ ||}t jt jt jt jt jd}|t|}d}|ddddj||d	}td
|dd h dt|@ r\J dtjtjtj	d}tj
|spJ tj| zdd l}td|  |j| |dttddd W n ty   td|  Y nw td|  d S )Nz!Attaching to process with PID={0}c                 S   s   | d urt t| dS d S )Nr`   )list	bytearrayencode)r!   r   r   r   r<     s    zattach_to_pid.<locals>.<lambda>)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);
rm   
)
script_dirsetupzCode to be injected: 
{0};z;
>   '"r   r   zOInjected code should not contain any single quotes, double quotes, or newlines.Zpydevd_attach_to_processr   z,Injecting code into process with PID={0} ...TZ DEBUGPY_ATTACH_BY_PID_DEBUG_INFO0)Zconnect_debugger_tracingZshow_debug_infoz#Code injection into PID={0} failed:z&Code injection into PID={0} completed.)rA   r   r	   r   r   r   r   r5   server__file__existsr   r   r   r   r   jsondumpsreplacer    rx   joinr   r-   appendadd_code_to_python_processZrun_python_coder   getenvrN   reraise_exception)rq   r   r   r   Zpython_codeZpydevd_attach_to_process_pathr   r   r   r   attach_to_pid  sT   

r   c               
   C   s  t tj} zt  W n( ty2 } zttttd t| tjd t	d W Y d }~nd }~ww t
jd ur>tt
j t
jrGttj t  ttd| tj zt
jd urkttttdt
j }|  W d S W d S  ty } ztjd|jdd W Y d }~d S d }~ww )	Nz
Error: r)   rr   z=sys.argv before parsing: {0!r}
         after parsing:  {1!r})r*   rn   rp   rq   z%Debuggee exited via SystemExit: {0!r}r   )level)r   r-   rt   r~   rN   r+   r   r,   r.   r/   rA   r   r5   r   r
   Zensure_loggingr	   r   r   r   r   r   r   
SystemExitr   rp   )Zoriginal_argvr   runr   r   r   main  sF   

"

r   )7r   r   r   r-   importlib.utilr   typingr   r   r   r   modulesr   Z_pydevd_bundler   r   r5   Zdebugpy.serverZdebugpy.commonr	   r
   r{   r    r6   r,   objectr   rA   r   r(   r   rq   r3   r7   rG   rJ   rS   r^   r   rj   r   ru   r   rw   r~   rx   ry   rz   r   r   r   r   r   r   r   r   r   r   r   <module>   s   

7!E