U
    /e.                     @   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   sJ   t d| | |dd ztj| |W 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   6/tmp/pip-unpacked-wheel-dg3irmqq/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stderr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| } | | |  D ]z\}}|t	krjt
d|tt	| }t||k	rt
d||jt|}|d k	r||krt
d|||t	|< qLd 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)Z
propertiesr   kvZexpected_typeZvalid_valuesr   r   r   	configureP   s$    

r1   c                    s    fdd}|S )Nc                    sN  t jrtdz| \}}W n  tk
r:   | }d|f} Y nX z|  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< z | |f|W S  tk
rH   tjd j	dd Y nX d S )Nz(this process already has a debug adapter	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   )rD   r   r   rC   r   _starts_debuggingi   s    'rE   c              
   C   s  |r>| \}}t d|| d|d< tf ||ddd| d S dd l}ttddd}zt	j
d	dd
d}W n< tk
r } zt d tdt| W 5 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 }z>|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 5 d }~X Y nX z\|& \}}z>|(d  |)d!d}zt*|+ d"}W 5 |  X W 5 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 5 d }~X Y nX W 5 |  X t d't| d(|krtt|d( zDt|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 5 d }~X Y nX t d/|| tf ||dd|d0| t d1|| ||fS )2Nz2Listening: pydevd without debugpy adapter: {0}:{1}Fr4   )hostrA   wait_for_ready_to_runblock_until_connectedr       hexasciir2   
   )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serverrF   rA   clientz%Error parsing adapter endpoints:
{0}
z!error parsing adapter endpoints: z;Adapter is accepting incoming client connections on {0}:{1})rF   rA   rG   rH   access_tokenz)pydevd is connected to adapter at {0}:{1})/r   r5   r   
subprocesscodecsencoder:   urandomdecoder   create_serverr   Zswallow_exceptionr   r>   closegetsocknamer(   r.   r    
executabler$   r;   r   r=   r   r   r9   platformboolPopen_adapter_processnamewait
returncoder   Zadd_dont_terminate_child_pidpidacceptZclose_socket
settimeoutmakefileloadsreadsocketrM   int)r?   rB   Zin_process_debug_adapterrF   rA   rX   Zserver_access_tokenZendpoints_listenerexcZendpoints_hostZendpoints_portZadapter_argsrP   Z
python_envsockr@   Zsock_ioZ	endpointsZserver_hostZserver_portZclient_hostZclient_portr   r   r   listen   s    
"

   
"
 &

"rr   c                 C   s"   | \}}t f |||d| d S )N)rF   rA   Zclient_access_token)r   )r?   rB   rW   rF   rA   r   r   r   connect&  s    rs   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#   ru   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   ru   9  s    zwait_for_client.cancelN)r,   
__module____qualname__rz   staticmethodru   r   r   r   r   rt   ,  s   rt   c                   C   s   t  S )N)r   Z_is_attachedr   r   r   r   is_client_connectedA  s    r~   c                  C   sl   t   t std d S td t } t j}|d k	rT| 	|| j
krT|j}q4t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   )ry   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_tracery   r   r   r   trace_this_threade  s    
r   )N)F)N)&rY   r:   r   rn   r    rv   r<   r   Zdebugpy.commonr   r   r   Z_pydevd_bundle.pydevd_constantsr   Zpydevd_file_utilsr   Zdebugpy.common.utilr   localZ_tlsr`   r(   r-   rd   r   r   r   r   r   r1   rE   rr   rs   rt   r~   r   r   r   r   r   r   r   <module>   sN   
 
+ 