B
    v9al/                 @   s   d dl Z d dlmZ d ZdadZi Zi Zi Zi Z	dd Z
dd ZG d	d
 d
ZG dd dZdd ZG dd dZG dd dZG dd dZG dd dZG dd dZdd Zdd Zdd Zdd  Zed!krd d"lmZ ed#d$d%d& dS )'    N)debuggeridb_adapterZgui_adapterc             C   s   t | }| t|< |S )N)id
frametable)framefid r    /usr/lib/python3.7/debugger_r.py
wrap_frame(   s    r
   c             C   s>   | d krd S | d }t |}|t|< | d | d |f}|S d S )N   r      )r   tracebacktable)info	tracebackZtraceback_idmodified_infor   r   r	   	wrap_info-   s    r   c               @   s   e Zd Zdd ZdddZdS )GUIProxyc             C   s   || _ || _d S )N)connoid)selfr   gui_adap_oidr   r   r	   __init__;   s    zGUIProxy.__init__Nc             C   s&   | j | jd|t|t|fi  d S )Ninteraction)r   
remotecallr   r
   r   )r   messager   r   r   r   r	   r   ?   s    zGUIProxy.interaction)N)__name__
__module____qualname__r   r   r   r   r   r	   r   9   s   r   c               @   s   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 Z
d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" Zd#d$ Zd%d& Zd'd( Zd)S )*
IdbAdapterc             C   s
   || _ d S )N)idb)r   r   r   r   r	   r   H   s    zIdbAdapter.__init__c             C   s   | j   d S )N)r   set_step)r   r   r   r	   r    M   s    zIdbAdapter.set_stepc             C   s   | j   d S )N)r   set_quit)r   r   r   r	   r!   P   s    zIdbAdapter.set_quitc             C   s   | j   d S )N)r   set_continue)r   r   r   r	   r"   S   s    zIdbAdapter.set_continuec             C   s   t | }| j| d S )N)r   r   set_next)r   r   r   r   r   r	   r#   V   s    zIdbAdapter.set_nextc             C   s   t | }| j| d S )N)r   r   
set_return)r   r   r   r   r   r	   r$   Z   s    zIdbAdapter.set_returnc             C   sF   t | }|d krd }nt| }| j||\}}dd |D }||fS )Nc             S   s   g | ]\}}t ||fqS r   )r
   ).0Zframe2kr   r   r	   
<listcomp>e   s    z(IdbAdapter.get_stack.<locals>.<listcomp>)r   r   r   	get_stack)r   r   tbidr   tbstackir   r   r	   r(   ^   s    zIdbAdapter.get_stackc             C   s   dd l }| j||j d S )Nr   )__main__r   run__dict__)r   cmdr-   r   r   r	   r.   h   s    zIdbAdapter.runc             C   s   | j ||}|S )N)r   	set_break)r   filenamelinenomsgr   r   r	   r1   l   s    zIdbAdapter.set_breakc             C   s   | j ||}|S )N)r   clear_break)r   r2   r3   r4   r   r   r	   r5   p   s    zIdbAdapter.clear_breakc             C   s   | j |}|S )N)r   clear_all_file_breaks)r   r2   r4   r   r   r	   r6   t   s    z IdbAdapter.clear_all_file_breaksc             C   s   t | }t||S )N)r   getattr)r   r   namer   r   r   r	   
frame_attrz   s    zIdbAdapter.frame_attrc             C   s"   t | }|j}t|}|t|< |S )N)r   	f_globalsr   	dicttable)r   r   r   dictdidr   r   r	   frame_globals~   s
    zIdbAdapter.frame_globalsc             C   s"   t | }|j}t|}|t|< |S )N)r   f_localsr   r;   )r   r   r   r<   r=   r   r   r	   frame_locals   s
    zIdbAdapter.frame_localsc             C   s"   t | }|j}t|}|t|< |S )N)r   f_coder   	codetable)r   r   r   codecidr   r   r	   
