B „ fEOã@s@dZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl mZddl mZddl mZddl mZddl mZddl mZdd l mZddlZddlZeejd d ƒ�sx"d D]Zeeeƒejd e=qØWdejd _dZdAdd„ZdBdd„Zdadd„Z e dƒe !¡Z"e"fdd„Z#da$da%da&dCdd„Z'dd„Z(dd„Z)dd „Z*d!d"„Z+d#d$„Z,d%d&„Z-d'd(„Z.d)d*„Z/d+Z0d,d-„Z1d.d/„Z2Gd0d1„d1ej3ƒZ4Gd2d3„d3ej5ƒZ6Gd4d5„d5e6ƒZ7Gd6d7„d7e6ƒZ8Gd8d9„d9ej9ƒZ:Gd:d;„d;e;ƒZm'Z'e'd>d?d@�e dƒdS)Dz× idlelib.run Simplified, pyshell.ModifiedInterpreter spawns a subprocess with f'''{sys.executable} -c "__import__('idlelib.run').run.main()"''' '.run' is needed because __import__ returns idlelib, not idlelib.run. éN)Ú autocomplete)Úcalltip)Ú debugger_r)Ú debugobj_r)Úiomenu)Úrpc)Ú stackviewerz idlelib.runÚfirstrun)Z simpledialogZ messageboxÚfontZdialogZ filedialogZ commondialogZttkztkinter.Fz 127.0.0.1cCsVd}|d||f7}|dkr(t ||¡}| ¡}|r@|d|7}|d|j|f7}|S)zFormat warnings the IDLE way.z! Warning (from warnings module): z File "%s", line %s Nz %s z%s: %s )Ú linecacheÚgetlineÚstripÚ__name__)ÚmessageÚcategoryÚfilenameÚlinenoÚlineÚs©rú0/opt/alt/python37/lib64/python3.7/idlelib/run.pyÚidle_formatwarning*s  rcCsB|dkrtj}y| t|||||ƒ¡Wntk r<YnXdS)zuShow Idle-format warning after replacing warnings.showwarning. The only difference is the formatter called. N)ÚsysÚstderrÚwriterÚOSError)rrrrÚfilerrrrÚidle_showwarning_subproc7srcCs0|rtdkr,tjatt_ntdk r,tt_dadS)zFReplace warning.showwarning with idle_showwarning_subproc, or reverse.N)Ú_warnings_showwarningÚwarningsÚ showwarningr)ZcapturerrrÚcapture_warningsGsr!TcCs| d¡dS)z–Process any tk events that are ready to be dispatched if tkinter has been imported, a tcl interpreter has been created and tk has been loaded.ÚupdateN)Úeval)ÚtclrrrÚhandle_tk_eventsWsr%c Cs¤|ayttjdƒ}Wntdtjd�dStdƒdgtjdd…<tjt dt |ffd�}d|_ |  ¡�x0yŽt r˜y tƒWntk r–wpYnXytjjdd d �}Wntjk rÆd}YnX|rö|\}\}}}|||Ž}tj ||f¡ntƒWqptk �r t�rda wpYqptk �r>td ƒ‚Yqpt ¡\} } } ytƒtj |df¡Wn&tj| | | tjd�tƒYnXwpYqpXqpWdS) afStart the Python execution server in a subprocess In the Python subprocess, RPCServer is instantiated with handlerclass MyHandler, which inherits register/unregister methods from RPCHandler via the mix-in class SocketIO. When the RPCServer 'server' is instantiated, the TCPServer initialization creates an instance of run.MyHandler and calls its handle() method. handle() instantiates a run.Executive object, passing it a reference to the MyHandler object. That reference is saved as attribute rpchandler of the Executive instance. The Executive methods have access to the reference and can pass it on to entities that they command (e.g. debugger_r.Debugger.start_debugger()). The latter, in turn, can call MyHandler(SocketIO) register/unregister methods via the reference to register and unregister themselves. éÿÿÿÿz/IDLE Subprocess: no IP port passed in sys.argv.)rNTÚZ SockThread)ÚtargetÚnameÚargsgš™™™™™©?)ÚblockZtimeoutF)Ú no_exitfuncÚintrÚargvÚprintÚ __stderr__r!Ú threadingZThreadÚ manage_socketÚ LOCALHOSTZdaemonÚstartÚexit_nowÚexitÚKeyboardInterruptrZ request_queueÚgetÚqueueZEmptyZresponse_queueZputr%ÚquittingÚ SystemExitÚexc_infoÚprint_exceptionÚ traceback) Z del_exitfuncZportZ sockthreadÚrequestÚseqÚmethodr*ÚkwargsZretÚtypeÚvalueÚtbrrrÚmaines\      rFc CsœxŽtdƒD]b}t |¡yt|tƒ}PWq tk rj}z$td|jddtj d�|}Wdd}~XYq Xq Wtdtj d�t ||ƒda dS|  ¡dS)NézIDLE Subprocess: OSError: éz, retrying....)rz8IDLE Subprocess: Connection to IDLE GUI failed, exiting.T) ÚrangeÚtimeÚsleepÚ MyRPCServerÚ MyHandlerrr/r*rr0Úshow_socket_errorr5Zhandle_request)ÚaddressÚiZserverÚerrZ socket_errorrrrr2²s    r2c Cslddl}ddlm}| ¡}t|ƒ| ¡|dd|d›d|d›d|j›d |j›d � |d �| ¡dS) z(Display socket error from manage_socket.rN)Ú showerrorzSubprocess Connection Errorz#IDLE's subprocess can't connect to ú:rHz. 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) ÚtkinterZtkinter.messageboxrRZTkÚ fix_scalingZwithdrawÚerrnoÚstrerrorZdestroy)rQrOrUrRÚrootrrrrNÅs (rNcsdddl}| ¡tƒtj‰t ¡\}}}}|\t_t_t_t ƒ‰‡‡‡fdd„‰ˆ|||ƒdS)Nrc s舠t|ƒ¡|j}|j}|dk rNt|ƒˆkrNˆt|ƒ||jƒtdˆd�n8|dk r†|js†t|ƒˆkr†ˆt|ƒ||jƒtdˆd�|r¼t  |¡}tdˆd�d}t ||ƒtj |ˆd�t  ||¡}x|D]}t|dˆd�qÎWdS)NzF The above exception was the direct cause of the following exception: )rzE During handling of the above exception, another exception occurred: z"Traceback (most recent call last):)zrun.pyzrpc.pyz threading.pyzqueue.pyz debugger_r.pyzbdb.pyr')Úendr) ÚaddÚidÚ __context__Ú __cause__rCÚ __traceback__r/Ú__suppress_context__r>Ú extract_tbÚcleanup_tracebackÚ print_listÚformat_exception_only) ÚtypÚexcrEÚcontextÚcauseZtbeÚexcludeÚlinesr)ÚefileÚ print_excÚseenrrrlÞs,       z"print_exception..print_exc) r Ú checkcacheÚ flush_stdoutrrr<Ú last_typeÚ last_valueÚlast_tracebackÚset)r reÚvalrEÚexcinfor)rkrlrmrr=Õsr=c Cs|dd…}x2|r>x"|D]}|dd |¡rPqWP|d=qWx2|rrx"|D]}|dd |¡rLPqLWP|d=qBWt|ƒdkr¢|dd…|dd…<tdtjd�tjdj}xbtt|ƒƒD]R}||\}}}} |dkrÜd}| sþ|  d ¡rþ|  d d ||fi¡} |||| f||<q¼WdS) zARemove excluded traces from beginning/end of tb; get cached linesNrr&z** IDLE Internal Exception: )rÚexecú?z -toplevel-z tdt|ƒ›d�ƒ‚YnX|dksPtdƒ‚ˆ |t¡S)Nz.setrecursionlimit() takes no keyword argumentsz0setrecursionlimit() takes exactly one argument (z given)rz/recursion limit must be greater or equal than 1)Ú TypeErrorÚ ValueErrorryÚ __wrapped__ÚRECURSIONLIMIT_DELTA)r*rBÚlimit)Úsetrecursionlimitrrr�@s z:install_recursionlimit_wrappers..setrecursionlimitz# This IDLE wrapper adds z7 to prevent possible uninterruptible loops.cs ˆ ¡tS)N)r�rŽr)Úgetrecursionlimitrrr‘Usz:install_recursionlimit_wrappers..getrecursionlimitz( This IDLE wrapper subtracts z# to compensate for the z" IDLE adds when setting the limit.N)Ú functoolsÚwrapsrr�r‰rŽr‘rr)r‘r�rÚinstall_recursionlimit_wrappers<sr”cCsFttjddƒrBttjddƒrBtjjt_tjjt_t t ¡t¡dS)z£Uninstall the recursion limit wrappers from the sys module. IDLE only uses this for tests. Users can import run and call this to remove the wrapping. r�N)Úgetattrrr�r‘r�rŽrrrrÚ!uninstall_recursionlimit_wrappersds   r–c@seZdZdd„ZdS)rLcCsÎy‚WnÂtk r‚Yn®tk r:dat ¡Yn�tj}td|d�td|d�tdt  ¡j |d�td||d�tdt |ƒ|d�t j |d�td|d�td |d�dat ¡YnXd S) zrOverride RPCServer method for IDLE Interrupt the MainThread and exit server if link is dropped. Tz) ----------------------------------------)rzUnhandled server exception!z Thread: %szClient Address: z Request: z# *** Unrecoverable, server exiting!z(----------------------------------------N)r;ÚEOFErrorr5ÚthreadÚinterrupt_mainrr0r/r1Zcurrent_threadr)Úreprr>rlr:)Úselfr?Zclient_addressZerfrrrÚ handle_errorus&      zMyRPCServer.handle_errorN)rÚ __module__Ú __qualname__rœrrrrrLssrLc@sBeZdZddd„Zedd„ƒZedd„ƒZed d „ƒZd d „Zd S)Ú StdioFileúutf-8ÚstrictcCs||_||_||_||_dS)N)ÚshellÚtagsÚ _encodingÚ_errors)r›r¢r£ÚencodingÚerrorsrrrÚ__init__–szStdioFile.__init__cCs|jS)N)r¤)r›rrrr¦œszStdioFile.encodingcCs|jS)N)r¥)r›rrrr§ szStdioFile.errorscCs d|jS)Nz<%s>)r£)r›rrrr)¤szStdioFile.namecCsdS)NTr)r›rrrÚisatty¨szStdioFile.isattyN)r r¡) rr�ržr¨Úpropertyr¦r§r)r©rrrrrŸ”s     rŸc@seZdZdd„Zdd„ZdS)Ú StdOutputFilecCsdS)NTr)r›rrrÚwritable®szStdOutputFile.writablecCs<|jrtdƒ‚t ||j|j¡ |j|j¡}|j ||j ¡S)Nzwrite to closed file) ÚclosedrŒÚstrÚencoder¦r§Údecoder¢rr£)r›rrrrr±szStdOutputFile.writeN)rr�ržr¬rrrrrr«¬sr«c@s4eZdZdZdd„Zd dd„Zd dd„Zd d „Zd S)Ú StdInputFiler'cCsdS)NTr)r›rrrÚreadable»szStdInputFile.readabler&cCs´|jrtdƒ‚|dkrd}nt|tƒs8tdt|ƒjƒ‚|j}d|_|dkrlxb|j  ¡}|s^P||7}qNWnDx(t |ƒ|kr”|j  ¡}|sŠP||7}qnW||d…|_|d|…}|S)Nzread from closed filer&zmust be int, not r'r) r­rŒÚ isinstancer-r‹rCrÚ _line_bufferr¢Úreadlinery)r›r�ÚresultrrrrÚread¾s,     zStdInputFile.readcCs�|jrtdƒ‚|dkrd}nt|tƒs8tdt|ƒjƒ‚|jpF|j  ¡}|dkrXt |ƒ}|  dd|¡}|dkrv|d}||d…|_|d|…S)Nzread from closed filer&zmust be int, not rÚ rH) r­rŒr³r-r‹rCrr´r¢rµryÚfind)r›r�rZeolrrrrµÕs zStdInputFile.readlinecCs|j ¡dS)N)r¢Úclose)r›rrrrºåszStdInputFile.closeN)r&)r&)rr�ržr´r²r·rµrºrrrrr±¸s   r±c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) rMcCs¨t|ƒ}| d|¡| d¡|_t|jdtjtjƒt_ t |jdtjtjƒt_ t |jdtjdƒt_ t jt_ddl}|j|_tj |_tƒ| d ¡|_t jj|dd d �dS) zOverride base methodrvÚconsoleÚstdinÚstdoutrÚbackslashreplacerNÚinterpgš™™™™™©?)ZmyseqÚwait)Ú ExecutiveÚregisterÚget_remote_proxyr»r±rr¦r§rr¼r«r½rrÚ displayhookÚpydocZ plainpagerZpagerZ _keep_stdinr”r¿Ú RPCHandlerZ getresponse)r›Z executiverÅrrrÚhandleës     zMyHandler.handlecCst d¡dS)z>override SocketIO method - wait for MainThread to shut us downé N)rJrK)r›rrrÚexithookszMyHandler.exithookcCsdat ¡dS)zEOverride SocketIO method - terminate wait on callback and exit threadTN)r:r˜r™)r›rrrÚEOFhook szMyHandler.EOFhookcCsdat ¡dS)zinterrupt awakened threadTN)r:r˜r™)r›rrrÚdecode_interrupthookszMyHandler.decode_interrupthookN)rr�ržrÇrÉrÊrËrrrrrMésrMc@sNeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z ddd„Z dS)rÁcCs&||_tj|_t ¡|_t ¡|_dS)N)rzÚ__main__Ú__dict__ÚlocalsrZCalltiprZ AutoComplete)r›rzrrrr¨s zExecutive.__init__c CsÎy&d|_dazt||jƒWddaXWnœtk r€}z<|jrp|jd}t|tdƒtfƒspt dt |ƒt j d�Wdd}~XYnJt   ¡|_trštƒtƒ|jj d¡}|r¾|jj ¡YnXtƒdS)NTFrz SystemExit: )rz<>)Ú usr_exc_infoÚ interruptablervrÎr;r*r³rCr-r/r®rrr<r:r6r=rzr»Zgetvarr¿Zopen_remote_stack_viewerro)r›ÚcodeÚeZobZjitrrrÚruncodes(  & zExecutive.runcodecCstr t ¡dS)N)rÐr˜r™)r›rrrÚinterrupt_the_server8szExecutive.interrupt_the_servercCst |j|¡S)N)rZstart_debuggerrz)r›Z gui_adap_oidrrrÚstart_the_debugger<szExecutive.start_the_debuggercCs|j |¡dS)zDUnregister the Idb Adapter. Link objects and Idb then subject to GCN)rzZ unregister)r›Z idb_adap_oidrrrÚstop_the_debugger?szExecutive.stop_the_debuggercCs |j |¡S)N)rZ fetch_tip)r›r)rrrÚget_the_calltipCszExecutive.get_the_calltipcCs|j ||¡S)N)rZfetch_completions)r›ZwhatÚmoderrrÚget_the_completion_listFsz!Executive.get_the_completion_listNcCsr|jr|j\}}}ndSd}|dk r0|j |¡}x|rN|jjddkrN|j}q2W|t_|t_t   ||¡}t   |¡S)Nr)rÚrun) rÏrzrÃÚtb_frameÚ f_globalsÚtb_nextrrprqrZ StackTreeItemrZremote_object_tree_item)r›Z flist_oidrertrEZflistÚitemrrrrIs   zExecutive.stackviewer)N) rr�ržr¨rÓrÔrÕrÖr×rÙrrrrrrÁsrÁrÌ)rFzidlelib.idle_test.test_runé)Ú verbosity)N)NN)F)?r…r’Úior r9rr†rJr>Ú_threadr˜r1rZidlelibrrrrrrrrÌrUÚhasattrÚmodulesÚmodÚdelattrr r3rrrr!ZTclr$r%r5r:rÐrFr2rNr=rbror6rVr‰rŽr”r–Z RPCServerrLÚ TextIOBaserŸr«r±rÆrMÚobjectrÁrZunittestrrrrÚst               M$ (! 1-C