
    df/                        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r!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f   Z ejB                  ejD                  fZ#ej                  d
k(  re#ejH                  fz  Z# ejJ                  d      Z& G d d      Z' G d d      Z(y)    N)
formatdate)	FrameType)TYPE_CHECKINGListOptionalSequenceSetTupleUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocolwin32zuvicorn.errorc                       e Zd ZdZddZy)ServerStatezP
    Shared servers state that is available between all protocol instances.
    Nc                 \    d| _         t               | _        t               | _        g | _        y )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    G/home/api-vastappli/venv/lib/python3.12/site-packages/uvicorn/server.py__init__zServerState.__init__*   s%    -0U(+
:<    returnN)__name__
__module____qualname____doc__r    r   r   r   r   %   s    =r   r   c                   P   e Zd ZdeddfdZddeeej                        ddfdZddeeej                        ddfdZ	ddeeej                        ddfdZ
d	eej                     ddfd
ZddZdedefdZddeeej                        ddfdZddZddZdedee   ddfdZy)Serverconfigr   Nc                 h    || _         t               | _        d| _        d| _        d| _        d| _        y )NFg        )r'   r   server_statestartedshould_exit
force_exitlast_notified)r   r'   s     r   r   zServer.__init__2   s1    'M  r   socketsc                     | j                   j                          t        j                  | j	                  |            S )Nr.   )r'   setup_event_loopasynciorunserve)r   r.   s     r   r3   z
Server.run;   s,    $$&{{4::g:677r   c                 r  K   t        j                         }| j                  }|j                  s|j	                          |j                  |      | _        | j                          d}dt        j                  dd      z   dz   }t        j                  ||d|i       | j                  |	       d {    | j                  ry | j                          d {    | j                  |	       d {    d
}dt        j                  dd      z   dz   }t        j                  ||d|i       y 7 }7 Z7 Bw)NzStarted server process [%d]zStarted server process [z%dcyan)fg]color_messageextrar0   zFinished server process [%d]zFinished server process [)osgetpidr'   loadedloadlifespan_classlifespaninstall_signal_handlersclickstyleloggerinfostartupr+   	main_loopshutdown)r   r.   
process_idr'   messager9   s         r   r4   zServer.serve?   s	    YY[
}}KKM--f5$$&/2U[[&5QQTWWGZ/OPll7l+++nnmmGm,,,03ekk$66RRUXXGZ/OP 	, 	,s6   B1D73D14$D7D3D72D53?D73D75D7c                    K    j                   j                          d {     j                   j                  rd _        y  j                  	 ddt        t
        j                     dt
        j                  f fd}t        j                         }|dt        j                  dt        j                  fd}g  _        |D ]~  }t        j                         dk(  }j                  dkD  r
|r ||      }|j                  ||j                   j"                  	       d {   } j                  j%                  |        |}nj&                  t        j(                  j&                  t        j*                  t        j,                        }|j                  ||j                   j"                  	       d {   }|j.                  J |j.                  }|g _        nGj0                  d
}	t2        j4                  j7                  j0                        r)t3        j8                  j0                        j:                  }	|j=                  |j0                  j                   j"                         d {   }t3        j>                  j0                  |	       |j.                  J |j.                  }|g _        ni	 |j                  |j@                  jB                  j                   j"                         d {   }j.                  J |j.                  }|g _        | jQ                  |       d _)        y 	 d _)        y 7 07 27 7 7 U# tD        $ rW}
tF        jI                  |
        j                   jK                          d {  7   tM        jN                  d       Y d }
~
d }
~
ww xY ww)NT_loopr   c                 j    j                  j                  j                  j                  |       S )N)r'   r)   	app_staterM   )http_protocol_classr)   rA   state)rM   r'   r   s    r   create_protocolz'Server.startup.<locals>.create_protocol`   s9     --!..----	 .  r   sockc                 d    ddl m} | j                  t        j                               } ||      S )Nr   )	fromshare)socketrU   sharer<   r=   )rS   rU   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketq   s&    
 - JJryy{3	 ++r   Windows   )rS   sslbacklogi  )pathr\   r]   )hostportr\   r]   N)*rA   rG   r+   r'   r   r2   AbstractEventLoopProtocolget_running_looprV   
