
    ;eS                     \   	 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
          s.dD ]Z eee           ej        dez   = dej        d	         _        dZ	 dZee_        ee_        n# e $ r Y nw xY wd3dZ!	 d4dZ"da#d Z$ e$d            ej%                    Z&e&fdZ'da(da)da*d5dZ+d Z,d Z-d Z.d Z/d Z0d Z1d Zd Z2d Z3dZ4d  Z5d! Z6 G d" d#ej7                  Z8 G d$ d%ej9                  Z: G d& d'e:          Z; G d( d)e:          Z< G d* d+ej=                  Z> G d, d-          Z?e@d.k    rd d/lAm+Z+  e+d0d12            e$d           dS )6    N)autocomplete)calltip)
debugger_r)
debugobj_r)iomenu)rpc)stackviewerzidlelib.runfirstrun)simpledialog
messageboxfontdialog
filedialogcommondialogttkztkinter.Fz	127.0.0.1zCtrl-D (end-of-file)c                     	 d}|d| d| dz  }|t          j        ||          }|                                }|r|d|z  z  }||j         d|  dz  }|S )Nz!
Warning (from warnings module):
z  File "z", line 
z    %s
: )	linecachegetlinestrip__name__)messagecategoryfilenamelinenoliness         "/usr/lib/python3.11/idlelib/run.pyidle_formatwarningr    3   s    '-A	2X	2	2	2	2	22A| 622::<<D 	Z$H	,	,	,	,	,,AH    c           	          	 |t           j        }	 |                    t          | ||||                     d S # t          $ r Y d S w xY wN)sysstderrwriter    OSError)r   r   r   r   filer   s         r   idle_showwarning_subprocr)   @   st     |z

%8VT; ; 	< 	< 	< 	< 	<   s   &9 
AAc                     	 | r(t           t          j        a t          t          _        d S d S t           t           t          _        d a d S d S r#   )_warnings_showwarningwarningsshowwarningr)   )captures    r   capture_warningsr/   P   sX    L  ) ($,$8!#;H    )( !,#8H $(!!! -,r!   Tc                 2    	 |                      d           d S )Nupdate)eval)tcls    r   handle_tk_eventsr4   `   s!     HHXr!   c                    	 | a 	 t          t          j        d                   }n##  t	          dt          j                   Y d S xY wt          d           dgt          j        d d <   t          j        t          dt          |ffd                                           	 	 t          r 	 t                       n# t          $ r Y %w xY w	 t          j                            dd	          }n# t$          j        $ r d }Y nw xY w|r3|\  }\  }}} ||i |}t          j                            ||f           nt-                       n# t          $ r t.          rdaY t0          $ r t          d
             t          j                    \  }}	}
	 t5                       t          j                            |d f           Y  #  t7          j        ||	|
t          j                   t                       Y nxY wY nxY w])Nz/IDLE Subprocess: no IP port passed in sys.argv.r(   T 
SockThread)targetnameargsdaemon皙?)blocktimeoutF)no_exitfuncintr$   argvprint
__stderr__r/   	threadingThreadmanage_socket	LOCALHOSTstartexit_nowexitKeyboardInterruptr   request_queuegetqueueEmptyresponse_queueputr4   quitting
SystemExitexc_infoprint_exception	traceback)del_exitfuncportrequestseqmethodr<   kwargsrettypevaluetbs              r   mainrc   n   s_   ( K38B<  ?>	# 	# 	# 	#T$CHQQQKM&%t,.    eggg%$	 FFFF(   H+//dD/II;     #.5++fdFfd-f--"&&Sz2222 """  	 	 	  H 	 	 	U###
	!lnnOD%!!!"&&T{333 )$rOOOOG%sv   % A"E *B9 8E 9
CE CE 
!C, +E ,D =E ?D  AE G91G9/G  2G42G9c                    t          d          D ]r}t          j        |           	 t          | t                    } nt# t
          $ r8}t          d|j        d         z   dz   t          j	                   |}Y d }~kd }~ww xY wt          dt          j	                   t          ||            dad S |                                 d S )N   zIDLE Subprocess: OSError:    z, retrying....r7   z8IDLE Subprocess: Connection to IDLE GUI failed, exiting.T)rangetimesleepMyRPCServer	MyHandlerr'   rD   r<   r$   rE   show_socket_errorrK   handle_request)addressiservererrsocket_errors        r   rH   rH      s    1XX  
