o
    m=8jL                     @   s  d 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	m
Z
mZmZmZ ddlZddlmZ ddlmZmZmZ dd	lmZ dd
lmZmZ ddlmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z% ddl&m'Z' ddl(m)Z)m*Z*m+Z+m,Z,m-Z- ej.dkrddlm/Z/ nddl0m/Z/ ej.dkrddlZ1ddlm2Z2 n
ddl1Z1ddl0m2Z2 e/de3de
d dZ4ej5dddG dd dZ6e6dddZ7G dd de	e4 Z8dS )zWebSocket client for asyncio.    N)Callable)TracebackType)AnyGenericLiteralOptionalcastoverload   )WebSocketDataQueue)ClientErrorServerTimeoutErrorWSMessageTypeError)ClientResponse)calculate_timeout_when
set_result)WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWebSocketErrorWSCloseCode	WSMessageWSMessageDecodeTextWSMessageNoDecodeText	WSMsgType)_INTERNAL_RECEIVE_TYPESWebSocketWriter)	EofStream)DEFAULT_JSON_DECODERDEFAULT_JSON_ENCODERJSONBytesEncoderJSONDecoderJSONEncoder)      )TypeVar)r"      )Self_DecodeTextT)bound	covariantdefault)frozenslotsc                   @   s0   e Zd Zejee ddZejee ddZdS )ClientWSTimeoutN)typer*   )	__name__
__module____qualname__attribr   float
ws_receivews_close r7   r7   X/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/aiohttp/client_ws.pyr-   4   s    r-   g      $@)r5   r6   c                   @   s  e Zd ZdddddedededB ded	ed
edede	j
dedB dededdfddZd{ddZd{ddZd{ddZd{ddZd{ddZd{ddZd|d!d"Zd{d#d$Zd%eddfd&d'Zd{d(d)Zd{d*d+Zedefd,d-ZededB fd.d/ZededB fd0d1Zedefd2d3Zedefd4d5Zd}d6ed7e de fd8d9Z!dedB fd:d;Z"d~d=e#ddfd>d?Z$d~d=e#ddfd@dAZ%	d}d=e#dBe&dedB ddfdCdDZ'd}dEededB ddfdFdGZ(d}dEe#dedB ddfdHdIZ)	d}e*dJdEe dedB dKe+ddfdLdMZ,	d}dEe dedB dKe-ddfdNdOZ.e/j0d<dPdQed=e#defdRdSZ1e2	d}dTdUd	edB de3fdVdWZ4e2	d}dTdXd	edB de5fdYdWZ4e2	d}dTdZd	edB de3e5B fd[dWZ4	d}d	edB de3e5B fd\dWZ4e2dd]dTdUd	edB defd^d_Z6e2dd]dTdXd	edB de#fd`d_Z6e2dd]dTdZd	edB dee#B fdad_Z6dd]d	edB dee#B fdbd_Z6dd]d	edB de#fdcddZ7e2deddfdTdUdge8d	edB de fdhdiZ9e2deddfdTdXdge:e#ge f d	edB de fdjdiZ9e2deddfdTdZdge8e:e#ge f B d	edB de fdkdiZ9e;ddfdge8e:e#ge f B d	edB de fdldiZ9de<fdmdnZ=e2dTdUde3fdodpZ>e2dTdXde5fdqdpZ>e2dTdZde3e5B fdrdpZ>de3e5B fdsdpZ>de<fdtduZ?dve@e dB dwedB dxeAdB ddfdydzZBdS )ClientWebSocketResponseNr   F)	heartbeatcompressclient_notakeoverreaderwriterprotocolresponsetimeout	autocloseautopingloopr:   r;   r<   returnc	                C   s   || _ |j| _|| _|| _|| _d| _d| _d | _|| _	|| _
|| _|	| _d | _d| _|	d ur4|	d | _d | _|| _d| _d | _d | _|
| _|| _d | _d| _d | _|   d S )NFg        g       @)	_response
connection_conn_writer_reader	_protocol_closed_closing_close_code_timeout
_autoclose	_autoping
_heartbeat_heartbeat_cb_heartbeat_when_pong_heartbeat_pong_response_cb_loop_waiting_close_wait
_exception	_compress_client_notakeover
_ping_task_need_heartbeat_reset_heartbeat_reset_handle_reset_heartbeat)selfr=   r>   r?   r@   rA   rB   rC   rD   r:   r;   r<   r7   r7   r8   __init__>   s6   
z ClientWebSocketResponse.__init__c                 C   sd   |    | jd ur| j  d | _d| _| jd ur!| j  d | _| jd ur0| j  d | _d S d S NF)_cancel_pong_response_cbr_   cancelr^   rS   r]   ra   r7   r7   r8   _cancel_heartbeatk   s   






z)ClientWebSocketResponse._cancel_heartbeatc                 C   s"   | j d ur| j   d | _ d S d S N)rV   re   rf   r7   r7   r8   rd   x   s   


