o
    à›hÞA  ã                   @   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   úHc:\Users\shubh\Videos\agent\nova\Lib\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.1éÿÿÿÿr   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 |sŸtjd urŸd 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__)Úrun_name)rA   r   r–   r�   ÚpathÚisfileÚdirnamer-   Úinsertr	   r‘   Údescribe_environmentÚinfoÚrunpyÚ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)Ú	alter_sys)Ú
alter_argv)r-   rš   r�   r   rt   rA   r   r   ÚoriginrN   r	   Zswallow_exceptionr–   rž   rŸ   r    Ú_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