B
    v9a0F                 @   s  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
sx"dD ]Zeee ejde = qW dejd	 _dZd9ddZd:ddZdadd Zed e ZefddZ da!da"da#d;ddZ$dd Z%dd Z&dd Z'd d! Z(d"d# Z)d$d% Z*d&d' Z+G d(d) d)ej,Z-G d*d+ d+e j.Z/G d,d- d-e/Z0G d.d/ d/e/Z1G d0d1 d1ej2Z3G d2d3 d3e4Z5e6d4krd d5l7m$Z$ e$d6d7d8 ed dS )<    N)autocomplete)calltip)
debugger_r)
debugobj_r)iomenu)rpc)stackviewerzidlelib.runfirstrun)ZsimpledialogZ
messageboxfontZdialogZ
filedialogZcommondialogZttkztkinter.Fz	127.0.0.1c             C   sV   d}|d||f 7 }|d k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   /usr/lib/python3.7/run.pyidle_formatwarning(   s    r   c             C   sB   |d krt j}y|t| |||| W n tk
r<   Y nX d S )N)sysstderrwriter   OSError)r   r   r   r   filer   r   r   r   idle_showwarning_subproc5   s    r   c             C   s0   | rt d kr,tja tt_nt d k	r,t t_d a d S )N)_warnings_showwarningwarningsshowwarningr   )Zcapturer   r   r   capture_warningsE   s    r!   Tc             C   s   |  d d S )Nupdate)eval)tclr   r   r   handle_tk_eventsU   s    r%   c             C   s  | a yttjd }W n   tdtjd d S td dgtjd d < tjt	dt
|ffd}d|_|  x0ytry
t  W n tk
r   wpY nX ytjjddd	}W n tjk
r   d }Y nX |r|\}\}}}|||}tj||f nt  W qp tk
r    trdawpY qp tk
r>   td
  Y qp   t \}	}
}yt  tj|d f W n&   tj|	|
|tjd t  Y nX wpY qpX qpW d S )Nz/IDLE Subprocess: no IP port passed in sys.argv.)r   T Z
SockThread)targetnameargsg?)blockZtimeoutF)no_exitfuncintr   argvprint
__stderr__r!   	threadingZThreadmanage_socket	LOCALHOSTZdaemonstartexit_nowexitKeyboardInterruptr   Zrequest_queuegetqueueZEmptyZresponse_queueZputr%   quitting
SystemExitexc_infoprint_exception	traceback)Zdel_exitfuncZportZ
sockthreadrequestseqmethodr*   kwargsrettypevaluetbr   r   r   mainc   s\    




rG   c             C   s   xt dD ]b}t| yt| t}P W q
 tk
rj } z$td|jd  d tj	d |}W d d }~X Y q
X q
W tdtj	d t
||  dad S |  d S )N   zIDLE Subprocess: OSError:    z, retrying....)r   z8IDLE Subprocess: Connection to IDLE GUI failed, exiting.T)rangetimesleepMyRPCServer	MyHandlerr   r/   r*   r   r0   show_socket_errorr5   Zhandle_request)addressiZservererrZsocket_errorr   r   r   r2      s    



r2   c             C   sl   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 :rI   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.messageboxrS   ZTkfix_scalingZwithdrawerrnostrerrorZdestroy)rR   rP   rV   rS   rootr   r   r   rO      s    (rO   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 k	rNt|krNt|||j td d n8|d k	r|jst|krt|||j td d |rt	|}td d d}t
|| tj| d t| |}x|D ]}t|d d qW d 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__rD   __traceback__r/   __suppress_context__r>   
extract_tbcleanup_traceback
print_listformat_exception_only)	typexcrF   contextcauseZtbeexcludelinesr   )efile	print_excseenr   r   rm      s,    



z"print_exception.<locals>.print_exc)
r   
checkcacheflush_stdoutr   r   r<   	last_type
last_valuelast_tracebackset)r   rf   valrF   excinfor   )rl   rm   rn   r   r=      s    r=   c       
      C   s  | d d  }x2| r>x"|D ]}| d d  |rP qW P | d= qW x2| rrx"|D ]}| d d  |rLP qLW P | d= qBW t| dkr|d d  | d d < tdtjd tjd j}xbtt| D ]R}| | \}}}}	|dkrd}|	s|	dr|
