HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/env/lib64/python3.10/site-packages/aiohttp/__pycache__/web_ws.cpython-310.pyc
o

+wewF�@sxUddlZddlZddlZddlZddlZddlZddlmZmZm	Z	m
Z
mZmZddl
Z
ddlmZddlmZddlmZddlmZmZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"dd	l#m$Z$dd
l%m&Z&m'Z'ddl(m)Z)m*Z*ddl+m,Z,m-Z-dd
l.m/Z/ddl0m1Z1ej2dkr�ddlZ3nddl3Z3dZ4dZ5ee6e7d<e
j8dddd�Gdd�d��Z9Gdd�de1�Z:dS)�N)�Any�Final�Iterable�Optional�Tuple�cast)�CIMultiDict�)�hdrs)�AbstractStreamWriter)�
call_later�
set_result)�WS_CLOSED_MESSAGE�WS_CLOSING_MESSAGE�WS_KEY�WebSocketError�WebSocketReader�WebSocketWriter�WSCloseCode�	WSMessage�	WSMsgType�
ws_ext_gen�ws_ext_parse)�	ws_logger)�	EofStream�FlowControlDataQueue)�JSONDecoder�JSONEncoder)�HTTPBadRequest�
HTTPException)�BaseRequest)�StreamResponse)��)�WebSocketResponse�WebSocketReadyr��THRESHOLD_CONNLOST_ACCESST)�auto_attribs�frozen�slotsc@s0eZdZUeed<eeed<defdd�ZdS)r%�ok�protocol�returncC�|jS�N)r+��self�r2�G/home/arjun/projects/env/lib/python3.10/site-packages/aiohttp/web_ws.py�__bool__6�zWebSocketReady.__bool__N)�__name__�
__module__�__qualname__�bool�__annotations__r�strr4r2r2r2r3r%1s
r%cs�eZdZdZddddddddd�ded	eed
ededeed
eedede	ddf�fdd�Z
d`dd�Zd`dd�Zd`dd�Z
d`dd�Zdedef�fdd�Zdededeeeffdd �Zdedeeeffd!d"�Zded#ed$eddfd%d&�Zdedefd'd(�Zedefd)d*��Zedee	fd+d,��Zedeefd-d.��Zedefd/d0��Zdad1ed2edefd3d4�Zdee fd5d6�Z!dbd8e"ddfd9d:�Z#dbd8e"ddfd;d<�Z$dad=edeeddfd>d?�Z%dad=e"deeddfd@dA�Z&	dae'j(dB�d=edeedCe)ddfdDdE�Z*d`dFdG�Z+e,j-d7dH�dIe	d8e"defdJdK�Z.dadeede/fdLdM�Z0ddN�deedefdOdP�Z1ddN�deede"fdQdR�Z2e'j3ddS�dTe4deedefdUdV�Z5d=e"ddfdWdX�Z6dcdYdZ�Z7de/fd[d\�Z8d]e ddfd^d_�Z9�Z:S)dr$Fg$@NTr2i@)�timeout�receive_timeout�	autoclose�autoping�	heartbeat�	protocols�compress�max_msg_sizer<r=r>r?r@rArBrCr-c	s�t�jdd�||_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_||_
||_||_||_||_d|_|durC|d|_d|_||_||_dS)N�e)�statusFrg@)�super�__init__�
_protocols�_ws_protocol�_writer�_reader�_closed�_closing�
_conn_lost�_close_code�_loop�_waiting�
_exception�_timeout�_receive_timeout�
_autoclose�	_autoping�
_heartbeat�
_heartbeat_cb�_pong_heartbeat�_pong_response_cb�	_compress�
_max_msg_size)	r1r<r=r>r?r@rArBrC��	__class__r2r3rG>s.

zWebSocketResponse.__init__cCs<|jdur
|j��d|_|jdur|j��d|_dSdSr/)rZ�cancelrXr0r2r2r3�_cancel_heartbeatbs




�z#WebSocketResponse._cancel_heartbeatcCsT|��|jdur(|jdusJ�t|j|j|j|jdur!|jjjndd�|_dSdS�Nr&)�timeout_ceil_threshold)	r`rWrPr�_send_heartbeat�_req�	_protocol�_timeout_ceil_thresholdrXr0r2r2r3�_reset_heartbeatks


���z"WebSocketResponse._reset_heartbeatcCs||jdur:|js<|jdusJ�|j�|j���|jdur"|j��t|j	|j
|j|jdur3|jjj
ndd�|_dSdSdSra)rWrLrP�create_taskrJ�pingrZr_r�_pong_not_receivedrYrdrerfr0r2r2r3rcys