1	 )44FE 	 	 	.!<"#),9 9 9 9LLLLLL	
 	 *03	@ 	@ 	@ 	@,000
s   >
B .A;;B c                 
   	 dd l }ddlm}  |j                    }t	          |           |                                  |dd|d          d|d          d| j         d| j         d		|
           |                                 d S )Nr   )	showerrorzSubprocess Connection Errorz#IDLE's subprocess can't connect to :rf   z.
Fatal OSError #r   zz.
See the 'Startup failure' section of the IDLE doc, online at
https://docs.python.org/3/library/idle.html#startup-failure)parent)	tkintertkinter.messageboxrt   Tkfix_scalingwithdrawerrnostrerrordestroy)rq   rn   rw   rt   roots        r   rl   rl      s    .NNN,,,,,,7:<<DMMOOOI)J'!* J Jwqz J J!iJ J+.<J J J     	LLNNNNNr!   c                 Z   	 | t           t          fv rt          j                    }t	          j        |          5  t          j        | ||           d d d            n# 1 swxY w Y   |                                	                    d          d         dz   gS t          j        | |          S )Nr   )AttributeError	NameErrorioStringIO
contextlibredirect_stderrr$   __excepthook__getvaluesplitrX   format_exception_only)typexcrb   rq   s       r   get_message_linesr      s    2
~y)))kmm',, 	- 	-sC,,,	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-$$T**2.566.sC888s   AA #A c                  $   dd l }  | j                     t                       t          j        t          j                    x\  }}}}|\  t          _        t          _        t          _        t                      fd |||           d S )Nr   c                 r                        t          |                     |j        }|j        }|Bt          |          vr1 
t	          |          ||j                   t          d	           nJ|H|j        sAt          |          vr0 
t	          |          ||j                   t          d	           |rMt          j	        |          }t          d	           d}t          ||           t          j        |	           t          | ||          }|D ]}t          |d	           d S )NzF
The above exception was the direct cause of the following exception:
r7   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.pyr8   )endr(   )addid__context__	__cause__r`   __traceback__rD   __suppress_context__rX   
extract_tbcleanup_traceback
print_listr   )r   r   rb   contextcausetbeexcludelinesr   efile	print_excseens            r   r   z"print_exception.<locals>.print_exc   sy   C/E$!6!6Id5kk5%*=>>> 28=? ? ? ? ?!* "kk%%Id7mmWg.CDDD 28=? ? ? ? 	2&r**C6UCCCC2Gc7+++ 51111!#sB// 	, 	,D$BU+++++	, 	,r!   )
r   
checkcacheflush_stdoutr$   r%   rV   	last_type
last_valuelast_tracebackset)r   r   valrb   excinfor   r   r   s        @@@r   rW   rW      s    INNNJE \^^+LCb78?5CM3>3#555D, , , , , , ,2 Ic3r!   c                 `   	 | d d          }| r.|D ]%}| d         d                              |          r n&n| d= | .| r.|D ]%}| d         d                              |          r n&n| d= | .t          |           dk    r*|d d          | d d <   t          dt          j                   t
          j        d         j        }t          t          |                     D ]Q}| |         \  }}}}	|dk    rd}|	s/|	                    d          r|
                    d	d
||fi           }	||||	f| |<   Rd S )Nr   r6   z** IDLE Internal Exception: r7   exec?z
-toplevel-z	<pyshell#r   r   )countlenrD   r$   r%   r   objecttable
rpchandlerrg   
startswith
remotecall)
rb   r   orig_tbrpcfiler   ro   fnlnnmr   s
             r   r   r     s   GeG
  	 	G!uQx~~g&&  qE     	 	G"vayw''  rF   2ww!||
