o
    li2                     @  sR  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mZmZ d dlmZ d dlmZ d dlmZmZ d dlZd dlmZ d dl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$ eeee$e e"f Z%ej&ej'fZ(e	jdkre(ej)f7 Z(e*dZ+G dd dZ,G dd dZ-dS )    )annotationsN)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKINGUnion)asyncio_run)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)WebSocketsSansIOProtocol)
WSProtocol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   U/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/uvicorn/server.py__init__/   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d*d+d
dZd*d+ddZd*d+ddZd*d+ddZd,ddZd-ddZ	d.ddZ
d*d+ddZd-dd Zejd/d"d#Zd0d'd(ZdS )1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   7   s   
zServer.__init__Nsocketslist[socket.socket] | Nonec                 C  s   t | j|d| j dS )Nr+   )Zloop_factory)r	   server$   Zget_loop_factoryr   r+   r   r   r   runB   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   r.   E   s   
"zServer.servec                   s   t  }| j}|js|  ||| _d}dtjddd d }t	j
||d|id | j|d	I d H  | jr:d S |  I d H  | j|d	I d H  d
}dtjddd d }t	j
||d|id d S )NzStarted server process [%d]zStarted server process [z%dcyan)Zfg]color_messageextrar-   zFinished server process [%d]zFinished server process [)osgetpidr$   ZloadedloadZlifespan_classlifespanclickstyleloggerinfostartupr'   	main_loopshutdown)r   r+   
process_idr$   messager6   r   r   r   r3   I   s"   zServer._servec              
     s4  j  I d H  j jrd_d S 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"#d W Y d }
~
nd }
~
ww |jd usJ |j}|g_|d u r$| n	 d_%d S )NT_loop asyncio.AbstractEventLoop | Noner   asyncio.Protocolc                   s    j  jjj| dS )N)r$   r%   Z	app_staterF   )Zhttp_protocol_classr%   r<   state)rF   r$   r   r   r   create_protocolh   s   z'Server.startup.<locals>.create_protocolsocksocket.SocketTypec                 S  s"   ddl m} | t }||S )Nr   )	fromshare)socketrN   sharer9   r:   )rL   rN   Z	sock_datar   r   r   _share_sockety   s   z%Server.startup.<locals>._share_socketWindows   )rL   sslbacklogi  )pathrT   rU   )hostportrT   rU   r1   )rF   rG   r   rH   )rL   rM   r   rM   )&r<   rA   r'   r$   asyncioget_running_loopserversplatformsystemworkerscreate_serverrT   rU   appendfdrO   fromfdAF_UNIXSOCK_STREAMr+   udsr9   rV   existsstatst_modecreate_unix_serverchmodrW   rX   OSErrorr?   errorrC   sysexit_log_started_messager&   )r   r+   rK   looprQ   rL   Z
is_windowsserver	listenersZ	uds_permsexcr   rJ   r   rA   `   sr   









zServer.startuprr   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	j
|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]:%drS   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr6   r7   )r$   ra   r?   r@   getsocknamere   rW   rX   rT   r=   r>   )
r   rr   r$   rL   Zaddr_formatrW   rX   Zprotocol_namerE   r6   r   r   r   ro      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   rS   i / 皙?)on_tickrY   sleep)r   counterr'   r   r   r   rB      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j}|d ur_| jj|kr_td| d dS dS )	N
   r   T)usegmts   datezMaximum request limit of z exceeded. Terminating process.F)timer   encoder$   date_headerZencoded_headersr%   r   Zcallback_notifyr)   Ztimeout_notifyr'   Zlimit_max_requestsr   r?   warning)r   r}   current_timeZcurrent_dater   Z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 downrz   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)r?   r@   r[   closelistr%   r   rC   rY   r|   wait_for_wait_tasks_to_completer$   Ztimeout_graceful_shutdownTimeoutErrorrl   lenr   cancelr(   r<   )r   r+   rq   rL   
connectiontr   r   r   rC     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)rz   z@Waiting for background tasks to complete. (CTRL+C to force quit))
r%   r   r(   r?   r@   rY   r|   r   r[   wait_closed)r   r   rq   r   r   r   r   '  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>A  s    z*Server.capture_signals.<locals>.<dictcomp>)		threadingcurrent_threadmain_threadHANDLED_SIGNALSitemsr   reversedr*   raise_signal)r   Zoriginal_handlersr   handlerZcaptured_signalr   r   r   r2   9  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*   r`   r'   r   SIGINTr(   )r   r   r   r   r   r   r   M  s   

zServer.handle_exit)r$   r
   r   r   r1   )r+   r,   r   r   )rr   rt   r   r   r   )r}   r~   r   r   )r   r   )r   r~   r   r   r   r   )r   r    r!   r   r0   r.   r3   rA   ro   rB   r{   rC   r   
contextlibcontextmanagerr2   r   r   r   r   r   r#   6   s    

]
#
	
 r#   ).
__future__r   rY   r   loggingr9   r\   r   rO   rm   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r   r=   Zuvicorn._compatr	   Zuvicorn.configr
   Zuvicorn.protocols.http.h11_implr   Z%uvicorn.protocols.http.httptools_implr   Z,uvicorn.protocols.websockets.websockets_implr   Z3uvicorn.protocols.websockets.websockets_sansio_implr   Z)uvicorn.protocols.websockets.wsproto_implr   Z	Protocolsr   SIGTERMr   ZSIGBREAK	getLoggerr?   r   r#   r   r   r   r   <module>   sB    

