
    Bi?                        d Z ddlmZ ddlmZmZmZ ddlmZ ej                  Z		 ddl
mZ 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j.                          ddlmZ 	 ddlZddlmZ ddlmZ ddl m!Z! ejD                  d   dk\  Z#ejD                  d   dk(  xr ejD                  d   dk(  Z$	 	 e% ddl'm(Z(m)Z) ejD                  d   dk\  rddlZe(e_(        nddlZe(e_(         G d de      Z* G d d      Z+d Z,d Z-d Z.d Z/ej`                  dk7  rd Z1nd Z1d  Z2d!ejf                  v rejf                  d!   d"k(  Z4nd#Z4	 	 ejj                  Z5e4rdd$l7m*Z* e5e5e_5        n
	  e8ed%       d' Z9d( Z:d) Z;d* Z<d+ Z=d, Z>d- Z?d. Z@eAd/k(  rddlBZB eBj:                  ej                        e_C         eej                  d0g d1      \  ZEZFdZGdZHdZIeED ]   \  ZJZKeJd2v reKZGeJd3v reKZHeJd4v s eLeK      ZI" eGd5vr ej                  d6       eGd7k(  rCeIs ej                  d6       eHsdd8lmNZN  eNj                         xZHZP eBjz                  eHeI       yeGd9k(  r eBjx                  eI       yyy# e$ r
 ddlmZ Y Pw xY w#  ddlZY xY w# e&$ r ddlm%Z% e%e_%        Y w xY w#  Y xY w# e6$ r dZ5Y cw xY w#  Y PxY w#  d&Z4Y ZxY w):z6
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                   0    e Zd ZdZddZd Zd Zd Zd Zy)	InterpreterInterfacezS
        The methods in this class should be registered in the xml-rpc server.
    Nc                     t        j                  | |||       i | _        | j                          t	        | j                        | _        d| _        y )NF)r   __init__	namespace	save_mainr   interpreter_input_error_printed)self
mainThreadconnect_status_queue
rpc_clients       7/usr/local/lib/python3.12/dist-packages/pydevconsole.pyr   zInterpreterInterface.__init__C   sB     ))$
<PR\]-dnn=$)!    c                     t        dd      }|j                  | _        	 t        | j                  d<   y # t        $ r Y y w xY w)Nz<input>pydevconsole__builtins__)r   __dict__r   r)   	NameError)r!   ms     r%   r   zInterpreterInterface.save_mainJ   s>    Y7	-9DNN>* 		s   3 	??c                 f    t        | j                  |      }|j                          |j                  S N)r   r   runmore)r!   codeFragmentcommands      r%   do_add_execz InterpreterInterface.do_add_execR   s'    $**L9||r&   c                     | j                   S r.   )r   r!   s    r%   get_namespacez"InterpreterInterface.get_namespaceW   s    ~~r&   c                 .    t        j                  d       y )Nr   )sysexitr5   s    r%   closezInterpreterInterface.closeZ   s    r&   )NN)	__name__
__module____qualname____doc__r   r   r3   r6   r:    r&   r%   r   r   >   s     *
r&   r   c                       e Zd ZdZdZy)_ProcessExecQueueHelperNF)r;   r<   r=   _debug_hook_return_control_oscr?   r&   r%   rA   rA   ^   s    Kr&   rA   c                     | t         _        y r.   )rA   rB   )
debug_hooks    r%   set_debug_hookrF   b   s    *4'r&   c                     | j                   rPt        | j                         D ]7  }|t        j                  v s| j                   j	                  |      } |        9 y y r.   )mpl_modules_for_patchingr   r8   modulespop)r   moduleactivate_functions      r%    activate_mpl_if_already_importedrM   f   sS    ++ D DE 	$F$$/$H$H$L$LV$T!!#	$ ,r&   c                 ,     ddl m}  fd} ||       y )Nr   )set_return_control_callbackc                      t         j                  r+t         j                   t         _        t         j                  ry j                  j	                         syy)z A function that the inputhooks can call (via inputhook.stdin_ready()) to find
            out if they should cede control and return TF)rA   rB   rC   
