
    bCi                     &   S 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  SSKJ	r	J
r
JrJrJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr   SSKr\R8                  rSr " S S\R@                  5      r! " S S\!5      r"g! \ a    Sr\r N/f = f)z%Async gunicorn worker for aiohttp.web    N)	FrameType)Any	AwaitableCallableOptionalUnion)AccessLogFormat)base)web   )
set_result)Application)AccessLogger)GunicornWebWorkerGunicornUVLoopWebWorkerc                   $  ^  \ rS rSr\R
                  r\R                  r	S\
S\
SS4U 4S jjrSU 4S jjrSS jrSS	 jrSS jr SS\S
   SS4S jjrSS jrS\S\\   SS4S jrS\S\\   SS4S jr\S\
SS4S j5       rS\S\4S jrSrU =r$ )r       argskwreturnNc                 P   > [         TU ]  " U0 UD6  S U l        SU l        S U l        g Nr   )super__init___task	exit_code_notify_waiter)selfr   r   	__class__s      H/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/worker.pyr   GunicornWebWorker.__init__%   s+    $%"%37
>B    c                    > [         R                  " 5       R                  5         [         R                  " 5       U l        [         R
                  " U R                  5        [        TU ]  5         g N)asyncioget_event_loopclosenew_event_looploopset_event_loopr   init_process)r   r   s    r    r+   GunicornWebWorker.init_process,   sE     &&(**,	tyy)r"   c                    U R                   R                  U R                  5       5      U l         U R                   R	                  U R                  5        U R                   R	                  U R                   R                  5       5        U R                   R                  5         [        R                  " U R                  5        g ! [
         a    U R                  R                  S5         Nf = f)NzException in gunicorn worker)r)   create_task_runr   run_until_complete	Exceptionlog	exceptionshutdown_asyncgensr'   sysexitr   r   s    r    runGunicornWebWorker.run5   s    YY**499;7
	?II((4 			$$TYY%A%A%CD		   	?HH=>	?s   %C %C+*C+c           	        #    S n[        U R                  [        5      (       a  U R                  nO[        R                  " U R                  5      (       aI  U R                  5       I S h  vN n[        U[
        R                  5      (       a  UnUR                  nO'UnO$[        SR                  U R                  5      5      eUc  U R                  R                  (       a  U R                  R                  OS n[
        R                  " UU R                  U R                  R                  UU R                  U R                  R                   5      U R                  R"                  S-  S-  S9nUR%                  5       I S h  vN   U R                  R&                  (       a  U R)                  U R                  5      OS nUnUc   eUR*                  nUc   eU R,                   H1  n[
        R.                  " UUUS9nUR1                  5       I S h  vN   M3     [2        R4                  " 5       n	 U R6                  (       a  U R9                  5         UR:                  n
U R<                  (       a3  XR<                  :  a$  SU l        U R                  R?                  SU 5        OxU	[2        R4                  " 5       :X  aG  U R@                  [2        RB                  " 5       :w  a$  SU l        U R                  R?                  SU 5        OU RE                  5       I S h  vN   U R6                  (       a  M  URI                  5       I S h  vN   g  GN GN GN: N9! [F         a     N0f = f N 7f)	NzUwsgi app should be either Application or async function returning Application, got {}d   _   )loggerkeepalive_timeout
access_logaccess_log_formatshutdown_timeout)ssl_contextFzMax requests, shutting down: %sz!Parent changed, shutting down: %s)%
isinstancewsgir   r%   iscoroutinefunctionr   	AppRunnerappRuntimeErrorformatcfg	accesslogr2   r?   	keepalive_get_valid_log_formatr@   graceful_timeoutsetupis_ssl_create_ssl_contextserversocketsSockSitestartosgetpidalivenotifyrequests_countmax_requestsinfoppidgetppid_wait_next_notifyBaseExceptioncleanup)r   runnerrG   rD   r?   ctxrR   socksitepidcnts              r    r/   GunicornWebWorker._runA   s    dii--))C((33$D$..jj??Evdii?P 
 >040B0B,,J]]xx"&(("4"4%"&"<"<HH..# "&!:!:S!@2!E	F lln48HHOOd&&txx0!!!!!!LLD<<D
 **, ! iik	**++$$/@/@)@!&DJHHMM"CTJBIIK'DII,E!&DJHHMM"EtL00222 ***  nnw %0 	 " 3 		 	s{   A'M)M*DM MBMMM,C$M M
M (M;M<MMM
M 
MMMMasyncio.Future[bool]c                     U R                  5         U R                  nUc   eUR                  5       =U l        nU R                  R	                  SU R                   U5        U$ )Ng      ?)_notify_waiter_doner)   create_futurer   
call_later)r   r)   waiters      r    r_   #GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr"   rn   c                 l    Uc  U R                   nUb  [        US5        XR                   L a  S U l         g g )NT)r   r   )r   rn   s     r    rk   %GunicornWebWorker._notify_waiter_done   s=     >((Fvt$((("&D )r"   c                    U R                   R                  [        R                  U R                  [        R                  S 5        U R                   R                  [        R
                  U R                  [        R
                  S 5        U R                   R                  [        R                  U R                  [        R                  S 5        U R                   R                  [        R                  U R                  [        R                  S 5        U R                   R                  [        R                  U R                  [        R                  S 5        U R                   R                  [        R                  U R                  [        R                  S 5        [        R                  " [        R
                  S5        [        R                  " [        R                  S5        g NF)r)   add_signal_handlersignalSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterruptr7   s    r    init_signalsGunicornWebWorker.init_signals   s.    			$$NND,,fnnd	
 			$$NND,,fnnd	
 			$$MM4++V]]D	
 			$$OOT..	
 			$$NND,,fnnd	
 			$$NND--v~~t	
 	FNNE2FNNE2r"   sigframec                 h    SU l         U R                  R                  U 5        U R                  5         g rs   )rX   rJ   
worker_intrk   r   r   r   s      r    rw   GunicornWebWorker.handle_quit   s+    
 	D! 	  "r"   c                     SU l         SU l        U R                  R                  U 5        [        R
                  " S5        g )NFr   )rX   r   rJ   worker_abortr5   r6   r   s      r    r   GunicornWebWorker.handle_abort   s-    
d#r"   rJ   
SSLContextc                    [         c  [        S5      e[         R                  " U R                  5      nUR	                  U R
                  U R                  5        U R                  Ul        U R                  (       a  UR                  U R                  5        U R                  (       a  UR                  U R                  5        U$ )znCreates SSLContext instance for usage in asyncio.create_server.

See ssl.SSLSocket.__init__ for more details.
zSSL is not supported.)sslrH   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rJ   rc   s     r    rQ   %GunicornWebWorker._create_ssl_context   s     ;677nnS__-CLL#++6--<<%%cll3;;OOCKK(
r"   source_formatc                     XR                   :X  a  U R                  $ [        R                  " SU5      (       a  [	        S5      eU$ )Nz%\([^\)]+\)zGunicorn's style options in form of `%(name)s` are not supported for the log formatting. Please use aiohttp's format specification to configure access log formatting: http://docs.aiohttp.org/en/stable/logging.html#format-specification)DEFAULT_GUNICORN_LOG_FORMATDEFAULT_AIOHTTP_LOG_FORMATresearch
ValueError)r   r   s     r    rM   'GunicornWebWorker._get_valid_log_format   sE    <<<222YY~}55(  ! r"   )r   r   rX   r   r)   r   N)r   ri   r$   )__name__
__module____qualname____firstlineno__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r+   r8   r/   r_   r   rk   r   intr   rw   r   staticmethodrQ   strrM   __static_attributes____classcell__r   s   @r    r   r       s    !-!8!8"9"A"ACc C C C
!@D :>	'56	'		'3D#s #8I+> #4 # HY,? D     "!3 !3 ! !r"   r   c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )r      c                    > SS K n[        R                  " 5       R                  5         [        R                  " UR                  5       5        [        TU ]  5         g r   )uvloopr%   r&   r'   set_event_loop_policyEventLoopPolicyr   r+   )r   r   r   s     r    r+   $GunicornUVLoopWebWorker.init_process   sA     	 &&(
 	%%f&<&<&>?r"    r   )r   r   r   r   r+   r   r   r   s   @r    r   r      s     r"   r   )#__doc__r%   rV   r   ru   r5   typesr   typingr   r   r   r   r   gunicorn.configr	   r   gunicorn.workersr
   aiohttpr   helpersr   web_appr   web_logr   r   r   ImportErrorobject__all__Workerr   r   r   r"   r    <module>r      s    +  	 	  
  < < F !     !J ;G! G!T/ e  
CJs   B 
BB