���z!WebSocketResponse._send_heartbeatcCsF|jdur|jjdur!d|_tj|_t��|_|jj�	�dSdSdS)NT)
rd�	transportrLr�ABNORMAL_CLOSURErO�asyncio�TimeoutErrorrR�closer0r2r2r3rj�s
�z$WebSocketResponse._pong_not_received�requestc�s^�|jdur	|jS|�|�\}}t��|�IdH}|dusJ�|�|||�|��IdH|Sr/)�_payload_writer�
_pre_startrF�prepare�_post_start�drain)r1rpr,�writer�payload_writerr]r2r3rs�s�
zWebSocketResponse.preparezCIMultiDict[str]cCs�|j}d|�tjd�����krtd�|�tj��d��d|�tjd���vr3td�|�tj��d��d}tj	|vr]dd�|tj	�
d	�D�}|D]}||jvrT|}n	qIt�
d
||j�|�tjd�}|dvrptd|��d��|�tj�}z|r�tt�|��d
kr�td|��d��Wntjy�td|��d�d�wt�t�|��t������}ttjdtjdtj|i�}	d}
d}|jr�|�tj�}t |dd�\}}
|r�t!|d|
d�}
|
|	tj<|r�||	tj	<|	|||
fS)N�	websocket�z@No WebSocket UPGRADE hdr: {}
 Can "Upgrade" only to "WebSocket".)�text�upgradezNo CONNECTION upgrade hdr: {}cSsg|]}t|����qSr2)r;�strip)�.0�protor2r2r3�
<listcomp>�s
��z0WebSocketResponse._handshake.<locals>.<listcomp>�,u8Client protocols %r don’t overlap server-known ones %r)�13�8�7zUnsupported version: �zHandshake error: FrT)�isserver)rBr��server_notakeover)"�headers�getr
�UPGRADE�lowerr|r�format�
CONNECTION�SEC_WEBSOCKET_PROTOCOL�splitrHr�warning�SEC_WEBSOCKET_VERSION�SEC_WEBSOCKET_KEY�len�base64�	b64decode�binascii�Error�	b64encode�hashlib�sha1�encoder�digest�decoder�SEC_WEBSOCKET_ACCEPTr[�SEC_WEBSOCKET_EXTENSIONSrr)r1rpr�r,�
req_protocolsr~�version�key�
accept_val�response_headers�
notakeoverrB�
extensions�
enabledextr2r2r3�
_handshake�s��
��
�
���������

�zWebSocketResponse._handshakecCsl|j|_|�|�\}}}}|�d�|j�|�|��||_|jj}|dus)J�t	|j|||d�}||fS)NrD)rBr�)
rPr��
set_statusr��update�force_closer[rerkr)r1rpr�r,rBr�rkrvr2r2r3rr�s

�zWebSocketResponse._pre_startr,rvcCsd||_||_|��|j}|dusJ�t|jd|d�|_|j�t	|j|j
|jd��|j�d�dS)Ni)�loop�rBF)
rIrJrgrPrrerKr,�
set_parserrr\r[�
keep_alive)r1rpr,rvr�r2r2r3rts�zWebSocketResponse._post_startcCsP|jdur	td��z|�|�\}}}}Wnty"tdd�YSwtd|�S)NzAlready startedFT)rJ�RuntimeErrorr�rr%)r1rp�_r,r2r2r3�can_prepares
�
zWebSocketResponse.can_preparecCr.r/)rLr0r2r2r3�closed �zWebSocketResponse.closedcCr.r/)rOr0r2r2r3�
close_code$r�zWebSocketResponse.close_codecCr.r/)rIr0r2r2r3�ws_protocol(r�zWebSocketResponse.ws_protocolcCr.r/)r[r0r2r2r3rB,r�zWebSocketResponse.compress�name�defaultcCs0|j}|dur	|S|j}|dur|S|�||�S)z}Get optional transport information.

        If no value associated with ``name`` is found, ``default`` is returned.
        N)rJrk�get_extra_info)r1r�r�rvrkr2r2r3r�0sz WebSocketResponse.get_extra_infocCr.r/)rRr0r2r2r3�	exception=r5zWebSocketResponse.exception��messagec��*�|jdur
td��|j�|�IdHdS�N�Call .prepare() first)rJr�ri�r1r�r2r2r3ri@s�
zWebSocketResponse.pingc�r�r�)rJr��pongr�r2r2r3r�Es�
zWebSocketResponse.pong�datac�sJ�|jdur
td��t|t�stdt|���|jj|d|d�IdHdS)Nr�zdata argument must be str (%r)F��binaryrB)rJr��
isinstancer;�	TypeError�type�send�r1r�rBr2r2r3�send_strKs�

