o
    tf3                     @   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   [/var/www/html/software/conda/envs/catlas/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_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   
r.   c                 C      | S Nr   xr   r   r   <lambda>R       r3   c                        fdd}|S )Nc                    s    t |}tt| d S r0   )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                    r5   )Nc                    s   t t  d S r0   )r7   r8   )r9   r*   r:   r<   r   r   r=   [   s   zset_const.<locals>.dor   )r<   r:   r=   r   r?   r   	set_constZ   s   r@   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)r8   r   r   r6   	partitionint	Exceptionr   )r9   r*   r:   hostsepportr   r   r   r=   b   s$   
zset_address.<locals>.dor   )r   r=   r   rI   r   set_addressa   s   rJ   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lenr6   r8   configr   r   typeboollowerrE   r   )r9   r*   prefixnamer:   expected_typer   r   r   
set_configy   s    
rV   c                 C   r/   r0   r   r1   r   r   r   r3      r4   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)r8   r   r6   
isinstancebytesdecoder%   getfilesystemencodingUnicodeDecodeErrorlocalegetpreferredencodingr   )r9   r*   r   r]   kindr   
positionalr   r   r=      s   

zset_target.<locals>.dor   )r`   r   ra   r=   r   r_   r   
set_target   s   rb   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"   )ra   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      )rN   r%   argv)r:   r   r   r   consume_argv   s   
rm   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: -re   z^(z)$zunrecognized switch zduplicate switch z{0}: missing {1}zinvalid {0} {1}: {2}z(either --listen or --connect is requiredrd   z)--adapter-access-token requires --connectri   z(--pid does not support --wait-for-client)setrm   r6   StopIterationr   TARGETrM   switchesrematchaddr   rE   r8   r   r   r   r   r   r   )seenr*   r9   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}rc   rd   )Zaccess_token)r%   rl   r   debugr,   	configurer8   rO   r   rc   r   rd   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__)Zrun_name)r8   r   r   ospathisfiledirnamer%   insertr   r|   describe_environmentinforunpyZ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   re   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   strrl   r   r8   r   originrE   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     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   re   z<string>execrg   r   zRunning code:

{0})r%   r   r   r   compiler8   r   r   r   r   r   eval)rh   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 )NrW   )list	bytearrayencode)r   r   r   r   r3   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);
re   
)
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.)r8   r   r   r   r   r   r   r,   server__file__existsr   r   r   r   r   jsondumpsreplacer   ro   joinr   r%   appendadd_code_to_python_processZrun_python_coderD   getenvrE   reraise_exception)ri   r   r   r   Zpython_codeZ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!   rj   z=sys.argv before parsing: {0!r}
         after parsing:  {1!r})r"   rf   rh   ri   z%Debuggee exited via SystemExit: {0!r}r|   )level)r   r%   rl   r{   rE   r#   r   r$   r&   r'   r8   r   r,   r   r   Zensure_loggingr   r   r   r   r   r   r   
SystemExitr   rh   )Zoriginal_argvrz   runr   r   r   main  sB   

"
r   )+r   r   rs   r%   importlib.utilr   modulesr   Z_pydevd_bundler   r   r,   Zdebugpy.commonr   Zdebugpy.serverr   rq   r   r-   r$   objectr   r8   rO   r    rD   ri   r+   r.   r>   r@   rJ   rV   rb   rr   rm   r{   r   r   r   r   r   r   r   r   r   r   <module>   sf   
/!E