o
    96d/                     @   s(  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
 d dlmZ d dlmZmZmZmZmZmZmZ d dlZd dlmZ ernd dlmZ d dlmZ d dlmZ d d	lmZ 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 )    N)
formatdate)	FrameType)TYPE_CHECKINGListOptionalSequenceSetTupleUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
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.
    returnNc                 C   s    d| _ t | _t | _g | _d S )Nr   )total_requestssetconnectionstasksdefault_headers)self r   eC:\Users\jesus\OneDrive\Desktop\erpjis_fastapi\backend\jisbackend\Lib\site-packages\uvicorn/server.py__init__*   s   
zServerState.__init__r   N)__name__
__module____qualname____doc__r   r   r   r   r   r   %   s    r   c                   @   s   e Zd ZdeddfddZddeeej  ddfddZddeeej  ddfd	d
Z	ddeeej  ddfddZ
deej ddfddZd ddZdedefddZddeeej  ddfddZd ddZd ddZdedee ddfddZdS )!Serverconfigr   Nc                 C   s*   || _ t | _d| _d| _d| _d| _d S )NFg        )r"   r   server_statestartedshould_exit
force_exitlast_notified)r   r"   r   r   r   r   2   s   
zServer.__init__socketsc                 C   s   | j   t| j|dS )Nr(   )r"   Zsetup_event_loopasynciorunserve)r   r(   r   r   r   r+   ;   s   
z
Server.runc                    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install_signal_handlersclickstyleloggerinfostartupr%   	main_loopshutdown)r   r(   
process_idr"   messager/   r   r   r   r,   ?   s$   zServer.servec              
      sR  j  I d H  j jrd_d S j 	 ddttj dtjf fdd}t }|d urjdt	j
dt	j
fdd}g _|D ]'}t d	k} jd
krR|rR||}|j|| j jdI d H }j| q?|}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_nHz|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_loopr   c                    s    j  jjj| dS )N)r"   r#   Z	app_stater@   )Zhttp_protocol_classr#   r5   state)r@   r"   r   r   r   create_protocol`   s   z'Server.startup.<locals>.create_protocolsockc                 S   s"   ddl m} | t }||S )Nr   )	fromshare)socketrE   sharer2   r3   )rD   rE   Z	sock_datar   r   r   _share_socketq   s   z%Server.startup.<locals>._share_socketWindows   )rD   sslbacklogi  )pathrK   rL   )hostportrK   rL   N)*r5   r;   r%   r"   r   r*   AbstractEventLoopProtocolget_running_looprF   
SocketTypeserversplatformsystemworkerscreate_serverrK   rL   appendfdfromfdAF_UNIXSOCK_STREAMr(   udsr2   rM   existsstatst_modecreate_unix_serverchmodrN   rO   OSErrorr9   errorr=   sysexit_log_started_messager$   )r   r(   rC   looprH   rD   Z
is_windowsserver	listenersZ	uds_permsexcr   rB   r   r;   X   s   









zServer.startuprl   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]:%drJ   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr/   r0   )r"   r[   r9   r:   getsocknamer_   rN   rO   rK   r7   r8   )
r   rl   r"   rD   Zaddr_formatrN   rO   Zprotocol_namer?   r/   r   r   r   ri      sB   


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   rJ   i / 皙?)on_tickr*   sleep)r   counterr%   r   r   r   r<      s   zServer.main_looprv   c                    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rT| jj| jjkS dS )N
   r   T)usegmts   dateF)timer   encoder"   date_headerZencoded_headersr#   r   Zcallback_notifyr'   Ztimeout_notifyr%   Zlimit_max_requestsr   )r   rv   current_timeZcurrent_dater{   r   r   r   rt      s$   
zServer.on_tickc                    s  t d | jD ]}|  q	|pg D ]}|  q| jD ]	}| I d H  qt| jjD ]}|  q.t	
dI d H  zt	j|  | jjdI d H  W n+ t	jyx   t dt| jj | jjD ]}tjdk ro|  qc|jdd qcY nw | js| j I d H  d S d S )NzShutting downrs   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceeded)   	   z2Task cancelled, timeout graceful shutdown exceeded)msg)r9   r:   rU   closewait_closedlistr#   r   r=   r*   ru   wait_for_wait_tasks_to_completer"   Ztimeout_graceful_shutdownTimeoutErrorrf   lenr   rg   version_infocancelr&   r5   )r   r(   rk   rD   
connectiontr   r   r   r=     s<   








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rK| jsMd}t| | j jrO| jsStdI d H  | j jrQ| jr:d S d S d S d S d S d S )Nz8Waiting for connections to close. (CTRL+C to force quit)rs   z@Waiting for background tasks to complete. (CTRL+C to force quit))r#   r   r&   r9   r:   r*   ru   r   )r   r   r   r   r   r   ,  s   

zServer._wait_tasks_to_completec                 C   sl   t  t  ur
d S t }ztD ]}||| j|d  qW d S  ty5   tD ]	}t		|| j q(Y d S w rP   )
	threadingcurrent_threadmain_threadr*   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   rj   sigr   r   r   r6   ;  s   zServer.install_signal_handlersr   framec                 C   s$   | j r|tjkrd| _d S d| _ d S )NT)r%   r   SIGINTr&   )r   r   r   r   r   r   r   J  s   

zServer.handle_exitrP   r   )r   r   r   r   r   r   r   rF   r+   r,   r;   r   rT   ri   r<   intboolrt   r=   r   r6   r   r   r   r   r   r   r!   1   s    	a
)	
%
r!   ))r*   loggingr2   rV   r   rF   rg   r   ry   email.utilsr   typesr   typingr   r   r   r   r   r	   r
   r7   Zuvicorn.configr   Zuvicorn.protocols.http.h11_implr   Z%uvicorn.protocols.http.httptools_implr   Z,uvicorn.protocols.websockets.websockets_implr   Z)uvicorn.protocols.websockets.wsproto_implr   Z	Protocolsr   SIGTERMr   SIGBREAK	getLoggerr9   r   r!   r   r   r   r   <module>   s8    $