zWebSocketResponse.send_strc�sP�|jdur
td��t|tttf�stdt|���|jj|d|d�IdHdS)Nr�z#data argument must be byte-ish (%r)Tr�)	rJr�r��bytes�	bytearray�
memoryviewr�r�r�r�r2r2r3�
send_bytesRs�
zWebSocketResponse.send_bytes)�dumpsr�c�s�|j||�|d�IdHdS)Nr�)r�)r1r�rBr�r2r2r3�	send_jsonYs�zWebSocketResponse.send_jsonc�s6�|jrdS|jdurtd��|��IdHd|_dS)NzResponse has not been startedT)�	_eof_sentrqr�ror0r2r2r3�	write_eofbs�

zWebSocketResponse.write_eof)�coder�r�c
�s��|jdur
td��|��|j}|dusJ�|jdur+|js+|�td�|jIdH|js�d|_z|j�||�IdH|j	}|dusEJ�|�
�IdHWn)tjtj
fy]tj|_�tyv}ztj|_||_WYd}~dSd}~ww|jr|dS|j}|dus�J�z)t�|j�4IdH�|��IdH}Wd�IdHn1IdHs�wYWn&tjy�tj|_�ty�}ztj|_||_WYd}~dSd}~ww|jtjkr�|j|_dStj|_t�
�|_dSdS)Nr�rTF)rJr�r`rKrQrL�	feed_datarrorqrurm�CancelledErrorrnrrlrO�	ExceptionrRrM�
async_timeoutr<rS�readr�r�CLOSEr�)r1r�r��readerrv�exc�msgr2r2r3roksd�
��(����
zWebSocketResponse.closec
�s��|jdur
td��|j}|dusJ�	|jdurtd��|jr2|jd7_|jtkr0td��tS|jr7t	SzO|�
�|_z;t�|pD|j
�4IdH�|j��IdH}Wd�IdHn1IdHscwY|��W|j}t|d�d|_n|j}t|d�d|_wWnytjtjfy�tj|_�ty�tj|_|��IdHttjdd�YSty�}z|j|_|j|jd�IdHttj|d�WYd}~Sd}~wt y�}z||_!d|_tj|_|��IdHttj|d�WYd}~Sd}~ww|j"tj#k�rd|_|j$|_|j�s|j%�r|��IdH|S|j"tj&k�r+d|_|S|j"tj'k�r@|j(�r@|�)|j$�IdHq|j"tj*k�rL|j(�rLq|S)Nr�Tz+Concurrent call to receive() is not allowedr	zWebSocket connection is closed.)r�)+rKr�rPrQrLrNr'rrMr�
create_futurer�r<rTr�rgr
rmr�rnrrlrOr�OKrorr�CLOSEDrr��ERRORr�rRr�r�r�rU�CLOSING�PINGrVr��PONG)r1r<r�r��waiterr�r2r2r3�receive�s~�



(�

�
���	��zWebSocketResponse.receive�r<c�s>�|�|�IdH}|jtjkrtd�|j|j���tt|j�S)Nz.Received message {}:{!r} is not WSMsgType.TEXT)	r�r�r�TEXTr�r�r�rr;�r1r<r�r2r2r3�receive_str�s���zWebSocketResponse.receive_strc�sD�|�|�IdH}|jtjkrtd|j�d|j�d���tt|j�S)NzReceived message �:z
 is not bytes)r�r�r�BINARYr�r�rr�r�r2r2r3�
receive_bytes�s
�zWebSocketResponse.receive_bytes)�loadsr<r�c�s�|j|d�IdH}||�S)Nr�)r�)r1r�r<r�r2r2r3�receive_json�s�zWebSocketResponse.receive_jsonc�s
�td��)Nz"Cannot call .write() for websocket)r�)r1r�r2r2r3�write�s�zWebSocketResponse.writecCs|Sr/r2r0r2r2r3�	__aiter__�szWebSocketResponse.__aiter__c�s.�|��IdH}|jtjtjtjfvrt�|Sr/)r�r�rr�r�r��StopAsyncIteration)r1r�r2r2r3�	__anext__�s
�zWebSocketResponse.__anext__r�cCs|jdur
|j�|�dSdSr/)rK�
set_exception)r1r�r2r2r3�_cancels
�zWebSocketResponse._cancel)r-Nr/)r�)r-r$);r6r7r8�
_length_check�floatrr9rr;�intrGr`rgrcrjr rrsrr�rrrrtr%r��propertyr�r�r�rBrr��
BaseExceptionr�r�rir�r�r��jsonr�rr�r�rr�rorr�r�r�r�rr�r�r�r�r��
__classcell__r2r2r]r3r$:s��������	�
��
$
	

�
�U���
�


�����
�
	 	7=
���
�
r$);rmr�r�r�r��sys�typingrrrrrr�attr�	multidictrryr
�abcr�helpersrr
�httprrrrrrrrrrr�logr�streamsrr�typedefsrr�web_exceptionsrr�web_requestr �web_responser!�version_infor��__all__r'r�r:�sr%r$r2r2r2r3�<module>s6
 4