o
    j4                     @  s  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dlmZ d d	lmZmZ erd 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* e e"B e$B e*B e&B e(B Z+de,d< e	j-e	j.fZ/ejdkre/e	j0f7 Z/e1dZ2G dd dZ3G dd dZ4dS )    )annotationsN)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKING	TypeAlias)style)asyncio_run)STARTUP_FAILUREConfig)H11Protocol)HttpToolsProtocol)ZttpProtocol)WebSocketProtocol)WebSocketsSansIOProtocol)
WSProtocolr   	Protocolswin32zuvicorn.errorc                   @  s   e Zd ZdZdddZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    returnNonec                 C  s    d| _ t | _t | _g | _d S Nr   )total_requestssetconnectionstasksdefault_headersself r    L/home/djax/ivt_ai_plugin/venv/lib/python3.10/site-packages/uvicorn/server.py__init__3   s   
zServerState.__init__Nr   r   )__name__
__module____qualname____doc__r"   r    r    r    r!   r   .   s    r   c                   @  s   e Zd Zd,ddZejd-dd	Zd.d/ddZd.d/ddZd.d/ddZ	d.d/ddZ
d0ddZd1ddZd2ddZd.d/d d!Zd1d"d#Zejd3d%d&Zd4d*d+Zd
S )5Serverconfigr   r   r   c                 C  s0   || _ t | _d| _d| _d| _d| _g | _d S )NFg        )r)   r   server_statestartedshould_exit
force_exitlast_notified_captured_signals)r   r)   r    r    r!   r"   ;   s   
zServer.__init__
int | Nonec                 C  s(   | j jd u rd S | j jtd| j j S r   )r)   limit_max_requestsrandomrandintlimit_max_requests_jitterr   r    r    r!   r1   F   s   zServer.limit_max_requestsNsocketslist[socket.socket] | Nonec                 C  s   t | j|d| j dS )Nr5   )loop_factory)r
   server)   get_loop_factoryr   r5   r    r    r!   runL   s   z
Server.runc                   s@   |    | |I d H  W d    d S 1 sw   Y  d S N)capture_signals_server;   r    r    r!   r9   O   s   
"zServer.servec                   s   t  }| j}|js|  ||| _d}dtddd d }tj	||d|id | j
|d	I d H  | js>|  I d H  | jrb| j|d	I d H  d
}dtddd d }tj	||d|id d S d S )NzStarted server process [%d]zStarted server process [z%dcyan)fg]color_messageextrar7   zFinished server process [%d]zFinished server process [)osgetpidr)   loadedloadlifespan_classlifespanr	   loggerinfostartupr,   	main_loopr+   shutdown)r   r5   
process_idr)   messagerC   r    r    r!   r?   S   s$   zServer._servec              
     s4  j  I d H  j jrtt j 	 dd fdd}t }|d ur\dd	d
}g _	|D ]'}t
 dk} jdkrD|rD||}|j|| j jdI d H }j	| q1|}n jd urt jtjtj}|j|| j jdI d H }|jd usJ |j}|g_	n jd urd}	tj jrt jj}	|j| j j jdI d H }t j|	 |jd usJ |j}|g_	nGz|j| j j  j jdI d H }W n$ t!y }
 zt"#|
 j $ I d H  tt W Y d }
