B
    2*\E                 @   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
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x"d	D ]Zee
e ejd
e = qW dZd2ddZd3ddZdadd Zed e
 ZefddZdada da!d4d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-Z.G d,d- d-e-Z/G d.d/ d/ej0Z1G d0d1 d1e2Z3ed dS )5    N)autocomplete)calltip)
debugger_r)
debugobj_r)iomenu)rpc)stackviewer)ZsimpledialogZ
messageboxfontZdialogZ
filedialogZcommondialogZttkztkinter.z	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   6C:\ALexclude\prg\programme\Python37\Lib\idlelib\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_subproc,   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_warnings<   s    r    Tc             C   s   |  d d S )Nupdate)eval)tclr   r   r   handle_tk_eventsL   s    r$   Fc             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   mainZ   s\    




rF   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   r/   show_socket_errorr4   Zhandle_request)addressiZservererrZsocket_errorr   r   r   r1      s    



r1   c          	   C   sp   dd l }ddlm} | }t| |  d|d  d|d  d| j d| j d	}|d	||d
 |  d S )Nr   )	showerrorz#IDLE's subprocess can't connect to :rH   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-failurezIDLE Subprocess Error)parent)	tkinterZtkinter.messageboxrR   ZTkfix_scalingZwithdrawerrnostrerrorZdestroy)rQ   rO   rU   rR   rootmsgr   r   r   rN      s    *rN   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__rC   __traceback__r.   __suppress_context__r=   
extract_tbcleanup_traceback
print_listformat_exception_only)	typexcrE   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   valrE   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
rpchandlerrI   
startswithZ
remotecall)
rE   rj   Zorig_tbZrpcfiler{   rP   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   r5   )r~   r   r   r   r5     s
    r5   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)rY   r(   existssizeg      )	Ztkinter.fontfloatr   Zcallr	   namesZFontr,   round)rY   rU   r   r(   r	   r   r   r   r   rV     s    rV   c               @   s   e Zd Zdd ZdS )rL   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:   EOFErrorr4   threadinterrupt_mainr   r/   r.   r0   Zcurrent_threadr(   reprr=   rm   r9   )selfr>   Zclient_addressZerfr   r   r   handle_error+  s&    zMyRPCServer.handle_errorN)r   
__module____qualname__r   r   r   r   r   rL   )  s   rL   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__L  s    zPseudoFile.__init__c             C   s   | j S )N)r   )r   r   r   r   r   Q  s    zPseudoFile.encodingc             C   s
   d| j  S )Nz<%s>)r   )r   r   r   r   r(   U  s    zPseudoFile.namec             C   s   dS )NTr   )r   r   r   r   isattyY  s    zPseudoFile.isatty)N)r   r   r   r   propertyr   r(   r   r   r   r   r   r   J  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   writable_  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
ValueErrorrC   str
isinstance	TypeErrorr   __str__r   r   r   )r   r   r   r   r   r   b  s    

zPseudoOutputFile.writeN)r   r   r   r   r   r   r   r   r   r   ]  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   o  s    zPseudoInputFile.__init__c             C   s   dS )NTr   )r   r   r   r   readables  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   rC   r   r   r   readlinerz   )r   r   resultr   r   r   r   readv  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   
rH   )r   r   r   r,   r   rC   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   m  s
   


r   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rM   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
   )rJ   rK   )r   r   r   r   exithook  s    zMyHandler.exithookc             C   s   da t  d S )NT)r9   r   r   )r   r   r   r   EOFhook  s    zMyHandler.EOFhookc             C   s   da t  d S )NT)r9   r   r   )r   r   r   r   decode_interrupthook  s    zMyHandler.decode_interrupthookN)r   r   r   r   r   r   r   r   r   r   r   rM     s   rM   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 nV tk
r:   Y nJ   t | _ trTt  t	  | j
jd}|rx| j
j  Y nX t  d S )NTFz<<toggle-jit-stack-viewer>>)usr_exc_infointerruptablerw   r   r:   r   r;   r9   r5   r<   r{   r   Zgetvarr   Zopen_remote_stack_viewerrp   )r   codeZ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   rE   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   )N)NN)F)4ior
   r8   r   rJ   r=   _threadr   r0   r   rU   Zidlelibr   r   r   r   r   r   r   r   moddelattrmodulesr2   r   r   r   r    ZTclr#   r$   r4   r9   r   rF   r1   rN   r<   rc   rp   r5   rV   Z	RPCServerrL   
TextIOBaser   r   r   r   rM   objectr   r   r   r   r   <module>   s\   





M$!4+A