frame_code   s
    zIdbAdapter.frame_codec             C   s   t | }|jS )N)rB   co_name)r   rD   rC   r   r   r	   	code_name   s    zIdbAdapter.code_namec             C   s   t | }|jS )N)rB   co_filename)r   rD   rC   r   r   r	   code_filename   s    zIdbAdapter.code_filenamec             C   s   t dd S )Nz"dict_keys not public or pickleable)NotImplementedError)r   r=   r   r   r	   	dict_keys   s    zIdbAdapter.dict_keysc             C   s   t | }t| S )N)r;   listkeys)r   r=   r<   r   r   r	   dict_keys_list   s    zIdbAdapter.dict_keys_listc             C   s   t | }|| }t|}|S )N)r;   repr)r   r=   keyr<   valuer   r   r	   	dict_item   s    zIdbAdapter.dict_itemN)r   r   r   r   r    r!   r"   r#   r$   r(   r.   r1   r5   r6   r9   r>   r@   rE   rG   rI   rK   rN   rR   r   r   r   r	   r   F   s(   
	r   c             C   s,   t | |}t|}t|}| t| tS )N)r   r   ZIdbr   registeridb_adap_oid)Z
rpchandlerr   Z	gui_proxyr   Zidb_adapr   r   r	   start_debugger   s
    


rU   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )
FrameProxyc             C   s   || _ || _d| _i | _d S )Nr   )_conn_fid_oid
_dictcache)r   r   r   r   r   r	   r      s    zFrameProxy.__init__c             C   sb   |d d dkrt ||dkr(|  S |dkr8|  S |dkrH|  S | j| jd| j|fi S )Nr   _rA   r:   r?   r9   )AttributeError_get_f_code_get_f_globals_get_f_localsrW   r   rY   rX   )r   r8   r   r   r	   __getattr__   s    zFrameProxy.__getattr__c             C   s(   | j | jd| jfi }t| j | j|S )NrE   )rW   r   rY   rX   	CodeProxy)r   rD   r   r   r	   r]      s    zFrameProxy._get_f_codec             C   s"   | j | jd| jfi }| |S )Nr>   )rW   r   rY   rX   _get_dict_proxy)r   r=   r   r   r	   r^      s    zFrameProxy._get_f_globalsc             C   s"   | j | jd| jfi }| |S )Nr@   )rW   r   rY   rX   rb   )r   r=   r   r   r	   r_      s    zFrameProxy._get_f_localsc             C   s2   || j kr| j | S t| j| j|}|| j |< |S )N)rZ   	DictProxyrW   rY   )r   r=   Zdpr   r   r	   rb      s
    


