o
    tfa                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
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 d d
lmZ G dd dZG dd dZdS )    )annotationsN)status)is_async_callable)run_in_threadpool)HTTPException)Request)PlainTextResponseResponse)MessageReceiveScopeSend)	WebSocketc                   @  s4   e Zd Zdd	d
ZdddZdddZdddZdS )HTTPEndpointscoper   receiver   sendr   returnNonec                   s:   |d dksJ | _ | _| _ fdddD  _d S )Ntypehttpc                   s$   g | ]}t  | d d ur|qS N)getattrlower).0methodself \/var/www/html/software/conda/envs/catlas/lib/python3.10/site-packages/starlette/endpoints.py
<listcomp>   s
    z)HTTPEndpoint.__init__.<locals>.<listcomp>)GETHEADPOSTPUTPATCHDELETEOPTIONS)r   r   r   _allowed_methodsr   r   r   r   r   r   r   __init__   s   
zHTTPEndpoint.__init__(typing.Generator[typing.Any, None, None]c                 C     |    S r   dispatch	__await__r   r   r   r   r/         zHTTPEndpoint.__await__c                   s   t | j| jd}|jdkrt| dsdn|j }t| || j}t|}|r/||I d H }nt	||I d H }|| j| j| j
I d H  d S )N)r   r"   headget)r   r   r   r   hasattrr   r   method_not_allowedr   r   r   )r   requesthandler_namehandleris_asyncresponser   r   r   r.      s   zHTTPEndpoint.dispatchr5   r   r	   c                   s6   dd | ji}d| jv rtd|dtdd|dS )NZAllowz, Zappi  )status_codeheaderszMethod Not Allowed)joinr(   r   r   r   )r   r5   r;   r   r   r   r4   1   s
   
zHTTPEndpoint.method_not_allowedNr   r   r   r   r   r   r   r   r   r+   r   r   )r5   r   r   r	   )__name__
__module____qualname__r*   r/   r.   r4   r   r   r   r   r      s
    


r   c                   @  s`   e Zd ZU dZded< 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S )*WebSocketEndpointNz
str | Noneencodingr   r   r   r   r   r   r   r   c                 C  s&   |d dksJ || _ || _|| _d S )Nr   	websocket)r   r   r   r)   r   r   r   r*   >   s   
zWebSocketEndpoint.__init__r+   c                 C  r,   r   r-   r   r   r   r   r/   D   r0   zWebSocketEndpoint.__await__c              
     s   t | j| j| jd}| |I d H  tj}zSz5	 | I d H }|d dkr9| ||I d H }| ||I d H  n|d dkrJt	|
dpGtj}nqW n ty] } ztj}|d }~ww W | ||I d H  d S | ||I d H  w )N)r   r   Tr   zwebsocket.receivezwebsocket.disconnectcode)r   r   r   r   
on_connectr   ZWS_1000_NORMAL_CLOSUREdecode
on_receiveintr2   	ExceptionZWS_1011_INTERNAL_ERRORon_disconnect)r   rE   
close_codemessagedataexcr   r   r   r.   G   s0   	*zWebSocketEndpoint.dispatchrE   r   rN   r
   
typing.Anyc                   s  | j dkrd|vr|jtjdI d H  td|d S | j dkr7d|vr3|jtjdI d H  td|d S | j dkrm|dd urH|d }n|d d}zt|W S  tj	j
yl   |jtjdI d H  tdw | j d u szJ d	| j  |dr|d S |d S )
Ntext)rF   z/Expected text websocket messages, but got bytesbytesz/Expected bytes websocket messages, but got textjsonzutf-8zMalformed JSON data received.z!Unsupported 'encoding' attribute )rD   closer   ZWS_1003_UNSUPPORTED_DATARuntimeErrorr2   rH   rT   loadsdecoderJSONDecodeError)r   rE   rN   rR   r   r   r   rH   ^   s2   




zWebSocketEndpoint.decodec                   s   |  I dH  dS )z3Override to handle an incoming websocket connectionN)accept)r   rE   r   r   r   rG   |   s   zWebSocketEndpoint.on_connectrO   c                      dS )z0Override to handle an incoming websocket messageNr   )r   rE   rO   r   r   r   rI          zWebSocketEndpoint.on_receiverM   rJ   c                   r[   )z,Override to handle a disconnecting websocketNr   )r   rE   rM   r   r   r   rL      r\   zWebSocketEndpoint.on_disconnectr=   r>   r?   )rE   r   rN   r
   r   rQ   )rE   r   r   r   )rE   r   rO   rQ   r   r   )rE   r   rM   rJ   r   r   )r@   rA   rB   rD   __annotations__r*   r/   r.   rH   rG   rI   rL   r   r   r   r   rC   ;   s   
 





rC   )
__future__r   rT   typingZ	starletter   Zstarlette._utilsr   Zstarlette.concurrencyr   Zstarlette.exceptionsr   Zstarlette.requestsr   Zstarlette.responsesr   r	   Zstarlette.typesr
   r   r   r   Zstarlette.websocketsr   r   rC   r   r   r   r   <module>   s    +