
    ,hO2                       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 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jD                  ejF                  fZ$e	j                  dk(  re$ejJ                  fz  Z$ ejL                  d      Z' G d d      Z( G d d      Z)y)    )annotationsN)	GeneratorSequence)
formatdate)	FrameType)TYPE_CHECKING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.
    c                \    d| _         t               | _        t               | _        g | _        y )Nr   )total_requestssetconnectionstasksdefault_headers)selfs    P/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/uvicorn/server.py__init__zServerState.__init__-   s%    +.5.1e
:<    NreturnNone)__name__
__module____qualname____doc__r    r   r   r   r   (   s    =r   r   c                      e Zd ZddZdddZdddZdddZdddZddZddZ	dd	Z
ddd
ZddZej                  dd       ZddZy)Serverc                v    || _         t               | _        d| _        d| _        d| _        d| _        g | _        y )NFg        )configr   server_statestartedshould_exit
force_exitlast_notified_captured_signals)r   r'   s     r   r   zServer.__init__5   s9    'M  ,.r   Nc                    | j                   j                          t        j                  | j	                  |            S )Nsockets)r'   setup_event_loopasynciorunserver   r0   s     r   r3   z
Server.run@   s,    $$&{{4::g:677r   c                   K   | j                         5  | j                  |       d {    d d d        y 7 # 1 sw Y   y xY wwN)capture_signals_server5   s     r   r4   zServer.serveD   sA     !!# 	'++g&&&	' 	'&	' 	's$   A868	A8AAc                R  K   t        j                         }| j                  }|j                  s|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extrar/   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   r0   
process_idr'   messager>   s         r   r9   zServer._serveH   s     YY[
}}KKM--f5/2U[[&5QQTWWGZ/OPll7l+++nnmmGm,,,03ekk$66RRUXXGZ/OP 	, 	,s6   B!D'#D!$$D'D#	D'"D%#?D'#D'%D'c                   K    j                   j                          d {     j                   j                  rd _        y  j                  	 d
	 	 	 d fd}t	        j
                         }|	 	 	 	 d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j(                  d}	t*        j,                  j/                  j(                        r)t+        j0                  j(                        j2                  }	|j5                  |j(                  j                  j                         d {   }t+        j6                  j(                  |	       |j&                  J |j&                  }|g _        ni	 |j                  |j8                  j:                  j                  j                  	       d {   }j&                  J |j&                  }|g _        | jI                  |       d _%        y 	 d _%        y 7 7 27 7 7 U# t<        $ rW}
t>        jA                  |
        j                   jC                          d {  7   tE        jF                  d       Y d }
~
d }
~
ww xY ww)NTc                j    j                  j                  j                  j                  |       S )N)r'   r(   	app_state_loop)http_protocol_classr(   rF   state)rS   r'   r   s    r   create_protocolz'Server.startup.<locals>.create_protocolg   s9     --!..----	 .  r   c                d    ddl m} | j                  t        j                               } ||      S )Nr   )	fromshare)socketrX   sharerA   rB   )sockrX   	sock_datas      r   _share_socketz%Server.startup.<locals>._share_socketx   s&    
 - JJryy{3	 ++r   Windows   )r[   sslbacklogi  )pathr`   ra   )hostportr`   ra   r7   )rS   z asyncio.AbstractEventLoop | Noner   zasyncio.Protocol)r[   socket.SocketTyper   re   )&rF   rK   r*   r'   r2   get_running_loopserversplatformsystemworkerscreate_serverr`   ra   appendfdrY   fromfdAF_UNIXSOCK_STREAMr0   udsrA   rb   existsstatst_modecreate_unix_serverchmodrc   rd   OSErrorrI   errorrM   sysexit_log_started_messager)   )r   r0   rV   loopr]   r[   
