o
    gS                     @   sP  	 d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZ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 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZeejd	 d
sdD ]Zeee ejde = qqdejd	 _dZdBddZ	dCddZdadd Z e d e! Z"e"fddZ#da$da%da&dDddZ'dd Z(dd Z)dd Z*d d! Z+d"d# Z,d$d% Z-d&d' Z.d(d) Z/d*d+ Z0d,Z1d-d. Z2d/d0 Z3G d1d2 d2ej4Z5G d3d4 d4ej6Z7G d5d6 d6e7Z8G d7d8 d8e7Z9G d9d: d:ej:Z;G d;d< d<Z<e=d=kr"d d>l>m'Z' e'd?d@dA e d dS )E    N)autocomplete)calltip)
debugger_r)
debugobj_r)iomenu)rpc)stackviewerzidlelib.runfirstrun)ZsimpledialogZ
messageboxfontZdialogZ
filedialogZcommondialogttkztkinter.Fz	127.0.0.1c                 C   sX   	 d}|d||f 7 }|d u rt ||}| }|r!|d| 7 }|d|j| f 7 }|S )Nz!
Warning (from warnings module):
z  File "%s", line %s
z    %s
z%s: %s
)	linecachegetlinestrip__name__)messagecategoryfilenamelinenolines r   A/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/idlelib/run.pyidle_formatwarning,   s   r   c                 C   sB   	 |d u rt j}z|t| |||| W d S  ty    Y d S w N)sysstderrwriter   OSError)r   r   r   r   filer   r   r   r   idle_showwarning_subproc9   s   
r   c                 C   s<   	 | rt d u rtja tt_d S d S t d urt t_d a d S d S r   )_warnings_showwarningwarningsshowwarningr   )capturer   r   r   capture_warningsI   s   
r$   Tc                 C   s   	 |  d d S )Nupdate)eval)tclr   r   r   handle_tk_eventsY   s   r(   c                 C   s  	 | a z	ttjd }W n   tdtjd Y d S td dgtjd d < tjt	dt
|ffd}d|_|  	 zGtrLzt  W n
 tyK   Y W q8w z
tjjdd	d
}W n tjyb   d }Y nw |r||\}\}}}||i |}tj||f nt  W nD ty   trdaY q8 ty   td     t \}	}
}zt  tj|d f W n   tj|	|
|tjd t  Y nY q8Y q9)Nz/IDLE Subprocess: no IP port passed in sys.argv.r   T Z
SockThread)targetnameargs   皙?)blocktimeoutF)no_exitfuncintr   argvprint
__stderr__r$   	threadingThreadmanage_socket	LOCALHOSTdaemonstartexit_nowexitKeyboardInterruptr   Zrequest_queuegetqueueEmptyZresponse_queueputr(   quitting
SystemExitexc_infoprint_exception	traceback)Zdel_exitfuncportZ
sockthreadrequestseqmethodr.   kwargsZrettypevaluetbr   r   r   maing   sl   

rR   c                 C   s   t dD ]1}t| zt| t}W  qF ty5 } ztd|jd  d tj	d |}W Y d }~qd }~ww tdtj	d t
||  dad S |  d S )N   zIDLE Subprocess: OSError: r/   z, retrying....r*   z8IDLE Subprocess: Connection to IDLE GUI failed, exiting.T)rangetimesleepMyRPCServer	MyHandlerr   r6   r.   r   r7   show_socket_errorr>   Zhandle_request)addressiZservererrZsocket_errorr   r   r   r:      s*   


r:   c                 C   sn   	 dd l }ddlm} | }t| |  |dd|d  d|d  d| j d| j d		|d
 |  d S )Nr   )	showerrorzSubprocess Connection Errorz#IDLE's subprocess can't connect to :r/   z.
