File "RemoteDebugger.cpython-34.pyc"

Full Path: /home/attunedd/public_html/byp/izo/con7ext_sym404/rintoar.txt/opt/alt/python34/lib64/python3.4/idlelib/__pycache__/RemoteDebugger.cpython-34.pyc
File size: 14.31 KB
MIME-type: text/x-bytecode.python
Charset: 8 bit


e f.@s)dZddlZddlmZdZdadZiZiZiZ	iZ
ddZdd	ZGd
ddZ
Gdd
d
ZddZGdddZGdddZGdddZGdddZGdddZddZddZddZd d!ZdS)"aSupport for remote Python debugging.

Some ASCII art to describe the structure:

       IN PYTHON SUBPROCESS          #             IN IDLE PROCESS
                                     #
                                     #        oid='gui_adapter'
                 +----------+        #       +------------+          +-----+
                 | GUIProxy |--remote#call-->| GUIAdapter |--calls-->| GUI |
+-----+--calls-->+----------+        #       +------------+          +-----+
| Idb |                               #                             /
+-----+<-calls--+------------+         #      +----------+<--calls-/
                | IdbAdapter |<--remote#call--| IdbProxy |
                +------------+         #      +----------+
                oid='idb_adapter'      #

The purpose of the Proxy and Adapter classes is to translate certain
arguments and return values that cannot be transported through the RPC
barrier, in particular frame and traceback objects.

N)Debuggeridb_adapterZgui_adaptercCst|}|t|<|S)N)id
frametable)framefidr;/opt/alt/python34/lib64/python3.4/idlelib/RemoteDebugger.py
wrap_frame(s
r
cCsg|dkrdS|d}t|tjs2tt|}|t|<|d|d|f}|SdS)z0replace info[2], a traceback instance, by its IDNr)
isinstancetypes
TracebackTypeAssertionErrorrtracebacktable)info	tracebackZtraceback_id
modified_inforrr		wrap_info-s

rc@s+eZdZddZdddZdS)GUIProxycCs||_||_dS)N)connoid)selfrgui_adap_oidrrr	__init__;s	zGUIProxy.__init__NcCs5|jj|jd|t|t|fidS)Ninteraction)r
remotecallrr
r)rmessagerrrrr	r?szGUIProxy.interaction)__name__
__module____qualname__rrrrrr	r9src@seZdZddZddZddZddZd	d
ZddZd
dZ	ddZ
ddZddZddZ
ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)S)*
IdbAdaptercCs
||_dS)N)idb)rr#rrr	rHszIdbAdapter.__init__cCs|jjdS)N)r#set_step)rrrr	r$MszIdbAdapter.set_stepcCs|jjdS)N)r#set_quit)rrrr	r%PszIdbAdapter.set_quitcCs|jjdS)N)r#set_continue)rrrr	r&SszIdbAdapter.set_continuecCst|}|jj|dS)N)rr#set_next)rrrrrr	r'Vs
zIdbAdapter.set_nextcCst|}|jj|dS)N)rr#
set_return)rrrrrr	r(Zs
zIdbAdapter.set_returncCsat|}|dkrd}n
t|}|jj||\}}dd|D}||fS)NcSs(g|]\}}t||fqSr)r
).0Zframe2krrr	
<listcomp>es	z(IdbAdapter.get_stack.<locals>.<listcomp>)rrr#	get_stack)rrtbidrtbstackirrr	r,^s
	