exec_queueempty)r   s   r%   return_controlz4init_set_return_control_back.<locals>.return_controlq   sG     #.. ?V>i>i:i#7&::%%++-r&   )pydev_ipython.inputhookrO   )r   rO   rS   s   `  r%   init_set_return_control_backrU   n   s    C$  /r&   c                     t        |        t        sy t        |        ddlm} t        | j                        D ]-  }|j                  || j                  j                  |             / y )Nr   )import_hook_manager)	rU   r
   rM   _pydev_bundle.pydev_import_hookrW   r   rH   add_module_namerJ   )r   rW   mods      r%   init_mpl_in_consoler[      sY     -%$[1C==> `++C1U1U1Y1YZ]1^_`r&   win32c                     dd l }| dk(  ry	 t        j                  | d       y# t        $ rF}|j                   |j                  k(  rY d }~y|j                   |j
                  k(  rY d }~yY d }~yd }~ww xY w)Nr   TF)errnooskillOSErrorESRCHEPERM)pidr^   errs      r%   
pid_existsrf      sg    
 	!8 	GGCO   	yyEKK'ekk) 	s   # 	A2A-
A--A2c                 0   dd l }|j                  j                  }d}d}d}d}|j                  ||z  d|       }|s|j	                         }||k(  ryy	 |j                  d      }	|j                  |	      }
|j                  ||
      }|s	 |j                  |       yt        |
j                  j                        r5t        |
j                  j                        |k7  r	 |j                  |       y|j                  |       y# |j                  |       w xY w)Nr   i   i   W   i  FT)ctypeswindllkernel32OpenProcessGetLastErrorc_intpointerGetExitCodeProcessCloseHandleboolcontentsvalueint)rd   ri   rk   PROCESS_QUERY_INFORMATION!PROCESS_QUERY_LIMITED_INFORMATIONERROR_INVALID_PARAMETERSTILL_ACTIVEprocessre   zero	exit_codeexit_code_suceededs               r%   rf   rf      s    	==))$*!,2)"&&&'@Cd'dfgilm'')C--
 	*<<?Dt,I!)!<!<Wi!P%    ) i((../C	8J8J8P8P4QUa4a  )H  )   )s   6D AD Dc                    t        |        ddlm} 	 t        t        j
                  j                  dd            }	 |dk7  rt        |      s
t                 |       }t        j                  rt        j                          |r	  |        	 	 | j                  j                  dd      }t!        |d	      r |        n| j#                  |      }#  d}Y xY w#  dd l}|j                          Y fxY w# t        j                  $ r Y w xY w# t$        $ r
 d | _        Y t(        $ r   t+        j,                         \  }}}	j/                  |||	t*        j0                  
       t                Y xY w)Nr   )get_inputhookPYDEV_ECLIPSE_PIDz-1Tg?)blocktimeout__call__)file)r[   rT   r   ru   r_   environgetrf   r9   rA   rB   	traceback	print_excrQ   r   Emptyhasattradd_execKeyboardInterruptbuffer
SystemExitr8   exc_infoprint_exception
__stderr__)
r   r   kill_if_pid_not_alive	inputhookr   code_fragmentr0   typert   tbs
             r%   process_exec_queuer      sO   $5# #BJJNN3F$M N  B&34 "O	"..#//17	 + 6 6 : :u : U }j1 "++M:9 # ""7 !4!4!6 <<  ! 	!%K 		!llnOD%%%dE2CNN%KFsH   )C C C5 +%D CC25DD 
DD E1 AE1IPYTHONENABLETrueT)r   exitfuncFc                      	 ddl }|j                  j                  j                  d       y# t        $ r@ t        |       dk(  rt        j                  | d          Y yt        j                  d       Y yw xY w)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   )java.lang.SystemlangSystemr9   ImportErrorlenr_   _exit)argsjavas     r%   do_exitr   *  sW    		a  t9>HHT!WHHQK	s   ), /A5A54A5c                      ddl } | j                  d      }|j                  | j                         | j	                         }|j                  | j                         | j                  d      }|j                  |       |j                  |       y)zfSets up `thriftpy` logger

    The logger is used in `thriftpy/server.py` for logging exceptions.
    r   N_shaded_thriftpyz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)logging	getLoggersetLevelDEBUGStreamHandler	FormattersetFormatter
