B
    ,d.                 @   s6  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	m
Z
mZ d dlmZ d dlmZ d dlmZ e Zddeji d	Zd
ddddddgiZdadd Zde_dd Zde_dd Zd)ddZdd Zed*ddZed+ddZ G dd  d Z!e! Z!d!d" Z"d#d$ Z#d%d& Z$d'd( Z%dS ),    N)adapter)jsonlogsockets)get_global_debugger)absolute_path)hide_debugpy_internalsnoneT)qt
subProcesspython	pythonEnvr
   autoZpysideZpyside2Zpyqt4Zpyqt5c              O   sH   t d| | |dd ytj| |S  tk
r<    Y nX dt_d S )Nz pydevd.settrace(*{0!r}, **{1!r})Znotify_stdinFT)r   debug
setdefaultpydevdsettrace	Exception	_settracecalled)argskwargs r   _/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/debugpy/server/api.pyr   (   s    r   Fc               C   sD   t jr
dS dt _tjdd td tjdk	r@ttjd  dS )z>Starts logging to log.log_dir, if it hasn't already been done.NTzdebugpy.server)prefixzInitial environment:z/debugpy.pydevd.log)ensure_loggingensuredr   Zto_fileZdescribe_environmentlog_dirr   log_tor   r   r   r   r   7   s    

r   c             C   sH   t jrtdtd| f | tjkr>tj jttj	O  _n| t_
d S )Nzlogging has already begunzlog_to{0!r})r   r   RuntimeErrorr   r   sysstderrZlevelssetZLEVELSr   )pathr   r   r   r   E   s    
r   c             K   s   t jrtdt  td| |f | d kr2|} nt| } | | x|  D ]z\}}|t	krlt
d|tt	| }t||k	rt
d||jt|}|d k	r||krt
d|||t	|< qNW d S )Nz debug adapter is already runningzconfigure{0!r}zUnknown property {0!r}z{0!r} must be a {1}z{0!r} must be one of: {1!r})r   r   r   r   r   r   dictupdateitems_config
ValueErrorformattype__name___config_valid_valuesget)
propertiesr   kvexpected_typeZvalid_valuesr   r   r   	configureP   s$    

r2   c                s    fdd}|S )Nc                sL  t jrtdy| \}}W n  tk
r:   | }d|f} Y nX y|  W n tk
rd   tdY nX d|  krzdk sn tdt  td j	| | t
dtt td	d
}|d
krt| dtddd}t rtjttj}|f|d< tdf|d< y | |f|S  tk
rF   tjd j	dd Y nX d S )Nz(this process already has a debug adapterz	127.0.0.1zexpected port or (host, port)r   i   zinvalid port numberz{0}({1!r}, **{2!r})z Initial debug configuration: {0}r
   r	   Fr   T)suspendpatch_multiprocessingZdont_trace_start_patternszdebugpy_launcher.pyZdont_trace_end_patternsz{0}() failed:info)level)r   r   r   r   	__index__r(   r   r   r   r+   r5   r   reprr'   r-   r   Zenable_qt_supportr   osr#   dirnamer   debugpy__file__strZreraise_exception)addressr   _portZqt_modesettrace_kwargsZdebugpy_path)funcr   r   r   j   s:    

z _starts_debugging.<locals>.debugr   )rB   r   r   )rB   r   _starts_debuggingi   s    'rC   c          
   C   s  |r>| \}}t d|| d|d< tf ||ddd| d S dd l}ttddd}yt	j
d	dd
d}W n< tk
r } zt d tdt| W d d }~X Y nX z| \}	}
t d|	|
 | \}}tdtjtjtjdt|
