B `A@sBddlZddlZddlZddlZddlZddlmZmZmZm Z ddl Z ddl Z ddl m Z ddlmZddlmZddlmZmZddlmZmZmZmZmZmZmZmZmZmZdd l m!Z!dd l"m#Z#m$Z$dd l%m&Z&m'Z'dd l(m)Z)m*Z*dd l+m,Z,ddl-m.Z.dZ/dZ0e j1ddddGdddZ2Gddde.Z3dS)N)AnyIterableOptionalTuple) CIMultiDict)hdrs)AbstractStreamWriter) call_later set_result) WS_CLOSED_MESSAGEWS_CLOSING_MESSAGEWS_KEYWebSocketErrorWebSocketReaderWebSocketWriter WSMessage WSMsgType ws_ext_gen ws_ext_parse) ws_logger) EofStreamFlowControlDataQueue) JSONDecoder JSONEncoder)HTTPBadRequest HTTPException) BaseRequest)StreamResponse)WebSocketResponseWebSocketReadyrT)Z auto_attribsfrozenslotsc@s0eZdZUeed<eeed<edddZdS)r okprotocol)returncCs|jS)N)r$)selfr(i/private/var/folders/7j/8686xlfs15q3tgljmghtvg0r0000gn/T/pip-target-isidps9b/lib/python/aiohttp/web_ws.py__bool__0szWebSocketReady.__bool__N)__name__ __module__ __qualname__bool__annotations__rstrr*r(r(r(r)r +s  r c seZdZdZdddddddddeeeeeeeeeee dd fd d Z dd d d Z dd ddZ dd ddZ dd ddZeedfdd ZeedeeefdddZeeeefdddZeeeddddZeeddd Zeed d!d"Zeee d d#d$Zeeed d%d&Zeed d'd(Zeed d)d*ZdWe dd,d-d.Z!dXe dd,d/d0Z"dYeeedd1d2d3Z#dZe eedd1d4d5Z$d[e%j&d6e'eee(dd7d8d9Z)dd d:d;Z*dd?d@Z+d\eee,dAdBdCZ-ddDeeedAdEdFZ.ddDeee dAdGdHZ/e%j0ddIe1eee'dJdKdLZ2e ddMdNdOZ3dd dPdQZ4e,d dRdSZ5eddTdUdVZ6Z7S)]rFg$@NTr(i@)timeoutreceive_timeout autocloseautoping heartbeat protocolscompress max_msg_size) r1r2r3r4r5r6r7r8r&c stjdd||_d|_d|_d|_d|_d|_d|_d|_ d|_ d|_ d|_ ||_ ||_||_||_||_d|_|dk r|d|_d|_||_||_dS)Ne)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) r'r1r2r3r4r5r6r7r8) __class__r(r)r<8s.  zWebSocketResponse.__init__)r&cCs8|jdk r|jd|_|jdk r4|jd|_dS)N)rOcancelrM)r'r(r(r)_cancel_heartbeat\s     z#WebSocketResponse._cancel_heartbeatcCs*||jdk r&t|j|j|j|_dS)N)rTrLr _send_heartbeatrErM)r'r(r(r)_reset_heartbeates z"WebSocketResponse._reset_heartbeatcCsN|jdk rJ|jsJ|j|j|jdk r6|jt|j |j |j|_dS)N) rLrArEZ create_taskr?pingrOrSr _pong_not_receivedrN)r'r(r(r)rUms   z!WebSocketResponse._send_heartbeatcCs<|jdk r8|jjdk r8d|_d|_t|_|jjdS)NTi)Z_req transportrArDasyncio TimeoutErrorrGclose)r'r(r(r)rXzs  z$WebSocketResponse._pong_not_received)requestr&cs\|jdk r|jS||\}}t|IdH}|dk ssz0WebSocketResponse._handshake..,u8Client protocols %r don’t overlap server-known ones %r)Z1387zUnsupported version: zHandshake error: FrT)isserver)r7rpZserver_notakeover)"headersgetrUPGRADElowerrhrformatZ CONNECTIONZSEC_WEBSOCKET_PROTOCOLsplitr=rwarningZSEC_WEBSOCKET_VERSIONZSEC_WEBSOCKET_KEYlenbase64 b64decodebinasciiError b64encodehashlibsha1encoderdigestdecoderZSEC_WEBSOCKET_ACCEPTrPZSEC_WEBSOCKET_EXTENSIONSrr)r'r]rqr%Z req_protocolsrjversionkeyZ accept_valresponse_headers notakeoverr7 extensionsZ enabledextr(r(r) _handshakes`         zWebSocketResponse._handshakecCsl|j|_||\}}}}|d|j||||_|jj}|dk sRt t |j|||d}||fS)Nr9)r7r) rErZ set_statusrqupdateZ force_closerP _protocolrYrar)r'r]rqr%r7rrYrdr(r(r)r_s   zWebSocketResponse._pre_start)r]r%rdr&cCsd||_||_||j}|dk s&tt|jd|d|_|j t |j|j |j d|j ddS)Ni)loop)r7F)r>r?rVrErarrr@r% set_parserrrQrP keep_alive)r'r]r%rdrr(r(r)rbs zWebSocketResponse._post_startcCsR|jdk rtdy||\}}}}Wntk rBtddSXtd|SdS)NzAlready startedFT)r? RuntimeErrorrrr )r'r]_r%r(r(r) can_prepares  zWebSocketResponse.can_preparecCs|jS)N)rA)r'r(r(r)closed szWebSocketResponse.closedcCs|jS)N)rD)r'r(r(r) close_code szWebSocketResponse.close_codecCs|jS)N)r>)r'r(r(r) ws_protocolszWebSocketResponse.ws_protocolcCs|jS)N)rP)r'r(r(r)r7szWebSocketResponse.compresscCs|jS)N)rG)r'r(r(r) exceptionszWebSocketResponse.exception)messager&cs(|jdkrtd|j|IdHdS)NzCall .prepare() first)r?rrW)r'rr(r(r)rWs zWebSocketResponse.pingcs(|jdkrtd|j|IdHdS)NzCall .prepare() first)r?rpong)r'rr(r(r)r!s zWebSocketResponse.pong)datar7r&csH|jdkrtdt|ts,tdt||jj|d|dIdHdS)NzCall .prepare() firstzdata argument must be str (%r)F)binaryr7)r?r isinstancer0 TypeErrortypesend)r'rr7r(r(r)send_str's   zWebSocketResponse.send_strcsN|jdkrtdt|tttfs2tdt||jj|d|dIdHdS)NzCall .prepare() firstz#data argument must be byte-ish (%r)T)rr7) r?rrbytes bytearray memoryviewrrr)r'rr7r(r(r) send_bytes.s  zWebSocketResponse.send_bytes)dumps)rr7rr&cs|j|||dIdHdS)N)r7)r)r'rr7rr(r(r) send_json5szWebSocketResponse.send_jsoncs4|jr dS|jdkrtd|IdHd|_dS)NzResponse has not been startedT)Z _eof_sentr^rr\)r'r(r(r) write_eof>s  zWebSocketResponse.write_eofi)coder)rrr&c s|jdkrtd||j}|dk s,t|jdk rT|jsT|td|jIdH|jsd|_y8|j ||IdH|j }|dk st| IdHWnPt j t jfk rd|_Yn.tk r}zd|_||_dSd}~XYnX|jrdS|j}|dk s ty0tj|j|jd|IdH}WdQRXWnNt j k rZd|_Yn0tk r}zd|_||_dSd}~XYnX|jtjkr|j|_dSd|_t |_dSdSdS)NzCall .prepare() firstrTi)rF)r?rrTr@rarFrAZ feed_datar r\r^rcrZCancelledErrorr[rD ExceptionrGrB async_timeoutr1rHrEreadrrCLOSEr)r'rrreaderrdexcmsgr(r(r)r\GsV      zWebSocketResponse.close)r1r&c s^|jdkrtd|j}|dk s$tx2|jdk r:td|jrd|jd7_|jtkr`tdtS|j rnt Syf| |_z>t j |p|j|jd|jIdH}WdQRX|Wd|j}t|dd|_XWntjtjfk rd|_Yntk r*d|_|IdHttjddStk rr}z*|j|_|j|jd IdHttj|dSd}~XYnNtk r}z.||_d|_ d|_|IdHttj|dSd}~XYnX|j tj!krd|_ |j"|_|jsV|j#rV|IdHnZ|j tj$krd|_ nD|j tj%kr>|j&r>|'|j"IdHq(n|j tj(krV|j&rVq(|SdS) NzCall .prepare() firstz+Concurrent call to receive() is not allowedrzWebSocket connection is closed.)rTii)r))r@rrErarFrArCTHRESHOLD_CONNLOST_ACCESSr rBr Z create_futurerr1rIrrVr rZrr[rDrr\rrCLOSEDrrERRORrrGrrrrJCLOSINGZPINGrKrZPONG)r'r1rrwaiterrr(r(r)receive~sl        zWebSocketResponse.receive)r1cs6||IdH}|jtjkr0td|j|j|jS)Nz.Received message {}:{!r} is not WSMsgType.TEXT)rrrZTEXTrrur)r'r1rr(r(r) receive_strs  zWebSocketResponse.receive_strcs<||IdH}|jtjkr6td|jd|jd|jS)NzReceived message :z is not bytes)rrrBINARYrr)r'r1rr(r(r) receive_bytess zWebSocketResponse.receive_bytes)loadsr1)rr1r&cs|j|dIdH}||S)N)r1)r)r'rr1rr(r(r) receive_jsonszWebSocketResponse.receive_json)rr&cs tddS)Nz"Cannot call .write() for websocket)r)r'rr(r(r)writeszWebSocketResponse.writecCs|S)Nr()r'r(r(r) __aiter__szWebSocketResponse.__aiter__cs,|IdH}|jtjtjtjfkr(t|S)N)rrrrrrStopAsyncIteration)r'rr(r(r) __anext__szWebSocketResponse.__anext__)rr&cCs|jdk r|j|dS)N)r@Z set_exception)r'rr(r(r)_cancels zWebSocketResponse._cancel)r)r)N)N)N)N)8r+r,r-Z _length_checkfloatrr.rr0intr<rTrVrUrXrr r`rrrr_rbr rpropertyrrrr7 BaseExceptionrrrWrrrjsonrrrrrr\rrrrrrrrrrr __classcell__r(r()rRr)r4s`"   N   7? r)4rZryr{r~rtypingrrrrrattrZ multidictrrerabcr Zhelpersr r httpr r rrrrrrrrlogrZstreamsrrZtypedefsrrZweb_exceptionsrrZ web_requestrZ web_responser__all__rsr rr(r(r(r)s,   0