SocketTypeserversplatformsystemworkerscreate_serverr\   r]   appendfdfromfdAF_UNIXSOCK_STREAMr.   udsr<   r^   existsstatst_modecreate_unix_serverchmodr_   r`   OSErrorrE   errorrI   sysexit_log_started_messager*   )r   r.   rR   looprY   rS   
is_windowsserver	listeners	uds_permsexcr'   s   `          @r   rG   zServer.startupX   s#    mm##%%%==$$#D :>	G556		 '') ,'',"", >@DL ,%__.);
>>A%*(.D#11#$FJJ  2    ##F+,  IYY"==FNNF<N<NOD--d

FNN .  F >>--I"8DLZZ#Iww~~fjj)GGFJJ/77	22fjjfjj&.. 3  F HHVZZ+>>--I"8DL#11#

"NN  2    >>--I"8DL?%%i0  } 	&N  S!mm,,...s   OMD O#M$BO>M?B>O=M>AOAM MM AOOOOM 	N?(2N:NN:5O:N??Or~   c                    | j                   }|j                  *|d   }t        j                  d|j	                                y |j
                  !t        j                  d|j
                         y d}|j                  dn|j                  }d|v rd}|j                  }|dk(  r|d   j	                         d   }|j                  rd	nd
}d| d}dt        j                  |d      z   dz   }	t        j                  ||||d|	i       y )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]:%dr[   httpshttpzUvicorn running on z (Press CTRL+C to quit)T)boldr9   r:   )r'   rl   rE   rF   getsocknamerp   r_   r`   r\   rC   rD   )
r   r~   r'   rS   addr_formatr_   r`   protocol_namerK   r9   s
             r   rz   zServer._log_started_message   s   99 Q<DKKE  "
 ZZ#KKJFJJ
 'K & 39Dd{,;;Dqy |//1!4'-zzGvM+K=8OPG%++k56+, 
 KK&6  r   c                    K   d}| j                  |       d {   }|sD|dz  }|dz  }t        j                  d       d {    | j                  |       d {   }|sCy y 7 K7 $7 w)Nr   r[   i / 皙?)on_tickr2   sleep)r   counterr+   s      r   rH   zServer.main_loop   si      LL11qLG&G--$$$ $W 55K	  2 %5s9   A+A%(A+A'A+A)A+#A+'A+)A+r   c                 t  K   |dz  dk(  rt        j                          }t        |d      j                         }| j                  j                  rd|fg}ng }|| j                  j
                  z   | j                  _        | j                  j                  O|| j                  z
  | j                  j                  kD  r)|| _	        | j                  j                          d {    | j                  ry| j                  j                  -| j                  j                  | j                  j                  k\  S y7 Uw)N
   r   T)usegmts   dateF)timer   encoder'   date_headerencoded_headersr)   r   callback_notifyr-   timeout_notifyr+   limit_max_requestsr   )r   r   current_timecurrent_dater   s        r   r   zServer.on_tick   s    R<199;L%l4@GGIL{{&& '67  dkk999 -
 {{**6$"4"44t{{7Q7QQ)5D&++55777 ;;))5$$33t{{7U7UUU 8s   CD8 D6!AD8c                   K   t         j                  d       | j                  D ]  }|j                           |xs g D ]  }|j                           | j                  D ]  }|j	                          d {     t        | j                  j                        D ]  }|j                           t        j                  d       d {    	 t        j                  | j                         | j                  j                         d {    | j,                  s#| j.                  j                          d {    y y 7 7 x7 8# t        j                  $ r t         j!                  dt#        | j                  j$                               | j                  j$                  D ]8  }t&        j(                  dk  r|j+                          '|j+                  d       : Y w xY w7 w)NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceeded)   	   z2Task cancelled, timeout graceful shutdown exceeded)msg)rE   rF   rf   closewait_closedlistr)   r   rI   r2   r   wait_for_wait_tasks_to_completer'   timeout_graceful_shutdownTimeoutErrorrw   lenr   rx   version_infocancelr,   rA   )r   r.   r}   rS   
connectionts         r   rI   zServer.shutdown  s    O$ ll 	FLLN	Mr 	DJJL	ll 	'F$$&&&	' t00<<= 	"J!	"mmC   	W"",,.==    --((*** 3 '
 	! ## 		WLLOD%%++, &&,, W##f,HHJHH!UHV	W		W +sh   A4G%6E 7AG%	E
G%<E EE )G%9G#:G%G%E BG G%G  G%c                   K   | j                   j                  r| j                  syd}t        j	                  |       | j                   j                  rL| j                  s@t        j                  d       d {    | j                   j                  r| j                  s@| j                   j                  r| j                  s}d}t        j	                  |       | j                   j                  rO| j                  sBt        j                  d       d {    | j                   j                  r| j                  s@y y y y y y 7 7 /w)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,   rE   rF   r2   r   r   )r   r   s     r   r   zServer._wait_tasks_to_complete,  s     ((LCKK##//mmC((( ##// ""4??TCKK##))$//mmC((( ##))$//)/) ,;" ) )s1   A4E6D?7&EA3EE&E9EEc                 F   t        j                         t        j                         ury t        j                         }	 t
        D ]   }|j                  || j                  |d        " y # t        $ r. t
        D ]"  }t        j                  || j                         $ Y y w xY wra   )
	threadingcurrent_threadmain_threadr2   get_event_loopHANDLED_SIGNALSadd_signal_handlerhandle_exitNotImplementedErrorsignal)r   r{   sigs      r   rB   zServer.install_signal_handlers;  s    ##%Y-B-B-DD%%'	5& J''T-=-=sDIJ" 	5& 5c4#3#345	5s   )A) )4B B r   framec                 `    | j                   r|t        j                  k(  rd| _        y d| _         y )NT)r+   r   SIGINTr,   )r   r   r   s      r   r   zServer.handle_exitJ  s%    v}} 4"DO#Dr   ra   r   )r    r!   r"   r   r   r   r   rV   r3   r4   rG   r   re   rz   rH   intboolr   rI   r   rB   r   r   r$   r   r   r&   r&   1   s   !v !$ !88D$78 8D 8Q8D,?#@ QD Q2_Xd6==.A%B _d _B'hv7H7H.I 'd 'R6S T 8#+htFMM/B&C #+t #+J)5$s $8I+> $4 $r   r&   ))r2   loggingr<   rg   r   rV   rx   r   r   email.utilsr   typesr   typingr   r   r   r   r	   r
   r   rC   uvicorn.configr   uvicorn.protocols.http.h11_implr   %uvicorn.protocols.http.httptools_implr   ,uvicorn.protocols.websockets.websockets_implr   )uvicorn.protocols.websockets.wsproto_implr   	Protocolsr   SIGTERMr   SIGBREAK	getLoggerrE   r   r&   r$   r   r   <module>r      s      	    
   "  M M M  !;GNDk#4jBSSTI MM
NN <<7))O			?	+	= 	=]$ ]$r   