
    ` Ie=                     :    d Z ddlZddlZddlmZ  G d de      Zy)z#
Spyder shell for Jupyter kernels.
    N)ZMQInteractiveShellc                        e Zd ZdZ fdZ fdZ fdZd Zd Zd Z	e
d        Zej                  d	        Ze
d
        Ze
d        Ze
d        Zej                  d        Zd Z xZS )SpyderShellzSpyder shell.c                     d | _         t        t        |   |i | | j                  j                  d| j                         y )Npost_execute)_pdb_objsuperr   __init__eventsregisterdo_post_execute)selfargskwargs	__class__s      >/usr/lib/python3/dist-packages/spyder_kernels/console/shell.pyr
   zSpyderShell.__init__   s:    k4)4:6: 	^T-A-AB    c                 p    | j                   j                  j                          t        t        |          S )zEngage the exit actions.)kernelfrontend_commclose_threadr	   r   ask_exit)r   r   s    r   r   zSpyderShell.ask_exit!   s)    !!..0[$022r   c                 Z    |t         j                  u rdg}t        t        |   |||       y)z
        Don't show a traceback when exiting our debugger after entering
        it through a `breakpoint()` call.

        This is because calling `!exit` after `breakpoint()` raises
        BdbQuit, which throws a long and useless traceback.
         N)bdbBdbQuitr	   r   _showtraceback)r   etypeevaluestbr   s       r   r   zSpyderShell._showtraceback&   s+     CKK$Ck4/vsCr   c                     t        j                  |dz         }| j                  |u r| j                  j                  S |j
                  S )z%Get local scope at given frame depth.   )sys	_getframe
_pdb_framer   curframe_localsf_localsr   stack_depthframes      r   get_local_scopezSpyderShell.get_local_scope3   s:    kAo.??e#==000>>!r   c                 J    t        j                  |dz         }|j                  S )z&Get global scope at given frame depth.r"   )r#   r$   	f_globalsr(   s      r   get_global_scopezSpyderShell.get_global_scope<   s    kAo.r   c                 ,    t        | j                        S )z6
        Check if we are currently debugging.
        )boolr%   r   s    r   is_debuggingzSpyderShell.is_debuggingA   s     DOO$$r   c                     | j                   S )zGet current pdb session.r   r1   s    r   pdb_sessionzSpyderShell.pdb_sessionG   s     }}r   c                     || _         y)z$Register Pdb session to use it laterNr4   )r   pdb_objs     r   r5   zSpyderShell.pdb_sessionL   s      r   c                 H    | j                   | j                   j                  S y)z(Return current Pdb frame if there is anyN)r5   curframer1   s    r   r%   zSpyderShell._pdb_frameQ   s'     '##,,, (r   c                 J    | j                   | j                  j                  S i S )zl
        Return current Pdb frame locals if available. Otherwise
        return an empty dictionary
        )r%   r   r&   r1   s    r   _pdb_localszSpyderShell._pdb_localsW   s#     ??&==000Ir   c                 ^    | j                   | j                   j                  S | j                  S )zGet the current namespace.)r%   r-   _SpyderShell__user_nsr1   s    r   user_nszSpyderShell.user_nsb   s(     ??&??,,,>>!r   c                     || _         y)zSet user_ns.N)r=   )r   	namespaces     r   r>   zSpyderShell.user_nsj   s     #r   c                 |    t         j                  j                          t         j                  j                          y)zFlush __std*__ after execution.N)r#   
__stderr__flush
__stdout__r1   s    r   r   zSpyderShell.do_post_executeo   s$     	r   )__name__
__module____qualname____doc__r
   r   r   r+   r.   r2   propertyr5   setterr%   r;   r>   r   __classcell__)r   s   @r   r   r      s    C3

D"
%       - -
   " " ^^# #r   r   )rH   r   r#   ipykernel.zmqshellr   r    r   r   <module>rN      s&   
  
 3^% ^r   