d	d
||fi }	||||	f| |< qW d S )Nr   r&   z** IDLE Internal Exception: )r   exec?z
-toplevel-z	<pyshell#r   r   )countlenr/   r   r   r   Zobjecttable
rpchandlerrJ   
startswithZ
remotecall)
rF   rj   Zorig_tbZrpcfiler{   rQ   fnZlnZnmr   r   r   r   rc      s2    



rc   c               C   s   d S )Nr   r   r   r   r   rp     s    rp   c              C   s*   t rdd l} |   td td d S )Nr   F)r,   atexitZ_clearr!   r   r6   )r~   r   r   r   r6     s
    r6   c             C   sr   dd l }t| jdd}|dkrnxJ|j| D ]:}|jj| |dd}t|d }|dk r0td| |d< q0W d S )	Nr   tkscalinggffffff?T)rZ   r)   existssizeg      )	Ztkinter.fontfloatr   Zcallr
   namesZFontr-   round)rZ   rV   r   r)   r
   r   r   r   r   rW   (  s    rW   c               @   s   e Zd Zdd ZdS )rM   c             C   s   y W n t k
r    Y n tk
r:   dat  Y n   tj}td|d td|d tdt	 j
 |d td||d tdt||d tj|d td|d td	|d dat  Y nX d S )