111,3:>>>>(3J3r77^^ ! !a5BD99B 	<k22 	<((i/12h< <DBD 1! !r!   c                      d S r#    r   r!   r   r   r   /  s    !!r!   c                      	 t           rdd l} |                                  t          d           t	          j        d           d S )Nr   F)rA   atexit_clearr/   r$   rL   )r   s    r   rL   rL   2  sF      UHQKKKKKr!   c                 D   	 dd l }t          | j                            dd                    }|dk    rj|j                            |           D ]Q}|j                            | |d          }t          |d                   }|dk     rt          d|z            |d<   Pd S d S )	Nr   tkscalinggffffff?T)r   r;   existssizeg      )	tkinter.fontfloatr   callr   namesFontrB   round)r   rw   r   r;   r   r   s         r   rz   rz   A  s    (DGLLy1122G}}L&&t,, 	1 	1D<$$$T$$GGDtF|$$Daxx$U4Z00V }	1 	1r!   c                     | j         
| j         dz   nd}|t          j        t          j        |                    z   | _         d S )Nz

r8   )__doc__textwrapfilldedent)funtexttems      r   fixdocr   M  s>    $'K$;3;Chod&;&;<<<CKKKr!      c                      	 t          j        t          j                  fd            t	          dt
           d           t          j        t          j                   fd             t	           dt
           dt
           d           t          j        t          j                    t
          z              t          _         t          _        d S )Nc                      |rt          d          	 | \  }n.# t          $ r! t          dt          |            d          w xY w|dk    st          d                              |t          z             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<   r^   limitsetrecursionlimits      r   r   z:install_recursionlimit_wrappers.<locals>.setrecursionlimitW  s      	B@B B B	=FEE 	= 	= 	= <),T< < < = = =	= qyyAC C C !,,U5I-IJJJs	    +Az#            This IDLE wrapper adds z7 to prevent possible
            uninterruptible loops.c                  <                                      t          z
  S r#   )r   r   )getrecursionlimits   r   r   z:install_recursionlimit_wrappers.<locals>.getrecursionlimitl  s     ,,..1EEEr!   z(            This IDLE wrapper subtracts z# to compensate
            for the z" IDLE adds when setting the limit.)	functoolswrapsr$   r   r   r   r   )r   r   s   @@r   install_recursionlimit_wrappersr   S  s!   C _S*++K K K K ,+K   &$8& & & ' ' ' _S*++F F F F ,+F  P)=P P)P P P Q Q Q
 #/114HHIII-C-Cr!   c                  B   	 t          t          j        dd           rt          t          j        dd           rgt          j        j        t          _        t          j        j        t          _        t          j        t          j                    t
          z
             d S d S d S )Nr   )getattrr$   r   r   r   r   r   r!   r   !uninstall_recursionlimit_wrappersr   {  s     C)=$??NC)=$??N !$ 5 A # 5 Ac3558LLMMMMMN N N Nr!   c                       e Zd Zd ZdS )rj   c                    	 	  # t           $ r  t          $ r dat          j                     Y d S  t
          j        }t          t          j	        dd dt          j                    j         d| d|d	          |           t          j        d|	           t          t          j	        d