zFrameProxy._get_dict_proxyN)	r   r   r   r   r`   r]   r^   r_   rb   r   r   r   r	   rV      s   rV   c               @   s   e Zd Zdd Zdd ZdS )ra   c             C   s   || _ || _|| _d S )N)rW   rY   _cid)r   r   r   rD   r   r   r	   r      s    zCodeProxy.__init__c             C   sD   |dkr | j | jd| jfi S |dkr@| j | jd| jfi S d S )NrF   rG   rH   rI   )rW   r   rY   rd   )r   r8   r   r   r	   r`      s    zCodeProxy.__getattr__N)r   r   r   r   r`   r   r   r   r	   ra      s   ra   c               @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
rc   c             C   s   || _ || _|| _d S )N)rW   rY   _did)r   r   r   r=   r   r   r	   r     s    zDictProxy.__init__c             C   s   | j | jd| jfi S )NrN   )rW   r   rY   re   )r   r   r   r	   rM     s    
zDictProxy.keysc             C   s   | j | jd| j|fi S )NrR   )rW   r   rY   re   )r   rP   r   r   r	   __getitem__  s    zDictProxy.__getitem__c             C   s   t |d S )N)r\   )r   r8   r   r   r	   r`     s    zDictProxy.__getattr__N)r   r   r   r   rM   rf   r`   r   r   r   r	   rc     s   	rc   c               @   s   e Zd Zdd Zdd ZdS )
GUIAdapterc             C   s   || _ || _d S )N)r   gui)r   r   rh   r   r   r	   r     s    zGUIAdapter.__init__c             C   s    t | j|}| j||| d S )N)rV   r   rh   r   )r   r   r   r   r   r   r   r	   r   !  s    zGUIAdapter.interactionN)r   r   r   r   r   r   r   r   r	   rg     s   rg   c               @   sl   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 Z
dd Zdd Zdd Zdd ZdS )IdbProxyc             C   s   || _ || _|| _d S )N)r   r   shell)r   r   rj   r   r   r   r	   r   )  s    zIdbProxy.__init__c             O   s   | j | j|||}|S )N)r   r   r   )r   Z
methodnameargskwargsrQ   r   r   r	   call.  s    zIdbProxy.callc             C   s$   | j | jd|fi }|| jj_d S )Nr.   )r   Z
asyncqueuer   rj   ZinterpZ
active_seq)r   r0   localsseqr   r   r	   r.   4  s    zIdbProxy.runc                s.     d|j|\}} fdd|D }||fS )Nr(   c                s    g | ]\}}t  j||fqS r   )rV   r   )r%   r   r&   )r   r   r	   r'   <  s    z&IdbProxy.get_stack.<locals>.<listcomp>)rm   rX   )r   r   r)   r+   r,   r   )r   r	   r(   9  s    zIdbProxy.get_stackc             C   s   |  d d S )Nr"   )rm   )r   r   r   r	   r"   ?  s    zIdbProxy.set_continuec             C   s   |  d d S )Nr    )rm   )r   r   r   r	   r    B  s    zIdbProxy.set_stepc             C   s   |  d|j d S )Nr#   )rm   rX   )r   r   r   r   r	   r#   E  s    zIdbProxy.set_nextc             C   s   |  d|j d S )Nr$   )rm   rX   )r   r   r   r   r	   r$   H  s    zIdbProxy.set_returnc             C   s   |  d d S )Nr!   )rm   )r   r   r   r	   r!   K  s    zIdbProxy.set_quitc             C   s   |  d||}|S )Nr1   )rm   )r   r2   r3   r4   r   r   r	   r1   N  s    zIdbProxy.set_breakc             C   s   |  d||}|S )Nr5   )rm   )r   r2   r3   r4   r   r   r	   r5   R  s    zIdbProxy.clear_breakc             C   s   |  d|}|S )Nr6   )rm   )r   r2   r4   r   r   r	   r6   V  s    zIdbProxy.clear_all_file_breaksN)r   r   r   r   rm   r.   r(   r"   r    r#   r$   r!   r1   r5   r6   r   r   r   r	   ri   '  s   ri   c             C   sD   |  ddtfi at| |t}t||}t| |}| t| |S )Nexecstart_the_debugger)r   r   rT   ri   r   ZDebuggerrg   rS   )rpccltZpyshellZ	idb_proxyrh   Zgui_adapr   r   r	   start_remote_debuggerZ  s    

rs   c             C   s   t |  | t d S )N)close_subprocess_debuggerZ
unregisterr   )rr   r   r   r	   close_remote_debuggerr  s    	ru   c             C   s   |  ddtfi  d S )Nrp   Zstop_the_debugger)r   rT   )rr   r   r   r	   rt   ~  s    rt   c             C   s   |  ddtfi }d S )Nrp   rq   )r   r   )rr   Zidb_adap_oid_retr   r   r	   restart_subprocess_debugger  s    
rv   r-   )mainzidlelib.idle_test.test_debuggerr   F)	verbosityexit)typesZidlelibr   Z	debuggingrT   r   r   r;   rB   r   r
   r   r   r   rU   rV   ra   rc   rg   ri   rs   ru   rt   rv   r   Zunittestrw   r   r   r   r	   <module>   s2   m*3