o
    ªZh=  ã                   @   s4   d Z ddlZddlZddlmZ G dd„ deƒZdS )z#
Spyder shell for Jupyter kernels.
é    N)ÚZMQInteractiveShellc                       s¤   e Zd ZdZ‡ fdd„Z‡ fdd„Z‡ fdd„Zdd	„ Zd
d„ Zdd„ Z	e
dd„ ƒZejdd„ ƒZe
dd„ ƒZe
dd„ ƒZe
dd„ ƒZejdd„ ƒZdd„ Z‡  ZS )ÚSpyderShellzSpyder shell.c                    s0   d | _ tt| ƒj|i |¤Ž | j d| j¡ d S )NZpost_execute)Ú_pdb_objÚsuperr   Ú__init__ÚeventsÚregisterÚdo_post_execute)ÚselfÚargsÚkwargs©Ú	__class__© úS/var/www/html/lang_env/lib/python3.10/site-packages/spyder_kernels/console/shell.pyr      s   zSpyderShell.__init__c                    s   | j j ¡  tt| ƒ ¡ S )zEngage the exit actions.)ZkernelZfrontend_commZclose_threadr   r   Úask_exit©r
   r   r   r   r   !   s   zSpyderShell.ask_exitc                    s(   |t ju rdg}tt| ƒ |||¡ dS )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)ÚbdbZBdbQuitr   r   Ú_showtraceback)r
   ÚetypeZevalueZstbr   r   r   r   &   s   
zSpyderShell._showtracebackc                 C   s&   t  |d ¡}| 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
   Zstack_depthÚframer   r   r   Úget_local_scope3   s   
zSpyderShell.get_local_scopec                 C   s   t  |d ¡}|jS )z&Get global scope at given frame depth.r   )r   r   Ú	f_globalsr   r   r   r   Úget_global_scope<   s   zSpyderShell.get_global_scopec                 C   s
   t | jƒS )z6
        Check if we are currently debugging.
        )Úboolr   r   r   r   r   Úis_debuggingA   s   
zSpyderShell.is_debuggingc                 C   s   | j S )zGet current pdb session.©r   r   r   r   r   Úpdb_sessionG   s   zSpyderShell.pdb_sessionc                 C   ó
   || _ dS )z$Register Pdb session to use it laterNr$   )r
   Zpdb_objr   r   r   r%   L   ó   
c                 C   s   | j dur	| j jS dS )z(Return current Pdb frame if there is anyN)r%   Zcurframer   r   r   r   r   Q   s   
ÿzSpyderShell._pdb_framec                 C   s   | j dur	| jjS i S )zl
        Return current Pdb frame locals if available. Otherwise
        return an empty dictionary
        N)r   r   r   r   r   r   r   Ú_pdb_localsW   s   
zSpyderShell._pdb_localsc                 C   s   | j dur	| j jS | jS )zGet the current namespace.N)r   r    Ú_SpyderShell__user_nsr   r   r   r   Úuser_nsb   s   
zSpyderShell.user_nsc                 C   r&   )zSet user_ns.N)r)   )r
   Ú	namespacer   r   r   r*   j   r'   c                 C   s   t j ¡  t j ¡  dS )zFlush __std*__ after execution.N)r   Ú
__stderr__ÚflushÚ
__stdout__r   r   r   r   r	   o   s   
zSpyderShell.do_post_execute)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r!   r#   Úpropertyr%   Úsetterr   r(   r*   r	   Ú__classcell__r   r   r   r   r      s*    		






r   )r2   r   r   Zipykernel.zmqshellr   r   r   r   r   r   Ú<module>   s
   