d           |           dat          j                     Y d S xY w)NTz
            z(----------------------------------------zU
            Unhandled exception in user code execution server!'
            Thread: z"
            IDLE Client Address: z
            Request: r7   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.
            )rU   EOFErrorrK   threadinterrupt_mainr$   rE   rD   r   r   rF   current_threadr;   rX   r   rT   )selfr[   client_addresserfs       r   handle_errorzMyRPCServer.handle_error  sR   		$ 	 	 	 	$ 	$ 	$H!######	$.C(/ ## # -//4# # #1	# #
 # # #       c4444(/ # # #    #$ $ $ $ H!######s    )CB$CN)r   
__module____qualname__r   r   r!   r   rj   rj     s#        !$ !$ !$ !$ !$r!   rj   c                   ^    e Zd Zd	dZed             Zed             Zed             Zd ZdS )
	StdioFileutf-8strictc                 >    || _         || _        || _        || _        d S r#   )shelltags	_encoding_errors)r   r   r   encodingerrorss        r   __init__zStdioFile.__init__  s"    
	!r!   c                     | j         S r#   )r   r   s    r   r   zStdioFile.encoding  s
    ~r!   c                     | j         S r#   )r   r   s    r   r   zStdioFile.errors  s
    |r!   c                     d| j         z  S )Nz<%s>)r   r   s    r   r;   zStdioFile.name  s    	!!r!   c                     dS NTr   r   s    r   isattyzStdioFile.isatty      tr!   N)r   r   )	r   r   r   r   propertyr   r   r;   r  r   r!   r   r   r     s              X   X " " X"    r!   r   c                       e Zd Zd Zd ZdS )StdOutputFilec                     dS r   r   r   s    r   writablezStdOutputFile.writable  r  r!   c                     | 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   s     r   r&   zStdOutputFile.write  sb    ; 	53444JJq$-55<<T]DKXXz49---r!   N)r   r   r   r  r&   r   r!   r   r  r    s2          . . . . .r!   r  c                   .    e Zd ZdZd ZddZddZd ZdS )	StdInputFiler8   c                     dS r   r   r   s    r   readablezStdInputFile.readable  r  r!   r6   c                    | j         rt          d          |d}n9t          |t                    s$t	          dt          |          j        z             | j        }d| _        |dk     r<| j        	                                x}r ||z  }| j        	                                x} n`t          |          |k     r4| j        	                                }|sn||z  }t          |          |k     4||d          | _        |d |         }|S )Nread from closed filer6   must be int, not r8   r   )r	  r   
isinstancerB   r   r`   r   _line_bufferr   readliner   )r   r   resultr   s       r   readzStdInputFile.read  s    ; 	64555<DDD#&& 	G/$t**2EEFFF"!88*--///$ $ *--///$  f++$$z**,,"U$ f++$$ !'tuuDETE]Fr!   c                    | j         rt          d          |d}n9t          |t                    s$t	          dt          |          j        z             | j        p| j        	                                }|dk     rt          |          }|                    dd|          }|dk    r|dz   }||d          | _        |d |         S )Nr  r6   r  r   r   rf   )r	  r   r  rB   r   r`   r   r  r   r  r   find)r   r   r   eols       r   r  zStdInputFile.readline  s    ; 	64555<DDD#&& 	G/$t**2EEFFF 9DJ$7$7$9$9!88t99Diia&&!887D KETE{r!   c                 8    | j                                          d S r#   )r   closer   s    r   r  zStdInputFile.close  s    
r!   N)r6   )r   r   r   r  r  r  r  r  r   r!   r   r  r    s_        L     *        r!   r  c                   &    e Zd Zd Zd Zd Zd ZdS )rk   c                    	 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                            | d d	
           d S )Nr   consolestdinstdoutr%   backslashreplacer   interpr>   )myseqwait)	Executiveregisterget_remote_proxyr   r  r   r   r   r$   r!  r  r"  r%   r   displayhookpydoc
plainpagerpager_keep_stdinr   r$  
RPCHandlergetresponse)r   	executiver+  s      r   handlezMyHandler.handle  s   "dOO	fi(((,,Y77 w!'&-A A	"4<#)?FMC C
"4<#)?4FH H
 /& 9')))++H55""4t$"?????r!   c                 0    	 t          j        d           d S )N
   )rh   ri   r   s    r   exithookzMyHandler.exithook!  s    H