zIdbAdapter.get_stackcCs&ddl}|jj||jdS)Nr)__main__r#run__dict__)rcmdr1rrr	r2hszIdbAdapter.runcCs|jj||}|S)N)r#	set_break)rfilenamelinenomsgrrr	r5lszIdbAdapter.set_breakcCs|jj||}|S)N)r#clear_break)rr6r7r8rrr	r9pszIdbAdapter.clear_breakcCs|jj|}|S)N)r#clear_all_file_breaks)rr6r8rrr	r:tsz IdbAdapter.clear_all_file_breakscCst|}t||S)N)rgetattr)rrnamerrrr	
frame_attrzs
zIdbAdapter.frame_attrcCs-t|}|j}t|}|t|<|S)N)r	f_globalsr	dicttable)rrrdictdidrrr	
frame_globals~s

	
zIdbAdapter.frame_globalscCs-t|}|j}t|}|t|<|S)N)rf_localsrr?)rrrr@rArrr	frame_localss

	
zIdbAdapter.frame_localscCs-t|}|j}t|}|t|<|S)N)rf_coder	codetable)rrrcodecidrrr	
frame_codes

	
zIdbAdapter.frame_codecCst|}|jS)N)rFco_name)rrHrGrrr		code_names
zIdbAdapter.code_namecCst|}|jS)N)rFco_filename)rrHrGrrr	
code_filenames
zIdbAdapter.code_filenamecCstddS)Nz"dict_keys not public or pickleable)NotImplemented)rrArrr		dict_keysszIdbAdapter.dict_keyscCst|}t|jS)N)r?listkeys)rrAr@rrr	dict_keys_lists
zIdbAdapter.dict_keys_listcCs$t|}||}t|}|S)N)r?repr)rrAkeyr@valuerrr		dict_items

zIdbAdapter.dict_itemN)rr r!rr$r%r&r'r(r,r2r5r9r:r=rBrDrIrKrMrOrRrVrrrr	r"Fs(
	r"cCs>t||}tj|}t|}|jt|tS)a|Start the debugger and its RPC link in the Python subprocess

    Start the subprocess side of the split debugger and set up that side of the
    RPC link by instantiating the GUIProxy, Idb debugger, and IdbAdapter
    objects and linking them together.  Register the IdbAdapter with the
    RPCServer to handle RPC requests from the split debugger GUI via the
    IdbProxy.

    )rrZIdbr"registeridb_adap_oid)Z
rpchandlerrZ	gui_proxyr#Zidb_adaprrr	start_debuggers

rYc@sXeZdZddZddZddZddZd	d
ZddZd
S)
FrameProxycCs(||_||_d|_i|_dS)Nr)_conn_fid_oid
_dictcache)rrrrrr	rs			zFrameProxy.__init__cCs|dddkr%t|n|dkr;|jS|dkrQ|jS|dkrg|jS|jj|jd|j|fiS)Nr_rEr>rCr=)AttributeError_get_f_code_get_f_globals
_get_f_localsr[rr]r\)rr<rrr	__getattr__s


zFrameProxy.__getattr__cCs:|jj|jd|jfi}t|j|j|S)NrI)r[rr]r\	CodeProxy)rrHrrr	ras$zFrameProxy._get_f_codecCs1|jj|jd|jfi}|j|S)NrB)r[rr]r\_get_dict_proxy)rrArrr	rbszFrameProxy._get_f_globalscCs1|jj|jd|jfi}|j|S)NrD)r[rr]r\rf)rrArrr	rcszFrameProxy._get_f_localscCsC||jkr|j|St|j|j|}||j|<|S)N)r^	DictProxyr[r])rrAZdprrr	rfs

