
    h                     V   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rSSKJr  SSK	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  \
(       a  SSKr\R6                  rO SSKr\R6                  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)TYPE_CHECKINGAnyOptional)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      @/var/www/html/env/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_process2   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.run;   s    YY**499;7
	?II((4 			$$TYY%A%A%CD		   	?HH=>	?s   %C %C+*C+c           	      2  #    S n[        U R                  [        5      (       a  U R                  nO[        R                  " U R                  5      (       d9  [
        R                  S:  an  [        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R0                  nUc   eU R2                   H1  n[        R4                  " UUUS9nUR7                  5       I S h  vN   M3     [8        R:                  " 5       n	 U R<                  (       a  U R?                  5         UR@                  n
U RB                  (       a3  XRB                  :  a$  SU l        U R                  RE                  SU 5        OxU	[8        R:                  " 5       :X  aG  U RF                  [8        RH                  " 5       :w  a$  SU l        U R                  RE                  S	U 5        OU RK                  5       I S h  vN   U R<                  (       a  M  URO                  5       I S h  vN   g  GN GN GN: N9! [L         a     N0f = f N 7f)
N)      zUwsgi 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   inspectiscoroutinefunctionr3   version_infor#   r	   	AppRunnerappRuntimeErrorformatcfg	accesslogr0   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   runnerrI   rD   r?   ctxrT   socksitepidcnts              r   r-   GunicornWebWorker._runG   s    dii--))C((33w&7+F+Ftyy+Q+Q$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{   B N"M:#DN9M=:BNN N%C$N 	N
N !N4N5N=N NN 
NNNN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   ra   #GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr    rp   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   rp   s     r   rm   %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siginterruptr5   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 ru   )rZ   rL   
worker_intrm   r   r   r   s      r   ry   GunicornWebWorker.handle_quit   s+    
 	D! 	  "r    c                     SU l         SU l        U R                  R                  U 5        [        R
                  " S5        g )NFr
   )rZ   r   rL   worker_abortr3   r4   r   s      r   r   GunicornWebWorker.handle_abort   s-    
d#r    rL   
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.)sslrJ   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rL   re   s     r   rS   %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   rO   'GunicornWebWorker._get_valid_log_format   sE    <<<222YY~}55(  ! r    )r   r   rZ   r   r'   r   N)r   rk   r"   )__name__
__module____qualname____firstlineno__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r)   r6   r-   ra   r   rm   r   intr   ry   r   staticmethodrS   strrO   __static_attributes____classcell__r   s   @r   r   r   &   s    !-!8!8"9"A"ACc C C C
!BH :>	'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#   rE   rX   r   rw   r3   typesr   typingr   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^^
 ;I! I!X/ i  
s   (B 
B('B(