addHandler)r   loggerch	formatters       r%   enable_thrift_loggingr   ;  s{    
  12F
OOGMM" 
			 BKK !!"XYI OOI br&   c                       fd}|S )Nc                     | _         S r.   r$   )r$   r   s    r%   server_handler_factoryz=create_server_handler_factory.<locals>.server_handler_factoryU  s    !+r&   r?   )r   r   s   ` r%   create_server_handler_factoryr   T  s     "!r&   c           	      <   | d} t         t        _        ddlm}m} t                |}|}t        t        j                               }t        |j                         t        d| ||t        |            }|j                         \  }}t        |       t!        |       y )Nr   PythonConsoleBackendServicePythonConsoleFrontendService )r   r8   r9   pydev_console.pydev_protocolr   r   r   r   r	   currentThreadr   r6   r   r   getsocknameprintr   )	portr   r   server_serviceclient_servicer   server_socket_server_ports	            r%   start_serverr   [  s    | CHf0N1N
 'y'>'>'@AK +3344R~~_|  ~I  `J  KM #..0NA{	+ {#r&   c                 
   t         t        _        ddlm}m} t                |}t        || |      \  }}t        t        j                         |      }t        |j                         |}|}	t        |||	       t        |       y )Nr   r   r   )r   r8   r9   r   r   r   r   r   r   r	   r   r   r6   r   r   )
hostr   r   r   r   clientserver_transportr   r   server_handlers
             r%   start_clientr     ss     CHf1N.~tTJF&y'>'>'@VTK
 +3340N !N%~~F{#r&   c                      t         r*t        t        d      rt               } | j	                         S 	 t               }ddlm}  ||      S #  Y y xY w)Nr   r   )get_ipython_hidden_vars)IPYTHONr   __builtin__get_interpreterget_ipython_hidden_vars_dictget_ipython'_pydev_bundle.pydev_ipython_console_011r   )r   ipython_shellr   s      r%   r   r     sI    7;6%'7799	'MMW*=99	s   A
 
Ac                      	 t        t        d      } | S # t        $ rG t        d d t	        j
                               } | t        _        t        | j                                Y | S w xY w)Nr   )	getattrr   AttributeErrorr   r	   r   r   r   get_greeting_msg)interpreterInterfaces    r%   r   r     se    7&{MB    73D$	@W@W@YZ"6"33567s    AA$#A$c                 r    t               }|j                  j                  ||       |j                  | |      S r.   )r   r   updategetCompletions)texttokenglobalslocalsr   s        r%   get_completionsr     s4    *,$$++GV<..tU;;r&   __main__zm:h:p)zmode=zhost=zport=)z-mz--mode)z-hz--host)z-pz--port)r   serverr   r   )pydev_localhostr   )Qr>   _pydev_bundle._pydev_getoptr   _pydev_comm.pydev_rpcr   r   r    _pydev_imps._pydev_saved_modulesr   start_new_threadcoder   r   /_pydevd_bundle.pydevconsole_code_for_ironpythonr_   r8   r	   _pydevd_bundle.pydevd_constantsr
   r   _pydevd_bundle.pydevd_utilsr   _pydev_bundler   _pydev_bundle.pydev_importsr   r   builtins_pydev_bundle.pydev_stdinr   !_pydev_bundle.pydev_console_utilsr   !_pydev_bundle.pydev_console_typesr   version_infoIS_PYTHON_3_ONWARDSIS_PY24r   r+   _pydev_bundle.pydev_umdr   r   r   rA   rF   rM   rU   r[   platformrf   r   r   r   r   r   #_pydev_bundle.pydev_ipython_consoledelattrr   r   r   r   r   r   r   r   r;   r(   stdinargvoptlistr   moder   r   optargru   r9   r   get_localhostclient_hostr?   r&   r%   <module>r     s7   3 e e 3** S' 
 
 6 Q 8 %     .# 0 F 5&&q)Q. 


1

"
?s'7'7':a'?	( CA!H!K
3 @   5$00	` <<7>)X-` bjj jj)V3GG	<< L#CLZ("2""$J$<
 < z &&&syy1CI CHHg/JKJGQDDD S""D$$D$$s8D ''xCHHRL5!>!>!>!@@D;!!!$-		!!!$' 
G k  SRRS"#"  (8'(	N  	Gs}   I. &J  6J J- K '	J; .I=<I= J	J"J% !J""J% %J*-J84K 7J88K ;K =K K
