
    "ejS                        d Z ddlm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
 ddlmZmZ ddlmZ ddlmZ ddlmc mZ dd	lmZ 	 dd
lmZmZ ddlmZ ddlmZ eZ djC                  e       Z"d Z#d Z$ G d de
      Z% G d de
      Z& G d de      Z' ejP                  e'        G d d      Z) G d d      Z*d Z+y# e$ r dd
lmZmZ Y w xY w)zjInterface to TerminalInteractiveShell for PyDev Interactive Console frontend
   for IPython 0.11 to 1.0+.
    )print_functionN)
UsageError)IPCompleter)InteractiveShellInteractiveShellABC)default_banner_parts)StrDispatch)TerminalInteractiveShell)CBoolUnicode)release)	xmlrpclib c                 ^    t        |t              r|j                  d|      }t        |       y)z Run a string through pager z
text/plainN)
isinstancedictgetprint)selfstrngargskwargss       I/usr/lib/python3/dist-packages/_pydev_bundle/pydev_ipython_console_011.pyshow_in_pagerr   +   s%     %		,.	%L    c                      d fd	}|S )Nc                     |d}t         j                  j                  |       } t        j                  dd      }|j                  | t        |             |rt        d       yy)z Open an editor in PyDev Nr   zhttp://:zPress Enter when done editing:)ospathabspathr   ServerIPythonEditorstrinput)filenamelinewaitserverpydev_client_port
pydev_hosts       r   call_editorz'create_editor_hook.<locals>.call_editor8   s^    <D 77??8, !!J@Q"RSXs4y123 r   )r   T )r+   r*   r,   s   `` r   create_editor_hookr.   6   s    4& r   c                       e Zd Zd Zy)PyDevIPCompleterc                     t        j                  | g|i | | j                  | j                  v r&| j                  j	                  | j                         yyz Create a Completer that reuses the advanced completion support of PyDev
            in addition to the completion support provided by IPython N)r   __init__python_matchesmatchersremover   r   r   s      r   r3   zPyDevIPCompleter.__init__P   sK     	T3D3F3$--/MM  !4!45 0r   N)__name__
__module____qualname__r3   r-   r   r   r0   r0   N   s    6r   r0   c                   F    e Zd Zd Zed        Zej                  d        Zy)PyDevIPCompleter6c                 6    t        j                  | g|i | yr2   )r   r3   r7   s      r   r3   zPyDevIPCompleter6.__init__\   s     	T3D3F3r   c                 ^    | j                   | j                  | j                  | j                  gS )z*All active matcher routines for completion)file_matchesmagic_matchespython_func_kw_matchesdict_key_matchesr   s    r   r5   zPyDevIPCompleter6.matchersa   s2    
 ''!!	
 	
r   c                      y Nr-   )r   values     r   r5   zPyDevIPCompleter6.matchersl   s     	r   N)r8   r9   r:   r3   propertyr5   setterr-   r   r   r<   r<   Z   s3    4
 
 
 __ r   r<   c                        e Zd Z eedd      Z ed      Z ed      Z ed      Z	 ed      Z
 ed      Z ed      Zedd       Z fdZ fdZdd	Zd
 Zd Zd Zd Zd Zd Zd Z fdZ fdZ xZS )PyDevTerminalInteractiveShellTz7The part of the banner to be printed before the profile)confighelpFNoColorc                 `    ddl m} 	  || |      S # t        $ r}t        d|z        d}~ww xY w)z0Switch amongst GUI input hooks by name.
        r   )
enable_guiz%sN)pydev_ipython.inputhookrO   
ValueErrorr   )guiappreal_enable_guies       r   rO   z(PyDevTerminalInteractiveShell.enable_gui   s9    
 	J	'"3,, 	'TAX&&	's    	-(-c                 `    d| j                   j                  _        t        t        |           y )NF)rK   HistoryManagerenabledsuperrJ   init_historyr   	__class__s    r   rZ   z*PyDevTerminalInteractiveShell.init_history   s%     .3""*+T?Ar   c                 V    t         t        |           | j                  dt               y )Nr   )rY   rJ   
init_hooksset_hookr   r[   s    r   r^   z(PyDevTerminalInteractiveShell.init_hooks   s    +T=?o}5r   c                     	 |t        j                         \  }}}n|\  }}}|t        j                  |||       y y # t        $ r Y y w xY wrE   )sysexc_inforQ   	tracebackprint_exception)r   	exc_tupler   r   etyperF   tbs          r   showtracebackz+PyDevTerminalInteractiveShell.showtraceback   s]    	 #&<<> ub#, ub >%%eUB7   		s   !> 	A
	A