zFrameProxy._get_dict_proxyN)	rr r!rrdrarbrcrfrrrr	rZsrZc@s(eZdZddZddZdS)recCs||_||_||_dS)N)r[r]_cid)rrrrHrrr	rs		zCodeProxy.__init__cCs`|dkr.|jj|jd|jfiS|dkr\|jj|jd|jfiSdS)NrJrKrLrM)r[rr]rh)rr<rrr	rdszCodeProxy.__getattr__N)rr r!rrdrrrr	resrec@s@eZdZddZddZddZddZd	S)
rgcCs||_||_||_dS)N)r[r]_did)rrrrArrr	rs		zDictProxy.__init__cCs"|jj|jd|jfiS)NrR)r[rr]ri)rrrr	rQszDictProxy.keyscCs%|jj|jd|j|fiS)NrV)r[rr]ri)rrTrrr	__getitem__szDictProxy.__getitem__cCst|dS)N)r`)rr<rrr	rdszDictProxy.__getattr__N)rr r!rrQrjrdrrrr	rgs	rgc@s(eZdZddZddZdS)
GUIAdaptercCs||_||_dS)N)rgui)rrrlrrr	rs	zGUIAdapter.__init__cCs,t|j|}|jj|||dS)N)rZrrlr)rrrrrrrr	r!szGUIAdapter.interactionN)rr r!rrrrrr	rksrkc@seZdZddZddZddZddZd	d
ZddZd
dZ	ddZ
ddZddZddZ
ddZdS)IdbProxycCs||_||_||_dS)N)rrshell)rrrnrrrr	r)s		zIdbProxy.__init__cOs"|jj|j|||}|S)N)rrr)rZ
methodnameargskwargsrUrrr	call.sz
IdbProxy.callcCs4|jj|jd|fi}||jj_dS)Nr2)rZ
asyncqueuerrnZinterpZ
active_seq)rr4localsseqrrr	r24s!zIdbProxy.runcsAjd|j|\}}fdd|D}||fS)Nr,cs.g|]$\}}tj||fqSr)rZr)r)rr*)rrr	r+<s	z&IdbProxy.get_stack.<locals>.<listcomp>)rqr\)rrr-r/r0r)rr	r,9szIdbProxy.get_stackcCs|jddS)Nr&)rq)rrrr	r&?szIdbProxy.set_continuecCs|jddS)Nr$)rq)rrrr	r$BszIdbProxy.set_stepcCs|jd|jdS)Nr')rqr\)rrrrr	r'EszIdbProxy.set_nextcCs|jd|jdS)Nr()rqr\)rrrrr	r(HszIdbProxy.set_returncCs|jddS)Nr%)rq)rrrr	r%KszIdbProxy.set_quitcCs|jd||}|S)Nr5)rq)rr6r7r8rrr	r5NszIdbProxy.set_breakcCs|jd||}|S)Nr9)rq)rr6r7r8rrr	r9RszIdbProxy.clear_breakcCs|jd|}|S)Nr:)rq)rr6r8rrr	r:VszIdbProxy.clear_all_file_breaksN)rr r!rrqr2r,r&r$r'r(r%r5r9r:rrrr	rm'srmcCsb|jddtfiat||t}tj||}t||}|jt||S)a]Start the subprocess debugger, initialize the debugger GUI and RPC link

    Request the RPCServer start the Python subprocess debugger and link.  Set
    up the Idle side of the split debugger by instantiating the IdbProxy,
    debugger GUI, and debugger GUIAdapter objects and linking them together.

    Register the GUIAdapter with the RPCClient to handle debugger GUI
    interaction requests coming from the subprocess debugger via the GUIProxy.

    The IdbAdapter will pass execution and environment requests coming from the
    Idle debugger GUI to the subprocess debugger via the IdbProxy.

    execstart_the_debugger)rrrXrmrrkrW)rpccltZpyshellZ	idb_proxyrlZgui_adaprrr	start_remote_debuggerZsrwcCst||jtdS)a]Shut down subprocess debugger and Idle side of debugger RPC link

    Request that the RPCServer shut down the subprocess debugger and link.
    Unregister the GUIAdapter, which will cause a GC on the Idle process
    debugger and RPC link objects.  (The second reference to the debugger GUI
    is deleted in PyShell.close_remote_debugger().)

    N)close_subprocess_debuggerZ
unregisterr)rvrrr	close_remote_debuggerrs	
rycCs|jddtfidS)NrtZstop_the_debugger)rrX)rvrrr	rx~srxcCs7|jddtfi}|tks3tddS)Nrtruz Idb restarted with different oid)rrrXr)rvZidb_adap_oid_retrrr	restart_subprocess_debuggersrz)__doc__rZidlelibrZ	debuggingrXrrr?rFrr
rrr"rYrZrergrkrmrwryrxrzrrrr	<module>s.
m*3