d|dt|d|g
}t jd k	r$|dt jg7 }t dt| d}tjdkrV|dO }|dO }td}t|snd }y>|j|d||datjdkrt   ndt_!t"#tj$ W nB tk
r } z"t jddd td t| W d d }~X Y nX y\|% \}}z>|&d  |'d!d}zt(|) d"}W d |*  X W d t	+| X W nn t,j-k
rz   t jd#dd td$Y nB tk
r } z"t jd%dd td&t| W d d }~X Y nX W d |*  X t d't| d(|krtt|d( yDt|d) d* }t.|d) d+ }t|d, d* }t.|d, d+ }W nJ tk
r } z*t jd-t|dd td.t| W d d }~X Y nX t d/|| tf ||dd|d0| t d1|| ||fS )2Nz2Listening: pydevd without debugpy adapter: {0}:{1}Fr4   )hostr@   wait_for_ready_to_runblock_until_connectedr       hexasciiz	127.0.0.1
   )timeoutz#Can't listen for adapter endpoints:z$can't listen for adapter endpoints: z+Waiting for adapter endpoints on {0}:{1}...r   z--for-serverz--hostz--portz--server-access-tokenz	--log-dirz&debugpy.listen() spawning adapter: {0}win32i   i   r   T)	close_fdscreationflagsenvposixzError spawning debug adapter:r5   )r6   zerror spawning debug adapter: rbzutf-8z)Timed out waiting for adapter to connect:z(timed out waiting for adapter to connectz#Error retrieving adapter endpoints:z$error retrieving adapter endpoints: z$Endpoints received from adapter: {0}errorserverrD   r@   clientz%Error parsing adapter endpoints:
{0}
z!error parsing adapter endpoints: z;Adapter is accepting incoming client connections on {0}:{1})rD   r@   rE   rF   access_tokenz)pydevd is connected to adapter at {0}:{1})/r   r5   r   
subprocesscodecsencoder9   urandomdecoder   create_serverr   Zswallow_exceptionr   r=   getsocknamer'   r-   r    
executabler#   r:   r   r<   r   r   r8   platformboolPopen_adapter_processnamewait
returncoder   Zadd_dont_terminate_child_pidpidaccept
settimeoutmakefileloadsreadcloseZclose_socketsocketrK   int)r>   rA   Zin_process_debug_adapterrD   r@   rV   Zserver_access_tokenZendpoints_listenerexcZendpoints_hostZendpoints_portZadapter_argsrN   Z
python_envsockr?   Zsock_ioZ	endpointsZserver_hostZserver_portZclient_hostZclient_portr   r   r   listen   s    
"


"

&

"rp   c             C   s"   | \}}t f |||d| d S )N)rD   r@   Zclient_access_token)r   )r>   rA   rU   rD   r@   r   r   r   connect&  s    rq   c               @   s    e Zd Zdd Zedd ZdS )wait_for_clientc             C   sF   t   td t }|d kr&tdt }|j| _t	j
|d d S )Nzwait_for_client()z*listen() or connect() must be called first)cancel)r   r   r   r   r   	threadingEventr"   rs   r   Z_wait_for_attach)selfpydbZcancel_eventr   r   r   __call__-  s    
zwait_for_client.__call__c               C   s   t dd S )Nz&wait_for_client() must be called first)r   r   r   r   r   rs   9  s    zwait_for_client.cancelN)r+   
__module____qualname__rx   staticmethodrs   r   r   r   r   rr   ,  s   rr   c               C   s   t  S )N)r   Z_is_attachedr   r   r   r   is_client_connectedA  s    r|   c              C   sp   t   t std d S td t } t j}x"|d k	rV| 	|| j
krV|j}q6W tddd|d d }d S )Nz,breakpoint() ignored - debugger not attachedzbreakpoint()TF)r3   Ztrace_only_current_threadr4   stop_at_frame)r   r|   r   r5   r   r   r    	_getframef_backZget_file_typeZ
PYDEV_FILEr   )rw   r}   r   r   r   
breakpointE  s"    



r   c               C   s   t   td tdd d S )Nzdebug_this_thread()F)r3   )r   r   r   r   r   r   r   r   debug_this_thread^  s    
r   c             C   s2   t   td|  t }| r&|  n|  d S )Nztrace_this_thread({0!r}))r   r   r   r   Zenable_tracingZdisable_tracing)Zshould_tracerw   r   r   r   trace_this_threade  s    
r   )N)F)N)&rW   r9   r   rl   r    rt   r;   r   Zdebugpy.commonr   r   r   Z_pydevd_bundle.pydevd_constantsr   Zpydevd_file_utilsr   Zdebugpy.common.utilr   localZ_tlsr]   r'   r,   ra   r   r   r   r   r   r2   rC   rp   rq   rr   r|   r   r   r   r   r   r   r   <module>   sH   
+ 