Fatal OSError #z: zz.
See the 'Startup failure' section of the IDLE doc, online at
https://docs.python.org/3/library/idle.html#startup-failure)parent)	tkinterZtkinter.messageboxr]   ZTkfix_scalingZwithdrawerrnostrerrorZdestroy)r\   rZ   r`   r]   rootr   r   r   rY      s    rY   c                 C   sr   	 | t tfv r3t }t| t| || W d    n1 s"w   Y  | 	dd d gS t
| |S )N
)AttributeError	NameErrorioStringIO
contextlibredirect_stderrr   __excepthook__getvaluesplitrI   format_exception_only)typexcrQ   r\   r   r   r   get_message_lines   s   rs   c                     sd   dd l } |   t  tj t  \}}}}|\t_t_t_t	  fdd||| d S )Nr   c           	         s    t| |j}|j}|d ur't|vr't|||j td d n|d urC|jsCt|vrCt|||j td d |r^t	|}td d d}t
|| tj| d t| ||}|D ]	}t|d d qfd S )NzF
The above exception was the direct cause of the following exception:
r*   zE
During handling of the above exception, another exception occurred:
z"Traceback (most recent call last):)zrun.pyzrpc.pyzthreading.pyzqueue.pyzdebugger_r.pyzbdb.pyr+   )endr   )addid__context__	__cause__rO   __traceback__r6   __suppress_context__rI   
extract_tbcleanup_traceback
print_listrs   )	rq   rr   rQ   contextcauseZtbeexcludelinesr   Zefile	print_excseenr   r   r      s6   


z"print_exception.<locals>.print_exc)
r   
checkcacheflush_stdoutr   r   rG   	last_type
last_valuelast_tracebackset)r   rq   valrQ   excinfor   r   r   rH      s   rH   c           
      C   s  	 | d d  }| r|D ]}| d d  |r qqq| d= | s	| r7|D ]}| d d  |r0 q2q#q7| d= | s!t| dkrN|d d  | d d < tdtjd tjd j}tt| D ])}| | \}}}}	|dkrjd}|	s{|	dr{|
