
    g]2                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJrJr  S SKJr  S SKJr  S SKJrJr  S SKrS SKJr  \(       a!  S SKJr  S S	KJr  S S
KJr  S SKJ r   \\\\ \4   r!\RD                  \RF                  4r$\	R                  S:X  a  \$\RJ                  4-  r$\RL                  " S5      r' " S S5      r( " S S5      r)g)    )annotationsN)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKINGUnion)Config)H11Protocol)HttpToolsProtocol)WebSocketProtocol)
WSProtocolwin32zuvicorn.errorc                  "    \ rS rSrSrSS jrSrg)ServerState(   zH
Shared servers state that is available between all protocol instances.
c                \    SU l         [        5       U l        [        5       U l        / U l        g )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    G/home/matz/Project1/venv/lib/python3.13/site-packages/uvicorn/server.py__init__ServerState.__init__-   s%    +.5.1e
:<    )r   r   r   r   NreturnNone)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r   (   s    =r   r   c                      \ rS rSrSS jrSSS jjrSSS jjrSSS jjrSSS jjrSS jr	SS	 jr
SS
 jrSSS jjrSS jr\R                  SS j5       rSS jrSrg)Server4   c                t    Xl         [        5       U l        SU l        SU l        SU l        SU l        / U l        g )NFg        )configr   server_statestartedshould_exit
force_exitlast_notified_captured_signals)r   r,   s     r   r   Server.__init__5   s7    'M  ,.r   Nc                |    U R                   R                  5         [        R                  " U R	                  US95      $ )Nsockets)r,   setup_event_loopasynciorunserver   r6   s     r   r9   
Server.run@   s,    $$&{{4::g:677r   c                   #    U R                  5          U R                  U5      I S h  vN   S S S 5        g  N! , (       d  f       g = f7fN)capture_signals_server;   s     r   r:   Server.serveD   s6     !!#++g&&& $#& $#s%   A	868	A	8
AA	c                D  #    [         R                  " 5       nU R                  nUR                  (       d  UR	                  5         UR                  U5      U l        SnS[        R                  " SSS9-   S-   n[        R                  XBSU0S9  U R                  US	9I S h  vN   U R                  (       a  g U R                  5       I S h  vN   U R                  US	9I S h  vN   S
nS[        R                  " SSS9-   S-   n[        R                  XBSU0S9  g  Ny NQ N<7f)NzStarted server process [%d]zStarted server process [z%dcyan)fg]color_messageextrar5   zFinished server process [%d]zFinished server process [)osgetpidr,   loadedloadlifespan_classlifespanclickstyleloggerinfostartupr/   	main_loopshutdown)r   r6   
process_idr,   messagerF   s         r   r@   Server._serveH   s     YY[
}}KKM--f5/2U[[&5QQTWWG/OPll7l+++nnmmGm,,,03ekk$66RRUXXG/OP 	, 	,s6   BD  D!)D 
DD !D"9D D D c                &  ^ ^#    T R                   R                  5       I S h  vN   T R                   R                  (       a  ST l        g T R                  m S
   SUU 4S jjjn[        R
                  " 5       nUb      SS jn/ T l        U H  n[        R                  " 5       S:H  nTR                  S:  a  U(       a  U" U5      nUR                  X%TR                  TR                  S9I S h  vN nT R                  R                  U5        M     UnGOTR                  b  [        R                   " TR                  [        R"                  [        R$                  5      nUR                  X%TR                  TR                  S9I S h  vN nUR&                  c   eUR&                  nU/T l        GOKTR(                  b  Sn	[*        R,                  R/                  TR(                  5      (       a*  [*        R0                  " TR(                  5      R2                  n	UR5                  UTR(                  TR                  TR                  S9I S h  vN n[*        R6                  " TR(                  U	5        UR&                  c   eUR&                  nU/T l        Og UR                  UTR8                  TR:                  TR                  TR                  S	9I S h  vN nWR&                  c   eUR&                  nU/T l        Uc  T RI                  U5        O ST l%        g  GN GN1 GN N NP! [<         aX  n
[>        RA                  U
5        T R                   RC                  5       I S h  vN    [D        RF                  " S5         S n
A
NS n
A
ff = f7f)NTc                d   > TR                  TTR                  TR                  R                  U S9$ )N)r,   r-   	app_state_loop)http_protocol_classr-   rN   state)r\   r,   r   s    r   create_protocol'Server.startup.<locals>.create_protocolg   s9     --!..----	 .  r   c                f    SSK Jn  U R                  [        R                  " 5       5      nU" U5      $ )Nr   )	fromshare)socketrb   sharerI   rJ   )sockrb   	sock_datas      r   _share_socket%Server.startup.<locals>._share_socketx   s&    
 - JJryy{3	 ++r   Windows   )re   sslbacklogi  )pathrk   rl   )hostportrk   rl   r>   )r\   z asyncio.AbstractEventLoop | Noner   zasyncio.Protocol)re   socket.SocketTyper   rp   )&rN   rS   r/   r,   r8   get_running_loopserversplatformsystemworkerscreate_serverrk   rl   appendfdrc   fromfdAF_UNIXSOCK_STREAMr6   udsrI   rm   existsstatst_modecreate_unix_serverchmodrn   ro   OSErrorrQ   errorrU   sysexit_log_started_messager.   )r   r6   r_   looprg   re   
