U
    /efR                     @   s  d Z ddlmZmZ ddlmZ ejZddlmZ ej	Z	ej
Z
ddlZddlZddlmZ ddlmZ ddlZddlmZ dd	lmZ dd
lmZmZ ddlZddlmZmZ ddlmZ G dd dZzddlmZ ee_W n   Y nX ddlm Z m!Z! ej"d dkre e_ ne e_ G dd deZ#G dd dZ$dd Z%dd Z&dd Z'dd Z(ej)dkre*edszd d! Z+nd"d! Z+nd#d! Z+d$d% Z,d&ej-krej-d& d'kZ.nd(Z.zjz
ej/Z/W n e0k
r   dZ/Y nX e.rdd)l1m#Z# e/dk	r e/e_/nze2ed* W n   Y nX W n   d(Z.Y nX d+d, Z3d-d. Z4d/d0 Z5d1d2 Z6d3d4 Z7d5d6 Z8d7d8 Z9G d9d: d:e
Z:d;d< Z;e<d=krddl=Z=e=ej>e_>ej?d>d \Z@ZAdd?lmBZB eCe@dkreCeAdkreBD \ZEZFeFZAe=5eBG eCe@eCeA dS )@z6
Entry point module to start the interactive console.
    )thread_code)	IS_JYTHON)InteractiveConsoleN)	threading)INTERACTIVE_MODE_AVAILABLE)	pydev_log)pydevd_save_locals)Exec_queue)BaseInterpreterInterface	BaseStdIn)CodeFragmentc                   @   s,   e Zd Zdd Zdd ZeeZdd ZdS )Commandc                 C   s   || _ || _d| _dS )za
        :type code_fragment: CodeFragment
        :type interpreter: InteractiveConsole
        N)interpretercode_fragmentmore)selfr   r    r   I/tmp/pip-unpacked-wheel-dg3irmqq/debugpy/_vendored/pydevd/pydevconsole.py__init__"   s    zCommand.__init__c                 C   s   | j rd}ntrd}nd}|S )NZsingleexec)Zis_single_liner   )r   symbolr   r   r   symbol_for_fragment+   s    zCommand.symbol_for_fragmentc                 C   s*   | j j}| | j }| j|d|| _d S )Nz<input>)r   textr   r   Z	runsourcer   )r   r   r   r   r   r   run7   s    zCommand.runN)__name__
__module____qualname__r   r   staticmethodr   r   r   r   r   r       s   	
r   )execfile)runfile_set_globals_function   c                   @   sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )InterpreterInterfacezS
        The methods in this class should be registered in the xml-rpc server.
    Nc                 C   s6   t | || || _|| _i | _t| j| _d| _d S )NF)r   r   client_porthost	namespacer   r   Z_input_error_printed)r   r&   r%   Z
mainThreadZconnect_status_queuer   r   r   r   U   s    zInterpreterInterface.__init__c                 C   s   t | j|}|  |jS N)r   r   r   r   )r   ZcodeFragmentcommandr   r   r   do_add_exec]   s    z InterpreterInterface.do_add_execc                 C   s   | j S r(   )r'   r   r   r   r   get_namespaceb   s    z"InterpreterInterface.get_namespacec                 C   sB   z$ddl m} || jd }||W S    t  g  Y S X d S )Nr   )	Completer)Z_pydev_bundle._pydev_completerr-   r'   Zcompleter   	exception)r   r   Zact_tokr-   Z	completerr   r   r   getCompletionse   s    z#InterpreterInterface.getCompletionsc                 C   s   t d d S )Nr   )sysexitr+   r   r   r   closeo   s    zInterpreterInterface.closec                 C   s   dS )NzPyDev console: starting.
r   r+   r   r   r   get_greeting_msgr   s    z%InterpreterInterface.get_greeting_msg)N)
r   r   r   __doc__r   r*   r,   r/   r2   r3   r   r   r   r   r$   P   s   

r$   c                   @   s   e Zd ZdZdZdS )_ProcessExecQueueHelperNF)r   r   r   _debug_hook_return_control_oscr   r   r   r   r5   v   s   r5   c                 C   s
   | t _d S r(   )r5   r6   )Z
debug_hookr   r   r   set_debug_hook{   s    r8   c                 C   s6   | j r2t| j D ] }|tjkr| j |}|  qd S r(   )mpl_modules_for_patchinglistr0   modulespop)r   moduleZactivate_functionr   r   r    activate_mpl_if_already_imported   s
    