z0ClientWebSocketResponse._cancel_pong_response_cbc                 C   s>   | j d u s| jr
d S | j}|d usJ d| _|| j| _d S )NT)rR   r^   rW   	call_soon_flush_heartbeat_resetr_   )ra   rD   r7   r7   r8   _on_data_received}   s   z)ClientWebSocketResponse._on_data_receivedc                 C   s"   d | _ | jsd S |   d| _d S rc   )r_   r^   r`   rf   r7   r7   r8   rj      s
   
z.ClientWebSocketResponse._flush_heartbeat_resetc                 C   s   | j d u rd S |   | j}|d usJ | j}|d ur|jjnd}| }t|| j |}|| _| j	d u r>|
|| j| _	d S d S )N   )rR   rd   rW   rH   
_connector_timeout_ceil_thresholdtimer   rT   rS   call_at_send_heartbeat)ra   rD   conntimeout_ceil_thresholdnowwhenr7   r7   r8   r`      s   

z(ClientWebSocketResponse._reset_heartbeatc                 C   s   d | _ | jrd S | j}| }|| jk r|| j| j| _ d S | j}|d ur*|jj	nd}t
|| j|}|   ||| j| _| jdtj}tjdkrUtj||dd}n||}| si|| _|| j d S | | d S )Nrl       )r"      T)rD   eager_start)rS   r^   rW   ro   rT   rp   rq   rH   rm   rn   r   rU   rd   _pong_not_receivedrV   rI   
send_framer   PINGsysversion_infoasyncioTaskcreate_taskdoner]   add_done_callback_ping_task_done)ra   rD   rt   rr   rs   ru   coro	ping_taskr7   r7   r8   rq      s0   


z'ClientWebSocketResponse._send_heartbeattaskasyncio.Task[None]c                 C   s(   |  s|  }r| | d| _dS )z*Callback for when the ping task completes.N)	cancelled	exception_handle_ping_pong_exceptionr]   )ra   r   excr7   r7   r8   r      s   

z'ClientWebSocketResponse._ping_task_donec                 C   s   |  td| j d d S )NzNo PONG received after z seconds)r   r   rU   rf   r7   r7   r8   ry      s   z*ClientWebSocketResponse._pong_not_receivedr   c                 C   sZ   | j rdS |   tj| _|| _| j  | jr)| j	s+| j
ttj|dd dS dS dS )z5Handle exceptions raised during ping/pong processing.Nr   )rL   _set_closedr   ABNORMAL_CLOSURErN   rZ   rF   closerX   rM   rJ   	feed_datar   r   ERROR)ra   r   r7   r7   r8   r      s   
z3ClientWebSocketResponse._handle_ping_pong_exceptionc                 C      d| _ |   dS )zdSet the connection to closed.

        Cancel any heartbeat timers and set the closed flag.
        TN)rL   rg   rf   r7   r7   r8   r         z#ClientWebSocketResponse._set_closedc                 C   r   )zfSet the connection to closing.

        Cancel any heartbeat timers and set the closing flag.
        TN)rM   rg   rf   r7   r7   r8   _set_closing   r   z$ClientWebSocketResponse._set_closingc                 C      | j S rh   )rL   rf   r7   r7   r8   closed      zClientWebSocketResponse.closedc                 C   r   rh   )rN   rf   r7   r7   r8   
close_code   r   z"ClientWebSocketResponse.close_codec                 C   r   rh   )rK   rf   r7   r7   r8   r?      r   z ClientWebSocketResponse.protocolc                 C   r   rh   )r[   rf   r7   r7   r8   r;      r   z ClientWebSocketResponse.compressc                 C   r   rh   )r\   rf   r7   r7   r8   r<     r   z)ClientWebSocketResponse.client_notakeovernamer*   c                 C   s2   | j j}|du r
|S |j}|du r|S |||S )z$extra info from connection transportN)rF   rG   	transportget_extra_info)ra   r   r*   rr   r   r7   r7   r8   r     s   z&ClientWebSocketResponse.get_extra_infoc                 C   r   rh   )rZ   rf   r7   r7   r8   r     s   z!ClientWebSocketResponse.exceptionrv   messagec                       | j |tjI d H  d S rh   )rI   rz   r   r{   ra   r   r7   r7   r8   ping     zClientWebSocketResponse.pingc                    r   rh   )rI   rz   r   PONGr   r7   r7   r8   pong  r   zClientWebSocketResponse.pongopcodec                    s   | j |||I dH  dS )z Send a frame over the websocket.N)rI   rz   )ra   r   r   r;   r7   r7   r8   rz     s   z"ClientWebSocketResponse.send_framedatac                    s@   t |tstdt| | jj|dtj|dI d H  d S )Nzdata argument must be str (%r)zutf-8r;   )	
isinstancestr	TypeErrorr.   rI   rz   encoder   TEXTra   r   r;   r7   r7   r8   send_str  s   
z ClientWebSocketResponse.send_strc                    s@   t |tttfstdt| | jj|tj	|dI d H  d S )Nz#data argument must be byte-ish (%r)r   )
r   bytes	bytearray
memoryviewr   r.   rI   rz   r   BINARYr   r7   r7   r8   
send_bytes%  s   z"ClientWebSocketResponse.send_bytes)dumpsr   c                   s   | j |||dI d H  d S )Nr   )r   ra   r   r;   r   r7   r7   r8   	send_json*  s   z!ClientWebSocketResponse.send_jsonc                   s   | j |||dI dH  dS )zSend JSON data using a bytes-returning encoder as a binary frame.

        Use this when your JSON encoder (like orjson) returns bytes
        instead of str, avoiding the encode/decode overhead.
        r   N)r   r   r7   r7   r8   send_json_bytes3  s   z'ClientWebSocketResponse.send_json_bytes)coder   r   c             
      s  | j r%| js%| jd usJ | j | _|   | jtd | jI d H  | j	r*dS | 
  z| j||I d H  W n0 tjyL   tj| _| j    tyj } ztj| _|| _| j  W Y d }~dS d }~ww | jru| j  dS 	 z+t| jj4 I d H  | j I d H }W d   I d H  n1 I d H sw   Y  W n0 tjy   tj| _| j    ty } ztj| _|| _| j  W Y d }~dS d }~ww |jtju r|j| _| j  dS qv)Nr   FT)rX   rM   rW   create_futurerY   r   rJ   r   r   rL   r   rI   r   r~   CancelledErrorr   r   rN   rF   	ExceptionrZ   async_timeoutrA   rO   r6   readr.   r   CLOSEr   )ra   r   r   r   msgr7   r7   r8   r   A  s`   