d	d
||fi }	||||	f| |< qZd S )Nr   r)   z** IDLE Internal Exception: r*   exec?z
-toplevel-z	<pyshell#r   r   )countlenr6   r   r   r   Zobjecttable
rpchandlerrT   
startswithZ
remotecall)
rQ   r   Zorig_tbZrpcfiler   r[   fnZlnZnmr   r   r   r   r|     s@   r|   c                   C   s   d S r   r   r   r   r   r   r   '     r   c                  C   s,   	 t rdd l} |   td td d S )Nr   F)r3   atexit_clearr$   r   r?   )r   r   r   r   r?   *  s   r?   c                 C   st   	 dd l }t| jdd}|dkr6|j| D ]}|jj| |dd}t|d }|dk r5td| |d< qd S d S )	Nr   tkscalinggffffff?T)rd   r-   existssizeg      )	Ztkinter.fontfloatr   callr
   namesZFontr4   round)rd   r`   r   r-   r
   r   r   r   r   ra   9  s   ra   c                 C   s2   | j d ur
| j d nd}|tt| | _ d S )Nz

r+   )__doc__textwrapZfilldedent)ZfuntextZtemr   r   r   fixdocE  s   r      c                      s~   	 t tjfddtdt d t tj fdd t dt dt d	 tt t  t_ t_d S )
Nc                     sX   |rt dz| \}W n ty   t dt|  dw |dks%td |t S )Nz.setrecursionlimit() takes no keyword argumentsz0setrecursionlimit() takes exactly one argument (z given)r   z/recursion limit must be greater or equal than 1)	TypeError
ValueErrorr   __wrapped__RECURSIONLIMIT_DELTA)r.   rN   limit)setrecursionlimitr   r   r   O  s    

z:install_recursionlimit_wrappers.<locals>.setrecursionlimitz#            This IDLE wrapper adds z7 to prevent possible
            uninterruptible loops.c                      s      t S r   )r   r   r   )getrecursionlimitr   r   r   d  s   z:install_recursionlimit_wrappers.<locals>.getrecursionlimitz(            This IDLE wrapper subtracts z# to compensate
            for the z" IDLE adds when setting the limit.)	functoolswrapsr   r   r   r   r   r   r   )r   r   r   install_recursionlimit_wrappersK  s    




r   c                   C   sP   	 t tjdd r$t tjdd r&tjjt_tjjt_tt t  d S d S d S )Nr   )getattrr   r   r   r   r   r   r   r   r   !uninstall_recursionlimit_wrapperss  s   

r   c                   @   s   e Zd Zdd ZdS )rW   c                 C   s   	 z  t y
     ty   dat  Y d S    tj}tt	dd dt
 j d| d|d	|d tjd|d	 tt	d
d |d dat  Y d S )NTz
            z(----------------------------------------zU
            Unhandled exception in user code execution server!'
            Thread: z"
            IDLE Client Address: z
            Request: r*   i)r   r   a  
            *** Unrecoverable, server exiting!

            Users should never see this message; it is likely transient.
            If this recurs, report this with a copy of the message
            and an explanation of how to make it repeat.
            )rF   EOFErrorr>   threadinterrupt_mainr   r7   r6   r   r   r8   current_threadr-   rI   r   rE   )selfrK   Zclient_addresserfr   r   r   handle_error  s:   zMyRPCServer.handle_errorN)r   
__module____qualname__r   r   r   r   r   rW     s    rW   c                   @   sB   e Zd ZdddZedd Zedd Zed	d
 Zdd ZdS )	StdioFileutf-8strictc                 C   s   || _ || _|| _|| _d S r   )shelltags	_encoding_errors)r   r   r   encodingerrorsr   r   r   __init__  s   
zStdioFile.__init__c                 C      | j S r   )r   r   r   r   r   r        zStdioFile.encodingc                 C   r   r   )r   r   r   r   r   r     r   zStdioFile.errorsc                 C   s
   d| j  S )Nz<%s>)r   r   r   r   r   r-     s   
zStdioFile.namec                 C      dS NTr   r   r   r   r   isatty  r   zStdioFile.isattyN)r   r   )	r   r   r   r   propertyr   r   r-   r   r   r   r   r   r     s    



r   c                   @   s   e Zd Zdd Zdd ZdS )StdOutputFilec                 C   r   r   r   r   r   r   r   writable  r   zStdOutputFile.writablec                 C   s<   | j rtdt|| j| j| j| j}| j|| j	S )Nzwrite to closed file)
closedr   strencoder   r   decoder   r   r   )r   r   r   r   r   r     s   zStdOutputFile.writeN)r   r   r   r   r   r   r   r   r   r     s    r   c                   @   s4   e Zd ZdZdd ZdddZdddZd	d
 ZdS )StdInputFiler+   c                 C   r   r   r   r   r   r   r   readable  r   zStdInputFile.readabler)   c                 C   s   | j rtd|d u rd}nt|tstdt|j | j}d| _|dk r5	 | j	 }|s0|S ||7 }q't
||k rM| j	 }|sCqM||7 }t
||k s;||d  | _|d | }|S )Nread from closed filer)   must be int, not r+   r   T)r   r   
isinstancer4   r   rO   r   _line_bufferr   readliner   )r   r   resultr   r   r   r   read  s.   

	
zStdInputFile.readc                 C   s   | j rtd|d u rd}nt|tstdt|j | jp#| j	 }|dk r,t
|}|dd|}|dkr;|d }||d  | _|d | S )Nr   r)   r   r   re   r/   )r   r   r   r4   r   rO   r   r   r   r   r   find)r   r   r   Zeolr   r   r   r     s   
zStdInputFile.readlinec                 C   s   | j   d S r   )r   closer   r   r   r   r        zStdInputFile.closeN)r)   )r   r   r   r   r   r   r   r   r   r   r   r   r     s    

r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rX   c                 C   s   	 t | }| d| | d| _t| jdtjtjt_	t
| jdtjtjt_t
| jdtjdt_tjt_dd l}|j|_tj	| _t  | d| _tjj| d d	d
 d S )Nr   consolestdinstdoutr   backslashreplacer   interpr0   )Zmyseqwait)	Executiveregisterget_remote_proxyr   r   r   r   r   r   r   r   r   r   r   displayhookpydocZ
plainpagerZpagerZ_keep_stdinr   r   
RPCHandlerZgetresponse)r   Z	executiver   r   r   r   handle  s(   zMyHandler.handlec                 C   s   	 t d d S )N
   )rU   rV   r   r   r   r   exithook  s   zMyHandler.exithookc                 C      	 da t  d S r   rE   r   r   r   r   r   r   EOFhook     zMyHandler.EOFhookc                 C   r   r   r   r   r   r   r   decode_interrupthook%  r   zMyHandler.decode_interrupthookN)r   r   r   r   r   r   r   r   r   r   r   rX     s
    rX   c                   @   sN   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dddZ
dS )r   c                 C   s:   || _ tjdu rtj| _t | _t	 | _d S i | _d S )NF)
r   idlelibZtesting__main____dict__localsr   ZCalltipr   ZAutoComplete)r   r   r   r   r   r   .  s   


zExecutive.__init__c              
   C   s0  zd | _ daz
t|| j W dandaw W n} tyR } z1|jr@|jd }t|td tfsGt	dt
| tjd W Y d }~d S W Y d }~d S W Y d }~d S d }~w   t | _ tr_t  tjtju rit  nztj| j   W n   t | _ t  Y | jjd}|r| jj  Y d S Y d S t  d S )NTFr   zSystemExit: r*   z<<toggle-jit-stack-viewer>>)user_exc_infointerruptabler   r   rF   r.   r   rO   r4   r6   r   r   r   rG   rE   r?   
excepthookrm   rH   r   r   Zgetvarr   Zopen_remote_stack_viewerr   )r   codeeobZjitr   r   r   runcode7  s<   
$


zExecutive.runcodec                 C   s   t rt  d S d S r   )r   r   r   r   r   r   r   interrupt_the_serverX  s   zExecutive.interrupt_the_serverc                 C   s   t | j|S r   )r   Zstart_debuggerr   )r   Zgui_adap_oidr   r   r   start_the_debugger\  r   zExecutive.start_the_debuggerc                 C   s   	 | j | d S r   )r   
unregister)r   Zidb_adap_oidr   r   r   stop_the_debugger_  s   zExecutive.stop_the_debuggerc                 C   s   | j |S r   )r   Z	fetch_tip)r   r-   r   r   r   get_the_calltipc  s   zExecutive.get_the_calltipc                 C   s   | j ||S r   )r   Zfetch_completions)r   Zwhatmoder   r   r   get_the_completion_listf  r   z!Executive.get_the_completion_listNc                 C   s   | j r
| j \}}}nd S d }|d ur| j|}|r/|jjd dv r/|j}|r/|jjd dv s"|t_|t_t	
||}t|S )Nr   )r   run)r   r   r   tb_frame	f_globalstb_nextr   r   r   r   ZStackTreeItemr   Zremote_object_tree_item)r   Z	flist_oidrq   r   rQ   flistitemr   r   r   r   i  s   
zExecutive.stackviewerr   )r   r   r   r   r   r   r   r   r   r  r   r   r   r   r   r   ,  s    	!r   r   )rR   zidlelib.idle_test.test_run   )	verbosityr   )NN)F)?rk   r   ri   r   rB   r   r   rU   rI   _threadr   r8   r!   r   r   r   r   r   r   r   r   r   r`   hasattrmodulesmoddelattrr	   r;   r   r   r    r$   ZTclr'   r(   r>   rE   r   rR   r:   rY   rs   rH   r|   r   r?   ra   r   r   r   r   Z	RPCServerrW   
TextIOBaser   r   r   r   rX   r   r   Zunittestr   r   r   r   <module>   s~    




M$((1-
M