a
    Df                     @  s   d dl mZ d dlZd dlmZmZ d dlZddlmZ ddl	m
Z
 ddlmZ dd	lmZ erd d
lmZ d dlmZ d dlmZ G dd deZdS )    )annotationsN)TYPE_CHECKINGClassVar   )state)Viewable)Terminal   )PaneBase)Document)Model)Commc                      s   e Zd ZU dZdZded< dZded< edd	 Zd% fdd	Z	dd Z
ejdddddd Zdd Zdd Zdd Zd&ddddddddZd ddddd!d"d#d$Z  ZS )'TextualaP  
    The `Textual` pane provides a wrapper around a Textual App component,
    rendering it inside a Terminal and running it on the existing Panel
    event loop, i.e. either on the server or the notebook asyncio.EventLoop.

    Reference: https://panel.holoviz.org/reference/panes/Textual.html

    :Example:

    >>> Textual(app)
    g      ?zClassVar[float | bool | None]priorityTzClassVar[bool]_updatesc                 C  s$   dt jv r ddlm} t||S dS )NZtextualr   )AppF)sysmodulesZtextual.appr   
isinstance)clsobjectr    r   _/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/panel/pane/textual.pyapplies%   s    

zTextual.appliesNc                   sb   t  jf d|i| tf i dd | j  D | _| j| j	| j
ttj d | _d S )Nr   c                 S  s    i | ]\}}|t jv r||qS r   )r   param).0pvr   r   r   
<dictcomp>.       z$Textual.__init__.<locals>.<dictcomp>)super__init__r   r   valuesitems	_terminalZ_internal_callbacksappendwatch_link_terminal_paramslistr   _running_app)selfr   params	__class__r   r   r!   ,   s    $zTextual.__init__c                 G  s   | j jdd |D  d S )Nc                 S  s   i | ]}|j |jqS r   )namenew)r   eventr   r   r   r   5   r   z1Textual._link_terminal_params.<locals>.<dictcomp>)r$   r   update)r*   eventsr   r   r   r'   4   s    zTextual._link_terminal_paramsr   )r&   Zon_initc                 C  sB   | j d u rd S ddlm} || j _| | j _tj| j _tj| j _	d S )Nr	   )PanelDriver)
r   Z_textualr3   Zdriver_classZ	__panel__r   stdoutZ_capture_stdoutstderrZ_capture_stderr)r*   r3   r   r   r   _set_driver7   s    

zTextual._set_driverc                   s\   | j d ur0| j | jur0| j  I d H  | j  | j| _ | jj| jj| jjfdI d H  d S )N)size)r)   r   	_shutdownr$   _clearZ	run_asyncZncolsZnrows)r*   r   r   r   _run_appA   s
    
zTextual._run_appc                 C  s   | j st| jj d S N)_modelsr   executer   r8   )r*   Zsession_contextr   r   r   _on_session_destroyedH   s    zTextual._on_session_destroyedc                 C  s&   | j d u s| j jrd S t| j d S r;   )r   Z
is_runningr   r=   r:   )r*   commr   r   r   	_init_appL   s    zTextual._init_appr   zModel | NonezComm | Noner   )docrootparentr?   returnc                 C  sP   | j ||||}| | |d u r0|| j |p6|jd }||f| j|< |S )Nid)r$   
_get_modelr@   Zon_session_destroyedr>   refr<   )r*   rA   rB   rC   r?   modelrG   r   r   r   rF   Q   s    
zTextual._get_modelstrNone)rG   rA   rB   rC   r?   rD   c                 C  s   |  | d S r;   )r@   )r*   rG   rA   rB   rC   r?   r   r   r   _update_object]   s    zTextual._update_object)N)NNN)__name__
__module____qualname____doc__r   __annotations__r   classmethodr   r!   r'   r   dependsr6   r:   r>   r@   rF   rK   __classcell__r   r   r,   r   r      s    


	  r   )
__future__r   r   typingr   r   r   Zio.stater   Zviewabler   Zwidgetsr   baser
   Zbokeh.documentr   Zbokeh.modelr   Zpyviz_commsr   r   r   r   r   r   <module>   s   