(


zClientWebSocketResponse.closera   z&ClientWebSocketResponse[Literal[True]]c                       d S rh   r7   ra   rA   r7   r7   r8   receiver     zClientWebSocketResponse.receivez'ClientWebSocketResponse[Literal[False]]c                    r   rh   r7   r   r7   r7   r8   r   w  r   z$ClientWebSocketResponse[_DecodeText]c                    r   rh   r7   r   r7   r7   r8   r   |  r   c              
      s  |p| j j}	 | jrtd| jrtS | jr |  I d H  tS zTd| _z@|rOt	|4 I d H  | j
 I d H }W d   I d H  n1 I d H sIw   Y  n| j
 I d H }W d| _| jrdt| jd  nd| _| jrrt| jd  w w W n tjtjfy   tj| _  ty   tj| _|  I d H  ttjd d  Y S  ty   |   tj| _t Y S  ty } z|j| _| j|jdI d H  ttj|d W  Y d }~S d }~w ty } z|| _|    tj| _|  I d H  ttj|d W  Y d }~S d }~ww |j!t"vr
|S |j!tj#u r*|    |j$| _| js(| j%r(|  I d H  |S |j!tj&u r7|    |S |j!tj'u rL| j(rL| )|j$I d H  q|j!tj*u rX| j(rXq|S )NTz+Concurrent call to receive() is not allowedF)r   )+rO   r5   rX   RuntimeErrorrL   r   rM   r   r   rA   rJ   r   rY   r   r~   r   TimeoutErrorr   r   rN   r   OKr   r   CLOSEDr   r   r   r   r   r   rZ   r   r.   r   r   r   rP   CLOSINGr{   rQ   r   r   )ra   rA   receive_timeoutr   r   r7   r7   r8   r     s   (	rA   c                   r   rh   r7   r   r7   r7   r8   receive_str  r   z#ClientWebSocketResponse.receive_strc                   r   rh   r7   r   r7   r7   r8   r     r   c                   r   rh   r7   r   r7   r7   r8   r     r   c                   sD   |  |I dH }|jtjurtd|j d|jdtt|jS )zrReceive TEXT message.

        Returns str when decode_text=True (default), bytes when decode_text=False.
        NReceived message :z is not WSMsgType.TEXT)r   r.   r   r   r   r   r   r   ra   rA   r   r7   r7   r8   r     s   c                   sD   |  |I d H }|jtjurtd|j d|jdtt|jS )Nr   r   z is not WSMsgType.BINARY)r   r.   r   r   r   r   r   r   r   r7   r7   r8   receive_bytes  s   z%ClientWebSocketResponse.receive_bytes.)loadsrA   r   c                   r   rh   r7   ra   r   rA   r7   r7   r8   receive_json     z$ClientWebSocketResponse.receive_jsonc                   r   rh   r7   r   r7   r7   r8   r     r   c                   r   rh   r7   r   r7   r7   r8   r     r   c                   s   | j |dI d H }||S )Nr   )r   )ra   r   rA   r   r7   r7   r8   r     s   c                 C   s   | S rh   r7   rf   r7   r7   r8   	__aiter__  s   z!ClientWebSocketResponse.__aiter__c                    r   rh   r7   rf   r7   r7   r8   	__anext__  r   z!ClientWebSocketResponse.__anext__c                    r   rh   r7   rf   r7   r7   r8   r     r   c                    r   rh   r7   rf   r7   r7   r8   r     r   c                    s.   |   I d H }|jtjtjtjfv rt|S rh   )r   r.   r   r   r   r   StopAsyncIteration)ra   r   r7   r7   r8   r   !  s
   c                    s   | S rh   r7   rf   r7   r7   r8   