c                     t        | | j                  | j                  | j                  j                  | j
                  |       }|S )N)shell	namespaceglobal_namespacealias_tableuse_readlineparent)r0   user_nsuser_global_nsalias_managerrm   has_readliner   	completers     r   _new_completer_100z0PyDevTerminalInteractiveShell._new_completer_100   sA    $4'+||.2.A.A)-););)G)G*.*;*;$(	 r   c                 b    t        | | j                  | j                  | j                  |       }|S )Nrj   rk   rl   rn   ro   )r0   rp   rq   rs   rt   s     r   _new_completer_234z0PyDevTerminalInteractiveShell._new_completer_234   s2    $4'+||.2.A.A*.*;*;$(		 r   c                 N    t        | | j                  | j                  d|       }|S NFrx   )r0   rp   rq   rt   s     r   _new_completer_500z0PyDevTerminalInteractiveShell._new_completer_500   s,    $4/3||6:6I6I27,0	'	 r   c                 N    t        | | j                  | j                  d|       }|S r{   )r<   rp   rq   rt   s     r   _new_completer_600z0PyDevTerminalInteractiveShell._new_completer_600   s,    %D/3||6:6I6I27,0	'	 r   c                    ddl m}m}m} 	 ddl m} | j                  j                  | j                         | j                  j                  dt                     }|| j                  d<   || j                  _        | j                  d|d       | j                  d|d       | j                  d|d       | j                  d|d	       |r| j                  d|d
       y y # t
        $ r d }Y w xY w)Nr   )module_completermagic_run_completercd_completer)reset_completercomplete_commandimport)str_keyfromz%runz%cdz%reset)IPython.core.completerlibr   r   r   r   ImportErrorconfigurablesappend	Completerstrdispatchersr   r	   custom_completersr_   )r   r   r   r   r   sdisps         r   add_completer_hooksz1PyDevTerminalInteractiveShell.add_completer_hooks   s    aa	#A 	!!$..1 ##''(:KMJ27./+0((*:HM(*:FK(*=vN(,FMM,oxMP   	#"O	#s   C# #C10C1c                    t         j                  dk\  r| j                         | _        nzt         j                  dk\  r| j	                         | _        nQt         j                  dk\  r| j                         | _        n(t         j                  dk\  r| j                         | _        t        | j                  d      rd| j                  _        | j                          t         j                  dk  r| j                  r| j                          yyy)	zInitialize the completion machinery.

        This creates a completer that provides the completions that are
        IPython specific. We use this to supplement PyDev's core code
        completions.
                    use_jediF   N)IPythonRelease_version_majorr~   r   r|   ry   rv   hasattrr   r   rs   set_readline_completerrC   s    r   init_completerz,PyDevTerminalInteractiveShell.init_completer  s     ((A-!446DN**a/!446DN**a/!446DN**a/!446DN4>>:.&+DNN#  "((A-   ++- !	 .r   c                 .    t        j                  |        y rE   )r   
init_aliasrC   s    r   r   z(PyDevTerminalInteractiveShell.init_alias(  s     	##D)r   c                 @    t         t        |           t        d       y)z@ Ask the shell to exit. Can be overiden and used as a callback. z<To exit the PyDev Console, terminate the console within IDE.N)rY   rJ   ask_exitr   r[   s    r   r   z&PyDevTerminalInteractiveShell.ask_exit0  s    * 	+T;=LMr   c                 *    t         t        |           y rE   )rY   rJ   init_magicsr[   s    r   r   z)PyDevTerminalInteractiveShell.init_magicsL  s    +T>@r   )NNrE   )r8   r9   r:   r   default_pydev_bannerbanner1r   
term_titlereadline_use
autoindentcolors_forcecolorssimple_promptstaticmethodrO   rZ   r^   rh   rv   ry   r|   r~   r   r   r   r   r   __classcell__)r\   s   @r   rJ   rJ   r   s    *4JG uJ <L uJ ;LYF $KM ' 'B682Q*.J*N8A Ar   rJ   c                   f    e Zd Zej                  Zd Zd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zy)_PyDevFrontEndc                     t        t        d      r&t        j                  t        j                  | _        nt        j	                         | _        d| _        g | _        y )N	_instancer   )r   rJ   r   ipythoninstance_curr_exec_line_curr_exec_linesrC   s    r   r3   z_PyDevFrontEnd.__init__[  sF    0+>C`CjCjCv8BBDL8AACDL  "r   c                 8    | j                   j                          y rE   )r   show_bannerrC   s    r   r   z_PyDevFrontEnd.show_bannere  s      "r   c                    | j                   j                  }t        |j                               D ]  \  }}||vs|||<    | j                   j                  j                          | j                   j                  j                  |       || j                   _        t        | j                   d      rGt        | j                   j                  d      r&d| j                   j                  j                  _
        y y y )Nhistory_managersave_threadT)r   rp   listitemsrq   clearupdater   r   r   pydev_do_not_trace)r   globalslocalsnskeyrF   s         r   r   z_PyDevFrontEnd.updateh  s    \\!!rxxz* 	$JC& #s	$ 	##))+##**73%4<<!23@\@\^k8lJNDLL((44G 9m3r   c                     	 |r,| j                   j                  d ||j                               S | j                   j                  ||d      S #  Y y xY w)N)r'   
cursor_posr   )r   complete__len__)r   strings     r   r   z_PyDevFrontEnd.completev  sP    	||,,T6>>K[,\\||,,VVQ??	s   -A A Ac                     |dv ry	 |j                  d      }|j                  d      s|dz  }t        j                  |dd      }|S # t        $ r d}Y |S w xY w)N)r   
Tr   \z

z<string>exec)rstripendswithcodeopcompile_command	Exception)r   r   clean_stringis_completes       r   r   z_PyDevFrontEnd.is_complete  s}     Z
 #
  &}}T2#,,T2 F*L$44  	  # #	#s   >A AAc                    	 d}d}| j                  |      \  }}ddlm}  || j                         d       }|j                  |      }	|	j                  }
| j
                  }t        |	D cg c]  }|d   	 c}      }|D ]K  }||vs|j                  |       |j                  |      }|d   dk(  r|}n|}|d   }|d} |
||d|f       M |	S c c}w #  dd l	} |j                          g cY S xY w)	N1112r   )r   	type_namezMagic function	docstringr   )r   _pydev_bundle._pydev_completerr   get_namespacer   r   setaddobject_inspectrc   	print_exc)r   textact_tokTYPE_IPYTHONTYPE_IPYTHON_MAGIC_lineipython_completionsr   ru   retr   ipfpydev_completionsipython_completioninf
pydev_type	pydev_docrc   s                      r   getCompletionsz_PyDevFrontEnd.getCompletions  s   !	L!%)-t)<&E&@!$"4"4"6=I$$W-CZZFB #3$7aQqT$7 8&9 L" &->>%))*<=++,>?C;'+;;%7
%1
 #K 0I ($&	.	2zJK%L& J) %8*	0Y002Is%   A'C )C5C AC C C.c                 .    | j                   j                  S rE   )r   rp   rC   s    r   r   z_PyDevFrontEnd.get_namespace  s    ||###r   c                 "    | j                   d d = y rE   )r   rC   s    r   clear_bufferz_PyDevFrontEnd.clear_buffer  s    !!!$r   c                    | j                   r| j                   j                  |       dj                  | j                         }| j                  |      r@| xj                  dz  c_        | j
                  j                  |       | j                   d d = yy| j                  |      s| j                   j                  |       y| xj                  dz  c_        | j
                  j                  |d       y)Nr   r   FT)store_history)r   r   joinr   r   r   run_cell)r   r'   bufs      r   add_execz_PyDevFrontEnd.add_exec  s      !!((.))D112C$$$)$%%c*))!, ##D)%%,,T2$$)$%%d$%?
 r   c                 .    | j                   j                  S rE   )r   	automagicrC   s    r   is_automagicz_PyDevFrontEnd.is_automagic  s    ||%%%r   c                      d| j                   z  S )Nz PyDev console: using IPython %s
)versionrC   s    r   get_greeting_msgz_PyDevFrontEnd.get_greeting_msg  s    2T\\AAr   N)r8   r9   r:   r   __version__r   r3   r   r   r   r   r   r   r   r   r   r   r-   r   r   r   r   W  sG    !!G##O<%N$%8&Br   r   c                       e Zd ZdZdZy)_PyDevFrontEndContainerN)r8   r9   r:   r   _last_host_portr-   r   r   r   r     s    IOr   r   c                    t         j                  t               t         _        t         j                  | |fk7  r>| |ft         _        t	        | |      t         j                  j
                  j                  d<   t         j                  S )Neditor)r   r   r   r   r.   r   hooks)r+   r*   s     r   get_pydev_frontendr    su    ((0,:,<)..:?P2QQ2<>O2O/
 EWWactDu))1177A #,,,r   ),__doc__
__future__r   r   ra   r   rc   IPython.core.errorr   IPython.core.completerr   IPython.core.interactiveshellr   r   IPython.core.usager   IPython.utils.strdispatchr	   IPython.core.releasecorer   r   !IPython.terminal.interactiveshellr
   	traitletsr   r   r   IPython.utils.traitletsIPython.core_pydev_bundle.pydev_importsr   default_pydev_banner_partsr   r   r   r.   r0   r<   rJ   registerr   r   r  r-   r   r   <module>r     s    & 	 
   ) . O 3 1 - - F7( ! 11 ww9: 0	6{ 	6 0[A$< [A~    : ;TB TBn 
-g  7667s   	C CC