2r!   c                 2    	 da t          j                     d S r   rT   r   r   r   s    r   EOFhookzMyHandler.EOFhook%  s    Or!   c                 2    	 da t          j                     d S r   r7  r   s    r   decode_interrupthookzMyHandler.decode_interrupthook+  s    #r!   N)r   r   r   r2  r5  r8  r:  r   r!   r   rk   rk     sS        @ @ @4                r!   rk   c                   @    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d
d	Z
dS )r'  c                     || _         t          j        du rCt          j        | _        t          j                    | _        t          j	                    | _        d S i | _        d S )NF)
r   idlelibtesting__main____dict__localsr   Calltipr   AutoComplete)r   r   s     r   r   zExecutive.__init__4  sQ    $?e##"+DK"?,,DL , 9 ; ;DDKKKr!   c                 <   	 d | _         da	 t          || j                   dan# daw xY w	 t	                       d S # t
          $ rz}|j        rb|j        d         }t          |t          d           t          f          s7t          dt          |          z   t          j                   Y d }~d S Y d }~d S Y d }~d S d }~w t          j                    | _         t          rt!                       t          j        t          j        u rt'                       nB	 t          j        | j           n-#  t          j                    | _         t'                       Y nxY w| j        j                            d          }|r!| j        j                                         Y d S Y d S xY w)NTFr   zSystemExit: r7   z<<toggle-jit-stack-viewer>>)user_exc_infointerruptabler   rA  r   rU   r<   r  r`   rB   rD   r
  r$   r%   rV   rT   rL   
excepthookr   rW   r   r   getvarr$  open_remote_stack_viewer)r   codeeobjits        r   runcodezExecutive.runcode=  s   	!%D M&T4;''' %%%%%. NNNNN-  	E 	E 	Ev EVAY!"tDzz3&788 E.3r772DDDDDDDDDDE E E E E EE E E E E E	B!$D ~!333!!!!&ND$6777&),D&#%%%%%/)001NOOC B&??AAAAAAB B Bs@   	< $ < (< 
FA#B;;AFD)(F)(EAFc                 >    t           rt          j                     d S d S r#   )rF  r   r   r   s    r   interrupt_the_serverzExecutive.interrupt_the_server^  s)     	$!#####	$ 	$r!   c                 6    t          j        | j        |          S r#   )r   start_debuggerr   )r   gui_adap_oids     r   start_the_debuggerzExecutive.start_the_debuggerb  s    (,GGGr!   c                 <    	 | j                             |           d S r#   )r   
unregister)r   idb_adap_oids     r   stop_the_debuggerzExecutive.stop_the_debuggere  s!    N""<00000r!   c                 6    | j                             |          S r#   )r   	fetch_tip)r   r;   s     r   get_the_calltipzExecutive.get_the_calltipi  s    |%%d+++r!   c                 8    | j                             ||          S r#   )r   fetch_completions)r   whatmodes      r   get_the_completion_listz!Executive.get_the_completion_listl  s     224>>>r!   Nc                 .   | j         r| j         \  }}}nd S d }|| j                            |          }|r1|j        j        d         dv r|j        }|r|j        j        d         dv ||_        t          j        ||          }t          j
        |          S )Nr   )r   run)rE  r   r)  tb_frame	f_globalstb_nextr   r	   StackTreeItemr   remote_object_tree_item)r   	flist_oid_r   rb   flistitems          r   r	   zExecutive.stackviewero  s     	+JAsBB4 O44Y??E 	R[*:6.HHB  	R[*:6.HH(e441$777r!   r#   )r   r   r   r   rN  rP  rT  rX  r[  r`  r	   r   r!   r   r'  r'  2  s            B$ $ $H H H1 1 1, , ,? ? ?8 8 8 8 8 8r!   r'  r?  )rc   zidlelib.idle_test.test_run   )	verbosityr#   )NN)F)Br   r   r   r   rP   r$   r   rh   rX   _threadr   rF   r,   r=  r   r   r   r   r   r   r	   r?  rw   hasattrmodulesmoddelattrr
   rI   eofrL   quitr   r    r)   r+   r/   Tclr3   r4   rK   rT   rF  rc   rH   rl   r   rW   r   r   rz   r   r   r   r   	RPCServerrj   
TextIOBaser   r  r  r/  rk   r'  r   unittestr   r!   r   <module>ry     ss           				      



                                                                  ws{=):66 0 * * 	K
S())*/CK'		
 CDHDHH 	 	 	D	    >B     ) ) )     gkmm     L L L L\  &  "	9 	9 	9" " "H! ! !>" " "  	1 	1 	1= = =  %. %. %.PN N N#$ #$ #$ #$ #$#- #$ #$ #$P       0	. 	. 	. 	. 	.I 	. 	. 	., , , , ,9 , , ,^*  *  *  *  *  *  *  * ZI8 I8 I8 I8 I8 I8 I8 I8X zD	%3333       s   0C C	C	