is_windowsserver	listeners	uds_permsexcr,   s   `          @r   rS   Server.startup_   s    mm##%%%==$$#D 7;	3		 	 '') ,',", >@DL%__.);
>>A%*(.D#11/RXR\R\flftft1uu##F+    IYY"==FNNF<N<NOD--ofjjbhbpbp-qqF>>---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 u 	&N v r  S!mm,,...s   NLCN1L"2BNL%CNL(A	N>L, L*L, AN"N%N(N*L, ,
N62N	(M+)N	N	NNc                   U R                   nUR                  b*  US   n[        R                  SUR	                  5       5        g UR
                  b!  [        R                  SUR
                  5        g SnUR                  c  SOUR                  nSU;   a  SnUR                  nUS:X  a  US   R	                  5       S   nUR                  (       a  S	OS
nSU S3nS[        R                  " USS9-   S-   n	[        R                  UUUUSU	0S9  g )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)boldrF   rG   )r,   rx   rQ   rR   getsocknamer|   rn   ro   rk   rO   rP   )
r   r   r,   re   addr_formatrn   ro   protocol_namerW   rF   s
             r   r   Server._log_started_message   s   99 Q<DKKE  "
 ZZ#KKRTZT^T^_ 'K & 39Dd{,;;Dqy |//1!4'-zzGvM+K=8OPG1EKKRV4WWZssMKK&6  r   c                   #    SnU R                  U5      I S h  vN nU(       dK  US-  nUS-  n[        R                  " S5      I S h  vN   U R                  U5      I S h  vN nU(       d  MJ  g g  NW N* N7f)Nr   rj   i / 皙?)on_tickr8   sleep)r   counterr/   s      r   rT   Server.main_loop   sh      LL11qLG&G--$$$ $W 55K	 + 2 %5s9   A7A1.A7A3	A7!A5"A7/A73A75A7c                  #    US-  S:X  a  [         R                   " 5       n[        USS9R                  5       nU R                  R                  (       a  SU4/nO/ nX@R                  R
                  -   U R                  l        U R                  R                  bN  X R                  -
  U R                  R                  :  a(  X l	        U R                  R                  5       I S h  vN   U R                  (       a  gU R                  R                  nUb4  U R                  R                  U:  a  [        R                  SU S35        gg Nd7f)	N
   r   T)usegmts   datezMaximum request limit of z exceeded. Terminating process.F)timer   encoder,   date_headerencoded_headersr-   r   callback_notifyr1   timeout_notifyr/   limit_max_requestsr   rQ   warning)r   r   current_timecurrent_dater   max_requestss         r   r   Server.on_tick   s    R<199;L%l4@GGIL{{&& '67 0;kk>Y>Y0YD- {{**6"4"44t{{7Q7QQ)5&++55777 {{55#(9(9(H(HL(XNN6|nDcde 8s   C!E
#E$A%E
c                N  #    [         R                  S5        U R                   H  nUR                  5         M     U=(       d    /  H  nUR                  5         M     [	        U R
                  R                  5       H  nUR                  5         M     [        R                  " S5      I S h  vN    [        R                  " U R                  5       U R                  R                  S9I S h  vN   U R&                  (       d#  U R(                  R                  5       I S h  vN   g g  Ny N;! [        R                   ab    [         R                  S[!        U R
                  R"                  5      5        U R
                  R"                   H  nUR%                  SS9  M      Nf = f N7f)NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)rQ   rR   rr   closelistr-   r   rU   r8   r   wait_for_wait_tasks_to_completer,   timeout_graceful_shutdownTimeoutErrorr   lenr   cancelr0   rN   )r   r6   r   re   
connectionts         r   rU   Server.shutdown  sK    O$ llFLLN #MrMDJJL " t00<<=J! >mmC   	S"",,.==   --((*** # 	! ## 	SLLOD%%++, &&,,QR -	S +sU   B*F%,D&-F%2:D* ,D(-D* 1.F%F# F%(D* *A3F F%F  F%c                \  #    U R                   R                  (       a  U R                  (       d  Sn[        R	                  U5        U R                   R                  (       a]  U R                  (       dL  [
        R                  " S5      I S h  vN   U R                   R                  (       a  U R                  (       d  ML  U R                   R                  (       a  U R                  (       d  Sn[        R	                  U5        U R                   R                  (       a]  U R                  (       dL  [
        R                  " S5      I S h  vN   U R                   R                  (       a  U R                  (       d  ML  U R                   H  nUR                  5       I S h  vN   M     g  GN Na N7f)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   r0   rQ   rR   r8   r   r   rr   wait_closed)r   r   r   s      r   r   Server._wait_tasks_to_complete&  s    ((LCKK##//mmC((( ##// ""4??TCKK##))$//mmC((( ##))$/// llF$$&&& # ) ) 'sC   B	F,F%0F,>BF,F(0F,9"F,F*
F,(F,*F,c              #    #    [         R                  " 5       [         R                  " 5       La  S v   g [         Vs0 s H#  o[        R                  " XR
                  5      _M%     nn S v   UR                  5        H  u  p[        R                  " X5        M     [        U R                  5       H  n[        R                  " U5        M     g s  snf ! UR                  5        H  u  p[        R                  " X5        M     f = f7fr>   )
	threadingcurrent_threadmain_threadHANDLED_SIGNALSsignalhandle_exititemsreversedr2   raise_signal)r   sigoriginal_handlershandlercaptured_signals        r   r?   Server.capture_signals8  s      ##%Y-B-B-DD SbbRa3&--5E5E"FFRab	, 1 7 7 9c+ !:
  ((>(>?O0  @ c !2 7 7 9c+ !:s)   9D*C%D(C ,A'D1DDc                    U R                   R                  U5        U R                  (       a  U[        R                  :X  a  SU l        g SU l        g )NT)r2   rw   r/   r   SIGINTr0   )r   r   frames      r   r   Server.handle_exitL  s9    %%c*v}} 4"DO#Dr   )	r2   r,   r0   r1   rN   r-   rr   r/   r.   )r,   r
   r   r    r>   )r6   zlist[socket.socket] | Noner   r    )r   zSequence[socket.SocketType]r   r    r   )r   intr   bool)r   zGenerator[None, None, None])r   r   r   zFrameType | Noner   r    )r!   r"   r#   r$   r   r9   r:   r@   rS   r   rT   r   rU   r   
contextlibcontextmanagerr?   r   r&   r'   r   r   r)   r)   4   sX    	/8'Q.[z!F6<+@'$ 1 1&$r   r)   )*
__future__r   r8   r   loggingrI   rs   r   rc   r   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r	   rO   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	getLoggerrQ   r   r)   r'   r   r   <module>r      s    "    	    
   / "  '  !;GNDk#4jBSSTI MM
NN <<7))O			?	+	= 	=]$ ]$r   