U
    Kyh?                     @   s  d Z ddlmZ ddlmZmZmZ ddlmZ ej	Z	zddl
mZ W n  ek
rf   ddlmZ Y nX ddlZddlZddlmZ ddlmZmZ dd	lmZ dd
lmZ e  ddlmZ zddlZW n   ddlZY nX ddlmZ ddlmZ ddl m!Z! ej"d dkZ#ej"d dko0ej"d dkZ$z6ze% W n( e&k
rd   ddlm%Z% e%e_%Y nX W n   Y nX ddl'm(Z(m)Z) ej"d dkrddlZe(e_(nddlZ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j0d!krd"d# Z1nd$d# Z1d%d& Z2d'ej3kr4ej3d' d(kZ4nd)Z4zjz
ej5Z5W n e6k
r^   dZ5Y nX e4rdd*l7m*Z* e5dk	re5e_5nze8ed+ W n   Y nX W n   d,Z4Y nX d-d. Z9d/d0 Z:d1d2 Z;d3d4 Z<d5d6 Z=d7d8 Z>d9d: Z?d;d< Z@eAd=krddlBZBeBejCe_CeejDd>d?d@dAg\ZEZFdZGdZHdZIeED ]<\ZJZKeJdBkrTeKZGn"eJdCkrdeKZHneJdDkr<eLeKZIq<eGdEkreMdF eGdGkreIseMdF eHsddHlmNZN eNO  ZHZPeB=eHeI neGdIkreB<eI dS )Jz6
Entry point module to start the interactive console.
    )
gnu_getopt)make_rpc_clientstart_rpc_server start_rpc_server_and_make_client)thread)InteractiveConsoleN)	threading)INTERACTIVE_MODE_AVAILABLE	dict_keys)save_main_module)fix_getpass)_queue)	BaseStdIn)BaseInterpreterInterface)Command            )execfile)runfile_set_globals_functionc                   @   s:   e Zd ZdZd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   s4   t | ||| i | _|   t| j| _d| _d S )NF)r   __init__	namespace	save_mainr   interpreterZ_input_error_printed)selfZ
mainThreadZconnect_status_queue
rpc_client r   6/usr/local/lib/python3.8/dist-packages/pydevconsole.pyr   C   s
    zInterpreterInterface.__init__c                 C   s:   t dd}|j| _zt| jd< W n tk
r4   Y nX d S )Nz<input>pydevconsole__builtins__)r   __dict__r   r"   	NameError)r   mr   r   r    r   J   s    
zInterpreterInterface.save_mainc                 C   s   t | j|}|  |jS N)r   r   runmore)r   ZcodeFragmentcommandr   r   r    do_add_execR   s    z InterpreterInterface.do_add_execc                 C   s   | j S r&   )r   r   r   r   r    get_namespaceW   s    z"InterpreterInterface.get_namespacec                 C   s   t d d S )Nr   )sysexitr+   r   r   r    closeZ   s    zInterpreterInterface.close)NN)	__name__
__module____qualname____doc__r   r   r*   r,   r/   r   r   r   r    r   >   s   
r   c                   @   s   e Zd ZdZdZdS )_ProcessExecQueueHelperNF)r0   r1   r2   _debug_hook_return_control_oscr   r   r   r    r4   ^   s   r4   c                 C   s
   | t _d S r&   )r4   r5   )Z
debug_hookr   r   r    set_debug_hookb   s    r7   c                 C   s6   | j r2t| j D ] }|tjkr| j |}|  qd S r&   )mpl_modules_for_patchingr
   r-   modulespop)r   moduleZactivate_functionr   r   r     activate_mpl_if_already_importedf   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)r4   r5   r6   
exec_queueemptyr   r   r   r    return_controlq   s    

z4init_set_return_control_back.<locals>.return_control)pydev_ipython.inputhookr=   )r   r=   rA   r   r@   r    init_set_return_control_backn   s    rC   c                 C   sL   t |  tsd S t|  ddlm} t| jD ]}||| j| q.d S )Nr   )import_hook_manager)	rC   r	   r<   Z_pydev_bundle.pydev_import_hookrD   r
   r8   Zadd_module_namer:   )r   rD   modr   r   r    init_mpl_in_console   s    rF   win32c              
   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oskillOSErrorZESRCHEPERM)pidrH   errr   r   r    
pid_exists   s    

rO   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CloseHandleZc_intZpointerZGetExitCodeProcessboolcontentsvalueint)rM   rQ   rS   ZPROCESS_QUERY_INFORMATIONZ!PROCESS_QUERY_LIMITED_INFORMATIONZERROR_INVALID_PARAMETERZSTILL_ACTIVEprocessrN   zero	exit_codeZexit_code_suceededr   r   r    rO      s,    