r>   c                    s$   ddl m}  fdd}|| d S )Nr   )set_return_control_callbackc                      s,   t jrt j t _t jrdS  j s(dS dS )z A function that the inputhooks can call (via inputhook.stdin_ready()) to find
            out if they should cede control and return TF)r5   r6   r7   
exec_queueemptyr   r   r   r   return_control   s    

z4init_set_return_control_back.<locals>.return_control)pydev_ipython.inputhookr?   )r   r?   rC   r   rB   r   init_set_return_control_back   s    rE   c                 C   sL   t |  tsd S t|  ddlm} t| jD ]}||| j| q.d S )Nr   )import_hook_manager)	rE   r   r>   Z_pydev_bundle.pydev_import_hookrF   r:   r9   Zadd_module_namer<   )r   rF   modr   r   r   init_mpl_in_console   s    rH   win32killc                 C   s   dS )NTr   )pidr   r   r   
pid_exists   s    rL   c              
   C   s   dd l }| dkrdS zt| d W nX tk
r| } z:|j |jkrLW Y (dS |j |jkrbW Y dS W Y dS W 5 d }~X Y nX dS d S )Nr   TF)errnoosrJ   OSErrorZESRCHEPERM)rK   rM   errr   r   r   rL      s    

c              	   C   s   dd l }|jj}d}d}d}d}|||B d| }|sN| }||krJdS dS zT|d}	||	}
|||
}|s|W ,dS t	|
j
jrt|
j
j|krW dS W 5 || X dS )Nr   i   i   W   i  FT)ctypeswindllkernel32ZOpenProcessZGetLastErrorZCloseHandlec_intpointerZGetExitCodeProcessboolcontentsvalueint)rK   rS   rU   ZPROCESS_QUERY_INFORMATIONZ!PROCESS_QUERY_LIMITED_INFORMATIONZERROR_INVALID_PARAMETERZSTILL_ACTIVEprocessrQ   ZzeroZ	exit_codeZexit_code_suceededr   r   r   rL      s,    

c                 C   s0  t |  ddlm} zttjdd}W n   d}Y nX |dkrRt|sRt  | }t	j
rft	
  |rz
|  W n   t  Y nX zPz| jjddd}W n tjk
r   Y W q<Y nX t|r|  n
| |}W q< tk
r   d | _Y q<Y q< tk
r    Y q<   td	 t  Y q<X q<d S )
Nr   )get_inputhookZPYDEV_ECLIPSE_PIDz-1Tg?)blocktimeoutz'Error processing queue on pydevconsole.)rH   rD   r]   r[   rN   environgetrL   r1   r5   r6   r   r.   r@   r   Emptycallableadd_execKeyboardInterruptbuffer
SystemExit)r   r]   Zkill_if_pid_not_aliveZ	inputhookr   r   r   r   r   process_exec_queue   sB    


ri   ZIPYTHONENABLETrueF)r$   exitfuncc                  G   sZ   zddl }|jjd W n: tk
rT   t| dkrFt| d  n
td Y nX dS )z
        We have to override the exit because calling sys.exit will only actually exit the main thread,
        and as we're in a Xml-rpc server, that won't work.
    r   N   )Zjava.lang.SystemlangSystemr1   ImportErrorlenrN   _exit)argsjavar   r   r   do_exitM  s    rt   c           	   	   C   s  z|dkrd} ddl m} z|| |fddd}W n0   tjd| ||jf  tj   Y nX t|j |	|j
 |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |	|j |dkrd|j \}}t| t|j z|  W nD   t d }d}z|j d d	k}W n   Y nX |s Y nX qd|W S    t!"  |# }|d k	r|$d Y nX d S )
Nr    )SimpleXMLRPCServerFT)ZlogRequests
allow_nonezEError starting server with host: "%s", port: "%s", client_port: "%s"
rl      )%_pydev_bundle.pydev_importsrv   r0   stderrwriter%   flushr"   r,   Zregister_functionZexecLineZexecMultipleLinesr/   ZgetFrameZgetVariableZchangeVariableZgetDescriptionr2   Z	interruptZ	handshakeZconnectToDebuggerZhelloZgetArrayevaluateZShowConsoleZloadFullValueZ	enableGuisocketgetsocknameprintserve_foreverexc_inforr   r   r.   Zget_connect_status_queueput)	r&   portr   ZXMLRPCServerserverheretryZconnection_queuer   r   r   start_console_servera  sb    