is_windowsserver	listeners	uds_permsexcr'   s   `          @r   rK   z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--oDfjjbhbpbp-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#L$BN>L?B>N=L>ANAL LL ANNNNL 	M?(2M:MM:5N:M??N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)boldr>   r?   )r'   rm   rI   rJ   getsocknamerq   rc   rd   r`   rG   rH   )
r   r   r'   r[   addr_formatrc   rd   protocol_namerO   r>   s
             r   r{   z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                   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   rL   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+c                  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                  }|3| j                  j                  |k\  rt        j                  d| d       yy7 ]w)	N
   r   T)usegmts   datezMaximum request limit of z exceeded. Terminating process.F)timer   encoder'   date_headerencoded_headersr(   r   callback_notifyr,   timeout_notifyr*   limit_max_requestsr   rI   warning)r   r   current_timecurrent_dater   max_requestss         r   r   zServer.on_tick   s    R<199;L%l4@GGIL{{&& '67 0;dkk>Y>Y0YD- {{**6$"4"44t{{7Q7QQ)5D&++55777 {{55#(9(9(H(HL(XNN6|nDcde 8s   CE  D>!AE c                0  K   t         j                  d       | j                  D ]  }|j                           |xs g D ]  }|j                           t	        | j
                  j                        D ]  }|j                           t        j                  d       d {    	 t        j                  | j                         | j                  j                         d {    | j&                  s#| j(                  j                          d {    y y 7 v7 6# t        j                  $ rc t         j                  dt!        | j
                  j"                               | j
                  j"                  D ]  }|j%                  d        Y w xY w7 w)NzShutting downr   )timeoutz=Cancel %s running task(s), timeout graceful shutdown exceededz2Task cancelled, timeout graceful shutdown exceeded)msg)rI   rJ   rg   closelistr(   r   rM   r2   r   wait_for_wait_tasks_to_completer'   timeout_graceful_shutdownTimeoutErrorrx   lenr   cancelr+   rF   )r   r0   r~   r[   
connectionts         r   rM   zServer.shutdown  sa    O$ ll 	FLLN	Mr 	DJJL	 t00<<= 	"J!	"mmC   	S"",,.==   --((*** # 	! ## 	SLLOD%%++, &&,, SQRS	S +sU   BF D!F&<D "D#D ')FFFD A3FFFF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                  syd}t        j	                  |       | j                   j                  rL| j                  s@t        j                  d       d {    | j                   j                  r| j                  s@| j                  D ]  }|j                          d {     y 7 7 S7 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+   rI   rJ   r2   r   r   rg   wait_closed)r   r   r~   s      r   r   zServer._wait_tasks_to_complete&  s    ((LCKK##//mmC((( ##// ""4??TCKK##))$//mmC((( ##))$// ll 	'F$$&&&	' ) ) 'sC   A4E)6E#7&E)A3E)E%&E)9"E)E'E)%E)'E)c              #     K   t        j                         t        j                         urd  y t        D ci c]#  }|t	        j                  || j
                        % }}	 d  |j                         D ]  \  }}t	        j                  ||        	 t        | j                        D ]  }t	        j                  |        y c c}w # |j                         D ]  \  }}t	        j                  ||        w xY wwr7   )
	threadingcurrent_threadmain_threadHANDLED_SIGNALSsignalhandle_exititemsreversedr-   raise_signal)r   sigoriginal_handlershandlercaptured_signals        r   r8   zServer.capture_signals8  s      ##%Y-B-B-DD Sbb3S&--T5E5E"FFbb	, 1 7 7 9 ,Wc7+,
  ((>(>? 	1O0	1 c !2 7 7 9 ,Wc7+,s)   6C>(C C>#C 'A$C>0C;;C>c                    | j                   j                  |       | j                  r|t        j                  k(  rd| _        y d| _        y )NT)r-   rl   r*   r   SIGINTr+   )r   r   frames      r   r   zServer.handle_exitL  s9    %%c*v}} 4"DO#Dr   )r'   r
   r   r   r7   )r0   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   r3   r4   r9   rK   r{   rL   r   rM   r   
contextlibcontextmanagerr8   r   r#   r   r   r%   r%   4   sX    	/8'Q.[z!F6<+@'$ 1 1&$r   r%   )*
__future__r   r2   r   loggingrA   rh   r   rY   ry   r   r   collections.abcr   r   email.utilsr   typesr   typingr   r	   rG   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	getLoggerrI   r   r%   r#   r   r   <module>r      s    "    	    
   / "  '  !;GNDk#4jBSSTI MM
NN <<7))O			?	+	= 	=]$ ]$r   