c           
   	   C   sT  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   dd l}|  Y nX zRz| jjddd}W n tjk
r   Y W q<Y nX t|d	r|  n
| |}W q< tk
r   d | _Y q<Y q< tk
r    Y q<   t \}}}	|j|||	tjd
 t  Y q<X q<d S )Nr   )get_inputhookZPYDEV_ECLIPSE_PIDz-1Tg?)blocktimeout__call__)file)rF   rB   r[   rW   rI   environgetrO   r.   r4   r5   	traceback	print_excr>   r   EmptyhasattrZadd_execKeyboardInterruptbuffer
SystemExitr-   exc_infoprint_exception
__stderr__)
r   r[   Zkill_if_pid_not_aliveZ	inputhookrc   Zcode_fragmentr(   typerV   tbr   r   r    process_exec_queue   sF    

 
ro   ZIPYTHONENABLETrueT)r   exitfuncFc                  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   Nr   )Zjava.lang.SystemlangSystemr.   ImportErrorlenrI   _exit)argsjavar   r   r    do_exit*  s    ry   c                  C   sT   ddl } | d}|| j |  }|| j | d}|| || dS )zfSets up `thriftpy` logger

    The logger is used in `thriftpy/server.py` for logging exceptions.
    r   NZ_shaded_thriftpyz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)logging	getLoggersetLevelDEBUGStreamHandler	FormattersetFormatter
addHandler)rz   loggerch	formatterr   r   r    enable_thrift_logging;  s    


r   c                    s    fdd}|S )Nc                    s
   |  _  S r&   r   r   r@   r   r    server_handler_factoryU  s    z=create_server_handler_factory.<locals>.server_handler_factoryr   )r   r   r   r@   r    create_server_handler_factoryT  s    r   c           	      C   sz   | d krd} t t_ddlm}m} t  |}|}tt	 }t
|j td| ||t|}| \}}t| t| d S )Nr   PythonConsoleBackendServicePythonConsoleFrontendService )ry   r-   r.   pydev_console.pydev_protocolr   r   r   r   r   currentThreadr   r,   r   r   getsocknameprintro   )	portr   r   server_serviceclient_servicer   Zserver_socket_Zserver_portr   r   r    start_server[  s    
r   c           
      C   sj   t t_ddlm}m} t  |}t|| |\}}tt	
 |d}t|j |}|}	t|||	 t| d S )Nr   r   r   )ry   r-   r.   r   r   r   r   r   r   r   r   r   r,   r   ro   )
hostr   r   r   r   clientZserver_transportr   r   Zserver_handlerr   r   r    start_client  s    
r   c                  C   sJ   t rttdrt } |  S zt }ddlm} ||W S    Y nX d S )Nr   r   )get_ipython_hidden_vars)IPYTHONrf   __builtin__get_interpreterZget_ipython_hidden_vars_dictget_ipythonZ'_pydev_bundle.pydev_ipython_console_011r   )r   Zipython_shellr   r   r   r    r     s    
r   c                  C   sJ   zt td} W n6 tk
rD   td d t } | t_t|   Y nX | S )Nr   )	getattrr   AttributeErrorr   r   r   r   r   Zget_greeting_msg)interpreterInterfacer   r   r    r     s    r   c                 C   s    t  }|j|| || |S r&   )r   r   updateZgetCompletions)texttokenglobalslocalsr   r   r   r    get_completions  s    r   __main__zm:h:pzmode=zhost=zport=)z-mz--mode)z-hz--host)z-pz--port)r   serverr\   r   )pydev_localhostr   )Qr3   Z_pydev_bundle._pydev_getoptr   Z_pydev_comm.pydev_rpcr   r   r   Z _pydev_imps._pydev_saved_modulesr   start_new_threadcoder   rt   Z/_pydevd_bundle.pydevconsole_code_for_ironpythonrI   r-   r   Z_pydevd_bundle.pydevd_constantsr	   r
   Z_pydevd_bundle.pydevd_utilsr   Z_pydev_bundler   Z_pydev_bundle.pydev_importsr   r   builtinsZ_pydev_bundle.pydev_stdinr   Z!_pydev_bundle.pydev_console_utilsr   Z!_pydev_bundle.pydev_console_typesr   version_infoZIS_PYTHON_3_ONWARDSZIS_PY24r   r$   Z_pydev_bundle.pydev_umdr   r   r   r4   r7   r<   rC   rF   platformrO   ro   ra   r   rq   r   Z#_pydev_bundle.pydev_ipython_consoledelattrry   r   r   r   r   r   r   r   r0   r!   stdinargvZoptlistr   moder   r   optargrW   r.   r   Zget_localhostZclient_hostr   r   r   r    <module>   s    
,0



%








