a
    3j2                     @  sV  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r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ee$e e"f Z%ej&ej'fZ(e	jdkr,e(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dZdS )ServerStatezP
    Shared servers state that is available between all protocol instances.
    Nonereturnc                 C  s    d| _ t | _t | _g | _d S )Nr   )total_requestssetconnectionstasksdefault_headersself r   k/www/wwwroot/dpstar/app/297b3aabda72fedb274352021c2dd8b5_venv/lib/python3.9/site-packages/uvicorn/server.py__init__/   s    zServerState.__init__N)__name__
__module____qualname____doc__r   r   r   r   r   r   *   s   r   c                   @  s   e Zd ZdddddZd(dddd	d
Zd)dddddZd*dddddZd+dddddZdddddZddddZ	dddddZ
d,dddddZdddd Zejd!dd"d#Zdd$dd%d&d'ZdS )-Serverr
   r   )configr   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__Nzlist[socket.socket] | None)socketsr   c                 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    n1 s.0    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rrd 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+   Z
process_idr$   messager4   r   r   r   r1   I   s     zServer._servec              
     sJ  j  I d H  j jr"d_d S j dddd fdd}t }|d urdddd	d
}g _|D ]N}t dk} j	dkr|r||}|j
|| j jdI d H }j| qj|}nh jd ur t jtjtj}|j
|| j jdI d H }|jd usJ |j}|g_n
 jd urd}	tj jrNt jj}	|j| j j jdI d H }t j|	 |jd usJ |j}|g_nz&|j
| j j j jdI d H }W nJ ty
 }
 z0t |
 j ! I d H  t"#d W Y d }
~
n
d }
~
0 0 |jd usJ |j}|g_|d u r@$| n d_%d S )NTz asyncio.AbstractEventLoop | Nonezasyncio.Protocol)_loopr   c                   s    j  jjj| dS )N)r$   r%   Z	app_staterC   )Zhttp_protocol_classr%   r:   state)rC   r$   r   r   r   create_protocolh   s    z'Server.startup.<locals>.create_protocolzsocket.SocketType)sockr   c                 S  s"   ddl m} | t }||S )Nr   )	fromshare)socketrH   Zsharer7   r8   )rG   rH   Z	sock_datar   r   r   _share_sockety   s    z%Server.startup.<locals>._share_socketWindows   )rG   sslbacklogi  )pathrM   rN   )hostportrM   rN   )N)&r:   r?   r'   r$   asyncioZget_running_loopserversplatformsystemworkerscreate_serverrM   rN   appendfdrI   fromfdAF_UNIXSOCK_STREAMr+   udsr7   rO   existsstatst_modeZcreate_unix_serverchmodrP   rQ   OSErrorr=   errorrA   sysexit_log_started_messager&   )r   r+   rF   looprJ   rG   Z
is_windowsserver	listenersZ	uds_permsexcr   rE   r   r?   `   sj     



 
zServer.startupzSequence[socket.SocketType])ri   r   c           
      C  s   | j }|jd ur*|d }td|  n|jd urDtd|j nd}|jd u rVdn|j}d|v rhd}|j}|dkr|d  d }|jrd	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]:%drL   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr4   r5   )r$   rY   r=   r>   getsocknamer]   rP   rQ   rM   r;   r<   )
r   ri   r$   rG   Zaddr_formatrP   rQ   Zprotocol_namerB   r4   r   r   r   rf      s4    

zServer._log_started_messager   c                   sN   d}|  |I d H }|sJ|d7 }|d }tdI d H  |  |I d H }qd S )Nr   rL   i / 皙?)on_tickrR   sleep)r   counterr'   r   r   r   r@      s    zServer.main_loopintbool)rs   r   c                   s   |d dkrt   }t|dd }| jjr8d|fg}ng }|| jj | j_| jjd ur|| j	 | jj
kr|| _	| j I d H  | jrdS | jj}|d ur| jj|krt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   rs   current_timeZcurrent_daterz   Zmax_requestsr   r   r   rq      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 nB tjy   t dt| jj | jjD ]}|jdd qY n0 | js| j I d H  d S )NzShutting downrp   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)r=   r>   rS   closelistr%   r   rA   rR   rr   wait_for_wait_tasks_to_completer$   Ztimeout_graceful_shutdownTimeoutErrorrc   lenr   cancelr(   r:   )r   r+   rh   rG   
connectiontr   r   r   rA     s,    





zServer.shutdownc                   s   | j jr<| js<d}t| | j jr<| js<tdI d H  q| j jrx| jsxd}t| | j jrx| jsxtdI d H  qX| jD ]}|	 I d H  q~d S )Nz8Waiting for connections to close. (CTRL+C to force quit)rp   z@Waiting for background tasks to complete. (CTRL+C to force quit))
r%   r   r(   r=   r>   rR   rr   r   rS   Zwait_closed)r   r~   rh   r   r   r   r   '  s    


zServer._wait_tasks_to_completez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|| q^0 t jD ]}t| qd S )Nc                   s   i | ]}|t  | jqS r   )signalhandle_exit).0sigr   r   r   
<dictcomp>A      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   r0   9  s    zServer.capture_signalszFrameType | None)r   framer   c                 C  s.   | j | | jr$|tjkr$d| _nd| _d S )NT)r*   rX   r'   r   SIGINTr(   )r   r   r   r   r   r   r   M  s    zServer.handle_exit)N)N)N)N)N)r   r    r!   r   r/   r-   r1   r?   rf   r@   rq   rA   r   
contextlibcontextmanagerr0   r   r   r   r   r   r#   6   s   ]#	 r#   ).
__future__r   rR   r   loggingr7   rT   r   rI   rd   r   rx   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>   s@   