__aenter__'  s   z"ClientWebSocketResponse.__aenter__exc_typeexc_valexc_tbc                    s   |   I d H  d S rh   )r   )ra   r   r   r   r7   r7   r8   	__aexit__*  s   z!ClientWebSocketResponse.__aexit__)rE   N)r   r   rE   Nrh   )rv   )Cr/   r0   r1   r   r   r   r   r-   boolr~   AbstractEventLoopr4   intrb   rg   rd   rk   rj   r`   rq   r   ry   BaseExceptionr   r   r   propertyr   r   r?   r;   r<   r   r   r   r   r   r   r   rz   r   r   r   r!   r   r   r   r   r   r   r	   r   r   r   r   r   r    r   r   r   r&   r   r   r   r.   r   r   r7   r7   r7   r8   r9   =   s   	

-






(






 1
J 

	
r9   )9__doc__r~   r|   collections.abcr   typesr   typingr   r   r   r   r   r	   r2   _websocket.readerr   client_exceptionsr   r   r   client_reqrepr   helpersr   r   httpr   r   r   r   r   r   r   r   http_websocketr   r   streamsr   typedefsr   r   r   r    r!   r}   r$   typing_extensionsr   r&   r   r'   sr-   DEFAULT_WS_CLIENT_TIMEOUTr9   r7   r7   r7   r8   <module>   s8     (


