o
    i3                     @   s  d dl Z d dlZd dlZd dlZd dlmZ dejv sJ d dlZd dlm	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 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d0d1e fd2d3ed4fd5d6e!d7dd8fd9d:e!d;fd<d=e!d>fd?d@e!dAefgZ"dBdC Z#dDdE Z$dFdG Z%dHdI Z&dJdK Z'dLdM Z(dNdO Z)dPdQ Z*dS )R    N)	find_spec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                   @   s,   e Zd ZdZdZdZdZdZdZdZ	dZ
dS )OptionsNF)__name__
__module____qualname__modeaddresslog_tolog_to_stderrtargettarget_kindwait_for_clientadapter_access_token r   r   M/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/debugpy/server/cli.pyr   *   s    r   noneT)qt
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_range9   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_exitH   s   r-   c                 C   s   t tj td d S )Nr   )r%   debugpy__version__r'   r)   r*   r   r   r   print_version_and_exitM   s   
r0   c                 C      | S Nr   xr   r   r   <lambda>R       r5   c                        fdd}|S )Nc                    s    t |}tt| d S r2   )nextsetattroptions)argr,   valuer   varnamer   r   doS   s   zset_arg.<locals>.dor   )r>   r   r?   r   r=   r   set_argR   s   r@   c                    r7   )Nc                    s   t t  d S r2   )r9   r:   )r;   r,   r<   r>   r   r   r?   [   s   zset_const.<locals>.dor   )r>   r<   r?   r   rA   r   	set_constZ   s   rB   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)r:   r   r   r8   	partitionint	Exceptionr   )r;   r,   r<   hostsepportr   r   r   r?   b   s$   
zset_address.<locals>.dor   )r   r?   r   rK   r   set_addressa   s   rL   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lenr8   r:   configr   r   typeboollowerrG   r   )r;   r,   prefixnamer<   expected_typer   r   r   
set_configy   s    
rX   c                 C   r1   r2   r   r3   r   r   r   r5      r6   Fc                    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)r:   r   r8   
isinstancebytesdecoder'   getfilesystemencodingUnicodeDecodeErrorlocalegetpreferredencodingr   )r;   r,   r   r_   kindr   
positionalr   r   r?      s   

zset_target.<locals>.dor   )rb   r   rc   r?   r   ra   r   
set_target   s   rd   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$   )rc   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      )rP   r'   argv)r<   r   r   r   consume_argv   s   
ro   c               
   C   s~  t  } t }	 zt|}W n ty   tdt w |}|ds$d}tD ]\}}}t	d| d |r7 nq&td| || v rHtd| | 
| z||| W n) tyi   |d usaJ td	|| ty} } z	td
|||d }~ww tjd urnqtjd u rtdtjd urtjdkrtdtjdkrtjrtdtjd usJ tjd usJ tjd usJ d S )NTzmissing target: -rg   z^(z)$zunrecognized switch zduplicate switch z{0}: missing {1}zinvalid {0} {1}: {2}z(either --listen or --connect is requiredrf   z)--adapter-access-token requires --connectrk   z(--pid does not support --wait-for-client)setro   r8   StopIterationr   TARGETrO   switchesrematchaddr   rG   r:   r   r   r   r   r   r   )seenr,   r;   r+   patternplaceholderactionexcr   r   r   
parse_argv   sP   



r}   c                 C   s~   | t jd< tdt j ttj tjdkrt	tj
 ntjdkr-tjtj
tjd ntttjtjr=t  d S d S )Nr   zsys.argv after patching: {0!r}re   rf   )access_token)r'   rn   r   debugr.   	configurer:   rQ   r   re   r   rf   r   AssertionErrorreprr   )argv_0r   r   r   start_debugging   s   


r   c                  C   sj   t j} t|  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__)run_name)r:   r   r   ospathisfiledirnamer'   insertr   r   describe_environmentinforunpyrun_path)r   dirr   r   r   run_file
  s   
r   c                  C   s   t jdtd t jd } zttj}|d ur|j} W n t	y*   t
d Y nw t|  t
d t
dtj ztj}W n tyW   t
d tjtjdd Y d S w |tjdd	 d S )
Nr   rg   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)	alter_sys)
alter_argv)r'   r   r   strrn   r   r:   r   originrG   r   swallow_exceptionr   r   r   r   _run_module_as_mainAttributeErrorwarning
run_module)r   specrun_module_as_mainr   r   r   r     s(   




r   c                  C   sZ   t jdtd ttjtdtd} ttd t	d t
dtj t| i  d S )Nr   rg   z<string>execri   r   zRunning code:

{0})r'   r   r   r   compiler:   r   r   r   r   r   eval)rj   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 )NrY   )list	bytearrayencode)r   r   r   r   r5   Q  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);
rg   
)
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.)r:   r   r   r   r   r   r   r.   server__file__existsr   r   r   r   r   jsondumpsreplacer   rq   joinr   r'   appendadd_code_to_python_processrun_python_coderF   getenvrG   reraise_exception)rk   r   r   r   python_codepydevd_attach_to_process_pathr   r   r   r   attach_to_pidM  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tttdt
j }|  W d S  ty } ztjd|jdd W Y d }~d S d }~ww )	Nz
Error: r#   rl   z=sys.argv before parsing: {0!r}
         after parsing:  {1!r})r$   rh   rj   rk   z%Debuggee exited via SystemExit: {0!r}r   )level)r   r'   rn   r}   rG   r%   r   r&   r(   r)   r:   r   r.   r   r   ensure_loggingr   r   r   r   r   r   r   
SystemExitr   rj   )original_argvr|   runr   r   r   main  sB   

"
r   )+r   r   ru   r'   importlib.utilr   modulesr   _pydevd_bundler   r   r.   debugpy.commonr   debugpy.serverr   rs   r   r/   r&   objectr   r:   rQ   r"   rF   rk   r-   r0   r@   rB   rL   rX   rd   rt   ro   r}   r   r   r   r   r   r   r   r   r   r   <module>   sf   
/!E