NTz)
----------------------------------------)r   zUnhandled server exception!z
Thread: %szClient Address: z	Request: z#
*** Unrecoverable, server exiting!z(----------------------------------------)r;   EOFErrorr5   threadinterrupt_mainr   r0   r/   r1   Zcurrent_threadr)   reprr>   rm   r:   )selfr?   Zclient_addressZerfr   r   r   handle_error6  s&    zMyRPCServer.handle_errorN)r   
__module____qualname__r   r   r   r   r   rM   4  s   rM   c               @   s6   e Zd Zd
ddZedd Zedd Zdd	 ZdS )
PseudoFileNc             C   s   || _ || _|| _d S )N)shelltags	_encoding)r   r   r   encodingr   r   r   __init__W  s    zPseudoFile.__init__c             C   s   | j S )N)r   )r   r   r   r   r   \  s    zPseudoFile.encodingc             C   s
   d| j  S )Nz<%s>)r   )r   r   r   r   r)   `  s    zPseudoFile.namec             C   s   dS )NTr   )r   r   r   r   isattyd  s    zPseudoFile.isatty)N)r   r   r   r   propertyr   r)   r   r   r   r   r   r   U  s   
r   c               @   s   e Zd Zdd Zdd ZdS )PseudoOutputFilec             C   s   dS )NTr   )r   r   r   r   writablej  s    zPseudoOutputFile.writablec             C   sP   | j rtdt|tk	r@t|ts6tdt|j t|}| j	|| j
S )Nzwrite to closed filezmust be str, not )closed
ValueErrorrD   str
isinstance	TypeErrorr   __str__r   r   r   )r   r   r   r   r   r   m  s    

zPseudoOutputFile.writeN)r   r   r   r   r   r   r   r   r   r   h  s   r   c               @   s:   e Zd ZdddZdd ZdddZdd	d
Zdd ZdS )PseudoInputFileNc             C   s   t | ||| d| _d S )Nr'   )r   r   _line_buffer)r   r   r   r   r   r   r   r   z  s    zPseudoInputFile.__init__c             C   s   dS )NTr   )r   r   r   r   readable~  s    zPseudoInputFile.readabler&   c             C   s   | j rtd|d krd}nt|ts8tdt|j | j}d| _|dk rlxb| j	 }|s^P ||7 }qNW nDx(t
||k r| j	 }|sP ||7 }qnW ||d  | _|d | }|S )Nzread from closed filer&   zmust be int, not r'   r   )r   r   r   r-   r   rD   r   r   r   readlinerz   )r   r   resultr   r   r   r   read  s,    

 
 zPseudoInputFile.readc             C   s   | j rtd|d krd}nt|ts8tdt|j | jpF| j	 }|dk rXt
|}|dd|}|dkrv|d }||d  | _|d | S )Nzread from closed filer&   zmust be int, not r   
rI   )r   r   r   r-   r   rD   r   r   r   r   rz   find)r   r   r   Zeolr   r   r   r     s    
zPseudoInputFile.readlinec             C   s   | j   d S )N)r   close)r   r   r   r   r     s    zPseudoInputFile.close)N)r&   )r&   )r   r   r   r   r   r   r   r   r   r   r   r   r   x  s
   


r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rN   c             C   s   t | }| d| | d| _t| jdtjt_t	| jdtjt_
t	| jdtjt_tjt_dd l}|j|_tj| _| d| _tjj| d dd	 d S )
Nrw   consolestdinstdoutr   r   interpg?)Zmyseqwait)	Executiveregisterget_remote_proxyr   r   r   r   r   r   r   r   r   r   displayhookpydocZ
plainpagerZpagerZ_keep_stdinr   
RPCHandlerZgetresponse)r   Z	executiver   r   r   r   handle  s    


zMyHandler.handlec             C   s   t d d S )N
   )rK   rL   )r   r   r   r   exithook  s    zMyHandler.exithookc             C   s   da t  d S )NT)r:   r   r   )r   r   r   r   EOFhook  s    zMyHandler.EOFhookc             C   s   da t  d S )NT)r:   r   r   )r   r   r   r   decode_interrupthook  s    zMyHandler.decode_interrupthookN)r   r   r   r   r   r   r   r   r   r   r   rN     s   rN   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| _t | _t | _d S )N)r{   __main____dict__localsr   ZCalltipr   ZAutoComplete)r   r{   r   r   r   r     s    
zExecutive.__init__c          
   C   s   y&d | _ dazt|| j W d daX W n tk
r } z<|jrp|jd }t|td tfspt	dt
| tjd W d d }~X Y nJ   t | _ trt  t  | jjd}|r| jj  Y nX t  d S )NTFr   zSystemExit: )r   z<<toggle-jit-stack-viewer>>)usr_exc_infointerruptablerw   r   r;   r*   r   rD   r-   r/   r   r   r   r<   r:   r6   r=   r{   r   Zgetvarr   Zopen_remote_stack_viewerrp   )r   codeeZobZjitr   r   r   runcode  s(    

&
zExecutive.runcodec             C   s   t rt  d S )N)r   r   r   )r   r   r   r   interrupt_the_server  s    zExecutive.interrupt_the_serverc             C   s   t | j|S )N)r   Zstart_debuggerr{   )r   Zgui_adap_oidr   r   r   start_the_debugger  s    zExecutive.start_the_debuggerc             C   s   | j | d S )N)r{   Z
unregister)r   Zidb_adap_oidr   r   r   stop_the_debugger   s    zExecutive.stop_the_debuggerc             C   s   | j |S )N)r   Z	fetch_tip)r   r)   r   r   r   get_the_calltip  s    zExecutive.get_the_calltipc             C   s   | j ||S )N)r   Zfetch_completions)r   Zwhatmoder   r   r   get_the_completion_list  s    z!Executive.get_the_completion_listNc             C   sr   | j r| j \}}}nd S d }|d k	r0| j|}x|rN|jjd dkrN|j}q2W |t_|t_t	
||}t|S )Nr   )r   run)r   r{   r   tb_frame	f_globalstb_nextr   rq   rr   r   ZStackTreeItemr   Zremote_object_tree_item)r   Z	flist_oidrf   ru   rF   flistitemr   r   r   r   
  s    
zExecutive.stackviewer)N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s   r   r   )rG   zidlelib.idle_test.test_run   )	verbosity)N)NN)F)8ior   r9   r   rK   r>   _threadr   r1   r   Zidlelibr   r   r   r   r   r   r   r   rV   hasattrmodulesmoddelattrr	   r3   r   r   r   r!   ZTclr$   r%   r5   r:   r   rG   r2   rO   r=   rc   rp   r6   rW   Z	RPCServerrM   
TextIOBaser   r   r   r   rN   objectr   r   Zunittestr   r   r   r   <module>   sf   





M$!4+C