r   c                 C   s2   t t_t| |t }tt| ||f t| d S r(   )	rt   r0   r1   r$   r   current_threadstart_new_threadr   ri   )r&   r   r%   r   r   r   r   start_server  s    r   c                  C   s    t rttdrt } |  S d S Nr   )IPYTHONhasattr__builtin__get_interpreterZget_ipython_hidden_vars_dictrB   r   r   r   get_ipython_hidden_vars  s    r   c                  C   sX   zt td} W nD tk
rR   td d t } | t_tj	| 
  tj  Y nX | S r   )getattrr   AttributeErrorr$   r   r   r   r0   rz   r{   r3   r|   )interpreterInterfacer   r   r   r     s    r   c                 C   s    t  }|j|| || |S r(   )r   r   updater/   )r   tokenglobalslocalsr   r   r   r   get_completions  s    r   c                 C   s6   t  }|j|| || }|r&dS || | dS )NTF)r   r   r   	need_morere   )coder   r   Zdebuggerr   resr   r   r   	exec_code  s    
r   c                   @   s4   e Zd ZdZdddZdd ZdddZd	d
 ZdS )ConsoleWriterr   Nc                 C   s   t | | d S r(   )InteractiveInterpreterr   )r   r   r   r   r   r     s    zConsoleWriter.__init__c                 C   s8   | j dkr|  j d8  _ n|dkr(d| _ tj| d S )Nr   rl   #Traceback (most recent call last):
)skipr0   rz   r{   )r   datar   r   r   r{     s
    
zConsoleWriter.writec                 C   s   t  \}}}|t _|t _|t _|rp|tkrpz|j\}\}}}}	W n tk
rV   Y nX t|||||	f}|t _t	||}
t j
d|
 dS )z,Display the syntax error that just occurred.ru   N)r0   r   	last_type
last_valuelast_tracebackSyntaxErrorrr   
ValueError	tracebackformat_exception_onlyrz   r{   join)r   filenametyperZ   tbmsgZdummy_filenamelinenooffsetliner:   r   r   r   showsyntaxerror  s    zConsoleWriter.showsyntaxerrorc                 O   s   zdt  \}}}|t _|t _|t _t|}|dd= t|}|rP|dd |	t
|| W 5 d }}X t jd| dS )z)Display the exception that just occurred.Nrl   r   r   ru   )r0   r   r   r   r   r   
extract_tbformat_listinsertextendr   rz   r{   r   )r   rr   kwargsZtblistr   r   rZ   linesr   r   r   showtraceback  s    



zConsoleWriter.showtraceback)N)N)r   r   r   r   r   r{   r   r   r   r   r   r   r     s
   
	
r   c           
   
   C   s  | | |}|ddk}t|dd}i }||j ||j trptt	|||j|}|slt
| |S t }|szt|}	W n$ tttfk
r   |  Y dS X |	dkrdS n|}	zt|	||j W n( tk
r    Y n   |  Y nX t
| dS )z<returns 'False' in case expression is partially correct
    z@LINE@rl   
FNT)Z
find_framecountstrreplacer   	f_globalsf_localsr   r   r   r	   Zsave_localsr   compile_commandOverflowErrorr   r   r   r
   rh   r   )
Z	thread_idZframe_idZ
expressionZdbgframeZis_multilineZupdated_globalsr   r   r   r   r   r   console_exec  s:    

r   __main__rl   )pydev_localhost)Hr4   Z"_pydev_bundle._pydev_saved_modulesr   r   Z_pydevd_bundle.pydevd_constantsr   r   Z _pydevd_bundle.pydevconsole_coder   r   r   rN   r0   r   r   r   Z_pydev_bundler   Z_pydevd_bundler	   ry   r
   r   builtinsr   Z!_pydev_bundle.pydev_console_utilsr   r   r   r   r    Z_pydev_bundle.pydev_umdr!   r"   version_infor$   r5   r8   r>   rE   rH   platformr   rL   ri   ra   r   rk   r   Z#_pydev_bundle.pydev_ipython_consoledelattrrt   r   r   r   r   r   r   r   r   r   Zpydevconsolestdinargvr   r%   r   r[   Zget_socket_namer   pZget_localhostr   r   r   r   <module>   s   
&

!+/



F75