~
nd }
~
ww |jd usJ |j}|g_	|d u r%| n	 d_&d S )N_loop asyncio.AbstractEventLoop | Noner   asyncio.Protocolc                   s    j  jjj| dS )N)r)   r*   	app_staterS   )http_protocol_classr*   rK   state)rS   r)   r   r    r!   create_protocolq   s   z'Server.startup.<locals>.create_protocolsocksocket.SocketTypec                 S  s"   ddl m} | t }||S )Nr   )	fromshare)socketr]   sharerF   rG   )r[   r]   	sock_datar    r    r!   _share_socket   s   z%Server.startup.<locals>._share_socketWindows   )r[   sslbacklogi  )pathrd   re   )hostportrd   re   Tr=   )rS   rT   r   rU   )r[   r\   r   r\   )'rK   rN   r,   sysexitr   r)   asyncioget_running_loopserversplatformsystemworkerscreate_serverrd   re   appendfdr^   fromfdAF_UNIXSOCK_STREAMr5   udsrF   rf   existsstatst_modecreate_unix_serverchmodrg   rh   OSErrorrL   errorrP   _log_started_messager+   )r   r5   rZ   loopra   r[   
is_windowsserver	listeners	uds_permsexcr    rY   r!   rN   j   sp   










zServer.startupr   Sequence[socket.SocketType]c           
      C  s   | j }|jd ur|d }td|  d S |jd ur$td|j d S d}|jd u r-dn|j}d|v r6d}|j}|dkrE|d  d }|jrJd	nd
}d| d}dt	|dd d }	tj||||d|	id d S )Nr   z3Uvicorn running on socket %s (Press CTRL+C to quit)z8Uvicorn running on unix socket %s (Press CTRL+C to quit)z
%s://%s:%dz0.0.0.0:z%s://[%s]:%drc   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldrC   rD   )
r)   rs   rL   rM   getsocknamerw   rg   rh   rd   r	   )
r   r   r)   r[   addr_formatrg   rh   protocol_namerR   rC   r    r    r!   r      s4   


zServer._log_started_messagec                   sV   d}|  |I d H }|s)|d7 }|d }tdI d H  |  |I d H }|rd S d S )Nr   rc   i / 皙?)on_tickrk   sleep)r   counterr,   r    r    r!   rO      s   zServer.main_loopr   intboolc                   s   |d dkrAt   }t|dd }| jjrd|fg}ng }|| jj | j_| jjd urA|| j	 | jj
krA|| _	| j I d H  | jrFdS | j}|d ur[| jj|kr[td| dS dS )N
   r   T)usegmts   datez:Maximum request limit of %d exceeded. Terminating process.F)timer   encoder)   date_headerencoded_headersr*   r   callback_notifyr.   timeout_notifyr,   r1   r   rL   rM   )r   r   current_timecurrent_dater   max_requestsr    r    r!   r      s&   zServer.on_tickc                   s   t d | jD ]}|  q	|pg D ]}|  qt| jjD ]}|  q!t	dI d H  ztj
|  | jjdI d H  W n! tjya   t dt| jj | jjD ]}|jdd qVY nw | jso| j I d H  d S d S )NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)rL   rM   rm   closelistr*   r   rP   rk   r   wait_for_wait_tasks_to_completer)   timeout_graceful_shutdownTimeoutErrorr~   lenr   cancelr-   rK   )r   r5   r   r[   
connectiontr    r    r!   rP     s4   





	zServer.shutdownc                   s   | j jr%| js%d}t| | j jr%| js%tdI d H  | j jr%| jr| j jrI| jsId}t| | j jrI| jsItdI d H  | j jrI| jr:| jD ]	}|	 I d H  qLd S )Nz8Waiting for connections to close. (CTRL+C to force quit)r   z@Waiting for background tasks to complete. (CTRL+C to force quit))
r*   r   r-   rL   rM   rk   r   r   rm   wait_closed)r   r   r   r    r    r!   r   0  s    


zServer._wait_tasks_to_completeGenerator[None, None, None]c                 #  s    t  t  urd V  d S  fddtD }zd V  W | D ]
\}}t|| q n| D ]
\}}t|| q0w t jD ]}t| qAd S )Nc                   s   i | ]
}|t  | jqS r    )signalhandle_exit).0sigr   r    r!   
<dictcomp>J  s    z*Server.capture_signals.<locals>.<dictcomp>)		threadingcurrent_threadmain_threadHANDLED_SIGNALSitemsr   reversedr/   raise_signal)r   original_handlersr   handlercaptured_signalr    r   r!   r>   B  s   zServer.capture_signalsr   frameFrameType | Nonec                 C  s0   | j | | jr|tjkrd| _d S d| _d S )NT)r/   rr   r,   r   SIGINTr-   )r   r   r   r    r    r!   r   V  s   

zServer.handle_exit)r)   r   r   r   )r   r0   r=   )r5   r6   r   r   )r   r   r   r   r#   )r   r   r   r   )r   r   )r   r   r   r   r   r   )r$   r%   r&   r"   	functoolscached_propertyr1   r<   r9   r?   rN   r   rO   r   rP   r   
contextlibcontextmanagerr>   r   r    r    r    r!   r(   :   s     

\
#
	
 r(   )5
__future__r   rk   r   r   loggingrF   rn   r2   r   r^   ri   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r   uvicorn._ansir	   uvicorn._compatr
   uvicorn.configr   r   uvicorn.protocols.http.h11_implr   %uvicorn.protocols.http.httptools_implr    uvicorn.protocols.http.zttp_implr   ,uvicorn.protocols.websockets.websockets_implr   3uvicorn.protocols.websockets.websockets_sansio_implr   )uvicorn.protocols.websockets.wsproto_implr   r   __annotations__r   SIGTERMr   SIGBREAK	getLoggerrL   r   r(   r    r    r    r!   <module>   sJ    


