B YI~d‘Rã@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZdd„Zdd„Zd)dd„ZGdd „d ejƒZd Zd ZGd d „d e jƒZiZe d¡Ze d¡ZGdd„deƒZGdd„deƒZdd„ZGdd„deƒZ Gdd„de j!eƒZ"Gdd„deƒZ#Gdd„deƒZ$dd„Z%dd„Z&Gd d!„d!eƒZ'd"d#„Z(e)d$k�rŒdd%l*m+Z+e+d&d'd(�dS)*éNcCst |¡}|S)N)ÚmarshalÚloads)ÚmsÚco©rú0/opt/alt/python37/lib64/python3.7/idlelib/rpc.pyÚ unpickle_code-s rcCst |¡}t|ffS)N)rÚdumpsr)rrrrrÚ pickle_code3s r cCs$t ¡}t||ƒ}| |¡| ¡S)N)ÚioÚBytesIOÚ CodePicklerÚdumpÚgetvalue)ÚobjZprotocolÚfÚprrrr 9s  r c@s"eZdZejeiZe ej¡dS)r N) Ú__name__Ú __module__Ú __qualname__ÚtypesÚCodeTyper Údispatch_tableÚupdateÚcopyregrrrrr Bs r i z 127.0.0.1c@s6eZdZd dd„Zdd„Zdd„Zdd „Zd d „ZdS) Ú RPCServerNcCs |dkr t}tj |||¡dS)N)Ú RPCHandlerÚ socketserverÚ TCPServerÚ__init__)ÚselfÚaddrZ handlerclassrrrrLszRPCServer.__init__cCsdS)Nr)r rrrÚ server_bindQszRPCServer.server_bindcCs|j |j¡dS)N)ÚsocketZconnectÚserver_address)r rrrÚserver_activateUszRPCServer.server_activatecCs |j|jfS)N)r#r$)r rrrÚ get_request^szRPCServer.get_requestcCs®y‚Wn¢tk r‚YnŽtj}td|d�td|d�tdt ¡j|d�td||d�tdt|ƒ|d�tj |d�td|d�td|d�t   d ¡YnXdS) Nz) ----------------------------------------)ÚfilezUnhandled server exception!z Thread: %szClient Address: z Request: z# *** Unrecoverable, server exiting!z(----------------------------------------r) Ú SystemExitÚsysÚ __stderr__ÚprintÚ threadingÚcurrent_threadÚnameÚreprÚ tracebackÚ print_excÚosÚ_exit)r ÚrequestZclient_addressZerfrrrÚ handle_errorbs     zRPCServer.handle_error)N)rrrrr"r%r&r5rrrrrJs   rc@söeZdZdZd;dd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+Zd,ZdZd-d.„Zd/d0„Zd1d2„Zd3d4„Zd5d6„Zd7d8„Z d9d:„Z!dS)<ÚSocketIOrNcCs@t ¡|_|dk r||_||_|dkr*t}||_i|_i|_dS)N) r,r-Ú sockthreadÚ debuggingÚsockÚ objecttableÚobjtableÚ responsesÚcvars)r r9r;r8rrrr…s zSocketIO.__init__cCs |j}d|_|dk r| ¡dS)N)r9Úclose)r r9rrrr>�szSocketIO.closecCst d¡dS)Nr)r2r3)r rrrÚexithook–szSocketIO.exithookcGsR|js dS|jdtt ¡jƒ}x|D]}|dt|ƒ}q(Wt|tjd�dS)Nú )r') r8ÚlocationÚstrr,r-r.r+r)r*)r ÚargsÚsÚarrrÚdebugšs  zSocketIO.debugcCs||j|<dS)N)r;)r ÚoidÚobjectrrrÚregister¢szSocketIO.registercCs&y |j|=Wntk r YnXdS)N)r;ÚKeyError)r rGrrrÚ unregister¥s zSocketIO.unregisterc Cs¶| d|¡y|\}\}}}}Wntk r4dSX||jkrNdd|ffS|j|}|dkrvi} t|| ƒd| fS|dkr”i} t|| ƒd| fSt||ƒs¬dd|ffSt||ƒ} y^|d krä| ||Ž} t| tƒrÜt | ƒ} d| fS|d k�rt   || ||ff¡d Sdd |fSWnœt k �r,‚Yn†t k �rB‚Ynptk �rX‚YnZtk �r~} zd | fSd} ~ XYn4d}t||| |ftjd�tjtjd�dSdS)Nz localcall:)ÚERRORzBad request formatrLzUnknown object id: %rÚ __methods__ÚOKÚ__attributes__zUnsupported method name: %rÚCALLÚQUEUE)ÚQUEUEDNzUnsupported message type: %sÚCALLEXCzU*** Internal Error: rpc.py:SocketIO.localcall() Object: %s Method: %s Args: %s )r')Ú EXCEPTIONN)rFÚ TypeErrorr;Ú _getmethodsÚ_getattributesÚhasattrÚgetattrÚ isinstanceÚ RemoteObjectÚ remoterefÚ request_queueZputr(ÚKeyboardInterruptÚOSErrorÚ Exceptionr+r)r*r0r1)r Úseqr4ÚhowrGÚ methodnamerCÚkwargsrÚmethodsÚ attributesÚmethodÚretZexÚmsgrrrÚ localcall«sT          zSocketIO.localcallcCs(| d||¡| ||||¡}| |¡S)Nzremotecall:asynccall: )rFÚ asynccallÚ asyncreturn)r rGrcrCrdrarrrÚ remotecallÙszSocketIO.remotecallcCs(| d||¡| ||||¡}| |¡S)Nzremotequeue:asyncqueue: )rFÚ asyncqueuerl)r rGrcrCrdrarrrÚ remotequeueÞszSocketIO.remotequeuecCs`d||||ff}| ¡}t ¡|jkr8t ¡}||j|<| d|||||¡| ||f¡|S)NrPz asynccall:%d:)Únewseqr,r-r7Ú Conditionr=rFÚ putmessage)r rGrcrCrdr4raÚcvarrrrrkãs zSocketIO.asynccallcCs`d||||ff}| ¡}t ¡|jkr8t ¡}||j|<| d|||||¡| ||f¡|S)NrQzasyncqueue:%d:)rpr,r-r7rqr=rFrr)r rGrcrCrdr4rarsrrrrnís zSocketIO.asyncqueuecCs6| d|¡|j|dd�}| d||¡| |¡S)Nz#asyncreturn:%d:call getresponse(): gš™™™™™©?)Úwaitzasyncreturn:%d:response: )rFÚ getresponseÚdecoderesponse)r raÚresponserrrrl÷szSocketIO.asyncreturncCs–|\}}|dkr|S|dkr dS|dkr6| d¡dS|dkrT| d¡| ¡dS|dkrp| d|¡t|ƒ‚|d krˆ| d |¡|‚t||ƒ‚dS) NrNrRrTzdecoderesponse: EXCEPTIONÚEOFzdecoderesponse: EOFrLzdecoderesponse: Internal ERROR:rSzdecoderesponse: Call Exception:)rFÚdecode_interrupthookÚ RuntimeErrorÚ SystemError)r rwrbÚwhatrrrrvýs&    zSocketIO.decoderesponsecCst‚dS)N)ÚEOFError)r rrrryszSocketIO.decode_interrupthookcCs6y|jddd�Wntk r0| d¡dSXdS)Ngš™™™™™©?)Úmyseqrtzmainloop:return)rur}rF)r rrrÚmainloops  zSocketIO.mainloopcCs6| ||¡}|dk r2|\}}|dkr2|| |¡f}|S)NrN)Ú _getresponseÚ_proxify)r r~rtrwrbr|rrrru#s  zSocketIO.getresponsecCs4t|tƒrt||jƒSt|tƒr0tt|j|ƒƒS|S)N)rZÚ RemoteProxyÚRPCProxyrGÚlistÚmapr�)r rrrrr�+s    zSocketIO._proxifycCs | d|¡t ¡|jkr:x€| ||¡}|dk r|SqWnb|j|}| ¡x||jkrb| ¡qNW|j|}| d||f¡|j|=|j|=|  ¡|SdS)Nz_getresponse:myseq:z-_getresponse:%s: thread woke up: response: %s) rFr,r-r7Ú pollresponser=Úacquirer<rtÚrelease)r r~rtrwrsrrrr€3s"        zSocketIO._getresponsecCs|jd|_}|S)Né)Únextseq)r rarrrrpIszSocketIO.newseqc CsÔ| d|d¡y t|ƒ}Wn,tjk rJtdt|ƒtjd�‚YnXt  dt |ƒ¡|}xnt |ƒdkrÎy0t   g|j gg¡\}}}|j   |dt…¡}Wn ttfk r¾tdƒ‚YnX||d…}qbWdS)Nzputmessage:%d:rzCannot pickle:)r'zr?rFrIrKrjrmrorkrnrlrvryrrur�r€rprrr›rœr¡rŸršržr¥r†r©r¬rrrrr6�s> .   I r6c@s eZdZdS)r[N)rrrrrrrr[êsr[cCst|ƒ}|t|<t|ƒS)N)Úidr:r‚)rrGrrrr\ïsr\c@seZdZdd„ZdS)r‚cCs ||_dS)N)rG)r rGrrrr÷szRemoteProxy.__init__N)rrrrrrrrr‚õsr‚c@s,eZdZdZdZdd„Zdd„Zdd„Zd S) rFz#ScCs(||_t ||¡tj ||||¡dS)N)Zcurrent_handlerr6rrÚBaseRequestHandler)r r9r!Zsvrrrrrs zRPCHandler.__init__cCs | ¡dS)N)r)r rrrÚhandleszRPCHandler.handlecCs t||ƒS)N)rƒ)r rGrrrÚget_remote_proxy szRPCHandler.get_remote_proxyN)rrrr8rArr°r±rrrrrûs rc@s:eZdZdZdZdZejejfdd„Z dd„Z dd „Z d S) Ú RPCClientFz#Cr cCs*t ||¡|_|j |¡|j d¡dS)Nr )r#Úlistening_sockZbindZlisten)r ÚaddressZfamilyÚtyperrrrs zRPCClient.__init__cCsV|j ¡\}}|jr$td|tjd�|dtkr>t ||¡ntd|tjd�t ‚dS)Nz****** Connection request from )r'rz** Invalid host: ) r³Úacceptr8r+r)r*Ú LOCALHOSTr6rr_)r Z working_sockr´rrrr¶s zRPCClient.acceptcCs t||ƒS)N)rƒ)r rGrrrr±#szRPCClient.get_remote_proxyN) rrrr8rArŠr#ZAF_INETZ SOCK_STREAMrr¶r±rrrrr² s  r²c@s4eZdZdZdZdd„Zdd„Zdd„Zdd „ZdS) rƒNcCs||_||_dS)N)ÚsockiorG)r r¸rGrrrr,szRPCProxy.__init__cCsp|jdkr| ¡|j |¡r.t|j|j|ƒS|jdkr@| ¡||jkrd|j |jd|fi¡}|St |ƒ‚dS)NÚ__getattribute__) Ú_RPCProxy__methodsÚ_RPCProxy__getmethodsr§Ú MethodProxyr¸rGÚ_RPCProxy__attributesÚ_RPCProxy__getattributesrmr’)r r.ÚvaluerrrÚ __getattr__0s      zRPCProxy.__getattr__cCs|j |jddi¡|_dS)NrOr)r¸rmrGr½)r rrrZ__getattributes>s zRPCProxy.__getattributescCs|j |jddi¡|_dS)NrMr)r¸rmrGrº)r rrrZ __getmethodsBs zRPCProxy.__getmethods) rrrrºr½rrÀr¾r»rrrrrƒ's rƒcCsTx*t|ƒD]}t||ƒ}t|ƒr d||<q Wt|tƒrPx|jD]}t||ƒq>WdS)Nr )ÚdirrYÚcallablerZrµÚ __bases__rV)rrer.ÚattrÚsuperrrrrVFs    rVcCs0x*t|ƒD]}t||ƒ}t|ƒs d||<q WdS)Nr )rÁrYrÂ)rrfr.rÄrrrrWQs rWc@seZdZdd„Zdd„ZdS)r¼cCs||_||_||_dS)N)r¸rGr.)r r¸rGr.rrrrZszMethodProxy.__init__cOs|j |j|j||¡}|S)N)r¸rmrGr.)r rCrdr¿rrrÚ__call___szMethodProxy.__call__N)rrrrrÆrrrrr¼Xsr¼cCs~|dkr dSdt_t|ƒ}ytj |¡Wn<tk rfd}| |d¡}| |d¡}tj |¡YnXtj d¡|t_dS)NÚasciiÚbackslashreplaceÚstrictÚ ) ÚbuiltinsÚ_r/r)ÚstdoutÚwriteÚUnicodeEncodeErrorÚencodeÚdecode)r¿ÚtextÚencodingÚbytesrrrÚ displayhookgs   rÕÚ__main__)Úmainzidlelib.idle_test.test_rpcr‰)Ú verbosity)N),rËrr rr2r‹r¨r�r#rrŒr)r,r0rrr r ZPicklerr r‘r·rrr:ZQueuer]r¦rHr6r[r\r‚r¯rr²rƒrVrWr¼rÕrZunittestr×rrrrÚsP 2  k