U
    /e                     @  sd   d Z ddlmZ ddlZeeZddlmZm	Z	m
Z
 ddlmZ ddlmZ dZG dd	 d	ZdS )
zn Provide a low-level wrapper for Tornado Websockets that adds locking
and smooths some compatibility issues.

    )annotationsN)Any	AwaitableCallable)locks)WebSocketClientConnection) WebSocketClientConnectionWrapperc                   @  s\   e Zd ZdZdddddZdd	d
d
ddddZdddddddZddddddZdS )r   zE Used for compatibility across Tornado versions and to add write_lockr   None)socketreturnc                 C  s   || _ t | _d S )N)_socketr   Lock
write_lock)selfr
    r   :/tmp/pip-unpacked-wheel-f5fndrjf/bokeh/client/websocket.py__init__2   s    z)WebSocketClientConnectionWrapper.__init__FTzstr | bytesbool)messagebinarylockedr   c              	     sB   |r0| j  I dH  | j|| W 5 Q R X n| j|| dS )zh Write a message to the websocket after obtaining the appropriate
        Bokeh Document lock.

        N)r   acquirer   write_message)r   r   r   r   r   r   r   r   :   s    z.WebSocketClientConnectionWrapper.write_messageNz
int | Nonez
str | None)codereasonr   c                 C  s   | j ||S )z Close the websocket. )r   close)r   r   r   r   r   r   r   E   s    z&WebSocketClientConnectionWrapper.closezCallable[..., Any] | NonezAwaitable[None | str | bytes])callbackr   c                 C  s   | j |S )z@ Read a message from websocket and execute a callback.

        )r   read_message)r   r   r   r   r   r   I   s    z-WebSocketClientConnectionWrapper.read_message)FT)NN)N)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   /   s
   r   )r!   
__future__r   logging	getLoggerr   logtypingr   r   r   Ztornador   Ztornado.websocketr   __all__r   r   r   r   r   <module>   s   
