o
    ii                      @  s   d dl mZ d dlZd dlZd dlmZmZ d dl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 G dd	 d	ejZG d
d deZG dd dee ZG dd dZdS )    )annotationsN)AsyncIteratorIterable)Anycast)HTTPConnectionStateT)Response)MessageReceiveScopeSendc                   @  s   e Zd ZdZdZdZdZdS )WebSocketStater            N)__name__
__module____qualname__
CONNECTING	CONNECTEDDISCONNECTEDRESPONSE r   r   \/var/www/scraper.webshop2u.hu/html/venv/lib/python3.10/site-packages/starlette/websockets.pyr      s
    r   c                   @  s   e Zd Zddd	d
ZdS )WebSocketDisconnect  Ncodeintreason
str | NonereturnNonec                 C     || _ |pd| _d S N r   r   selfr   r   r   r   r   __init__      zWebSocketDisconnect.__init__r   Nr   r   r   r    r!   r"   )r   r   r   r)   r   r   r   r   r      s    r   c                      s   e Zd Zd? fd	d
Zd@ddZdAddZ		dBdCddZdAddZdDddZdEddZ	dFdGd#d$Z
dHd&d'ZdId)d*ZdJd,d-ZdKd/d0ZdLd1d2ZdFdMd3d4ZdNdOd9d:ZdPd=d>Z  ZS )Q	WebSocketscoper   receiver   sendr   r!   r"   c                   s<   t  | |d dksJ || _|| _tj| _tj| _d S )Ntype	websocket)superr)   _receive_sendr   r   client_stateapplication_stater(   r.   r/   r0   	__class__r   r   r)      s   zWebSocket.__init__r
   c                   s   | j tjkr#|  I dH }|d }|dkrtd|tj| _ |S | j tjkrI|  I dH }|d }|dvr?td||dkrGtj| _ |S td)	zT
        Receive ASGI websocket messages, ensuring valid state transitions.
        Nr1   zwebsocket.connectz3Expected ASGI message "websocket.connect", but got >   websocket.receivewebsocket.disconnectzMExpected ASGI message "websocket.receive" or "websocket.disconnect", but got r<   zBCannot call "receive" once a disconnect message has been received.)r6   r   r   r4   RuntimeErrorr   r   r(   messagemessage_typer   r   r   r/   #   s&   zWebSocket.receiver?   c                   s8  | j tjkr6|d }|dvrtd||dkrtj| _ n|dkr(tj| _ ntj| _ | |I dH  dS | j tjkro|d }|dvrKtd||dkrStj| _ z| |I dH  W dS  tyn   tj| _ t	d	d
w | j tjkr|d }|dkrtd||
ddstj| _ | |I dH  dS td)zQ
        Send ASGI websocket messages, ensuring valid state transitions.
        r1   >   websocket.closewebsocket.acceptwebsocket.http.response.startzhExpected ASGI message "websocket.accept", "websocket.close" or "websocket.http.response.start", but got rA   rC   N>   websocket.sendrA   zEExpected ASGI message "websocket.send" or "websocket.close", but got i  )r   zwebsocket.http.response.bodyz>Expected ASGI message "websocket.http.response.body", but got 	more_bodyFz6Cannot call "send" once a close message has been sent.)r7   r   r   r=   r   r   r   r5   OSErrorr   getr>   r   r   r   r0   ;   sJ   


zWebSocket.sendNsubprotocolr    headers$Iterable[tuple[bytes, bytes]] | Nonec                   s@   |pg }| j tjkr|  I d H  | d||dI d H  d S )NrB   )r1   rH   rI   )r6   r   r   r/   r0   )r(   rH   rI   r   r   r   acceptd   s
   zWebSocket.acceptc                 C  s$   |d dkrt |d |dd S )Nr1   r<   r   r   )r   rG   r(   r?   r   r   r   _raise_on_disconnectp   s   zWebSocket._raise_on_disconnectstrc                   <   | j tjkrtd|  I d H }| | tt|d S )N8WebSocket is not connected. Need to call "accept" first.text)r7   r   r   r=   r/   rM   r   rN   rL   r   r   r   receive_textt      
zWebSocket.receive_textbytesc                   rO   )NrP   rT   )r7   r   r   r=   r/   rM   r   rT   rL   r   r   r   receive_bytes{   rS   zWebSocket.receive_bytesrQ   moder   c                   sh   |dvr	t d| jtjkrt d|  I d H }| | |dkr(|d }n|d d}t|S )N>   rQ   binary1The "mode" argument should be "text" or "binary".rP   rQ   rT   utf-8)	r=   r7   r   r   r/   rM   decodejsonloads)r(   rV   r?   rQ   r   r   r   receive_json   s   


zWebSocket.receive_jsonAsyncIterator[str]c                 C ,   z
	 |   I d H V  q ty   Y d S w N)rR   r   r(   r   r   r   	iter_text      zWebSocket.iter_textAsyncIterator[bytes]c                 C r_   r`   )rU   r   ra   r   r   r   
iter_bytes   rc   zWebSocket.iter_bytesAsyncIterator[Any]c                 C r_   r`   )r]   r   ra   r   r   r   	iter_json   rc   zWebSocket.iter_jsondatac                      |  d|dI d H  d S )NrD   r1   rQ   r0   r(   rh   r   r   r   	send_text      zWebSocket.send_textc                   ri   )NrD   r1   rT   rk   rl   r   r   r   
send_bytes   rn   zWebSocket.send_bytesc                   sd   |dvr	t dtj|ddd}|dkr"| d|dI d H  d S | d|d	d
I d H  d S )N>   rQ   rW   rX   ),:F)
separatorsensure_asciirQ   rD   rj   rY   ro   )r=   r[   dumpsr0   encode)r(   rh   rV   rQ   r   r   r   	send_json   s    zWebSocket.send_jsonr   r   r   r   c                   s"   |  d||pddI d H  d S )NrA   r%   r1   r   r   rk   r'   r   r   r   close   s    zWebSocket.closeresponser	   c                   s8   d| j di v r|| j | j| jI d H  d S td)Nzwebsocket.http.response
extensionszCThe server doesn't support the Websocket Denial Response extension.)r.   rG   r/   r0   r=   )r(   rz   r   r   r   send_denial_response   s   zWebSocket.send_denial_responser.   r   r/   r   r0   r   r!   r"   )r!   r
   )r?   r
   r!   r"   )NN)rH   r    rI   rJ   r!   r"   )r!   rN   )r!   rT   )rQ   )rV   rN   r!   r   )r!   r^   )r!   rd   )r!   rf   )rh   rN   r!   r"   )rh   rT   r!   r"   )rh   r   rV   rN   r!   r"   r+   r,   )rz   r	   r!   r"   )r   r   r   r)   r/   r0   rK   rM   rR   rU   r]   rb   re   rg   rm   rp   rw   ry   r|   __classcell__r   r   r9   r   r-      s&    

+







	r-   c                   @  s"   e Zd Zddd	d
ZdddZdS )WebSocketCloser   Nr   r   r   r    r!   r"   c                 C  r#   r$   r&   r'   r   r   r   r)      r*   zWebSocketClose.__init__r.   r   r/   r   r0   r   c                   s    |d| j | jdI d H  d S )NrA   rx   r&   r8   r   r   r   __call__   s   zWebSocketClose.__call__r+   r,   r}   )r   r   r   r)   r   r   r   r   r   r      s    r   )
__future__r   enumr[   collections.abcr   r   typingr   r   starlette.requestsr   r   starlette.responsesr	   starlette.typesr
   r   r   r   Enumr   	Exceptionr   r-   r   r   r   r   r   <module>   s     %