
    F/j:!                     J   d 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
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ e
rddlZej6                  Zn	 ddlZej6                  ZdZ G d dej>                        Z  G d de       Z!y# e$ r dZeZY .w xY w)z%Async gunicorn worker for aiohttp.web    N)	FrameType)TYPE_CHECKINGAnyOptional)AccessLogFormat)base)web   )
set_result)Application)AccessLogger)GunicornWebWorkerGunicornUVLoopWebWorkerc                        e Zd Zej                  Zej                  Zde	de	ddf fdZ
d fdZddZddZdd
Z	 dded	   ddfdZddZdededz  ddfdZdededz  ddfdZede	ddfd       ZdedefdZ xZS )r   argskwreturnNc                 N    t        |   |i | d | _        d| _        d | _        y Nr   )super__init___task	exit_code_notify_waiter)selfr   r   	__class__s      L/var/www/html/maxservice/venv/lib/python3.12/site-packages/aiohttp/worker.pyr   zGunicornWebWorker.__init__*   s+    $%"%04
;?    c                     	 t        j                         j                          t        j                         | _        t        j                  | j
                         t        | !          y # t        $ r Y Rw xY wN)	asyncioget_event_loopcloseRuntimeErrornew_event_looploopset_event_loopr   init_process)r   r   s    r   r(   zGunicornWebWorker.init_process1   s`    	""$**,
 **,	tyy)  		s   "A, ,	A87A8c                    | j                   j                  | j                               | _        	 | j                   j	                  | j                         | j                   j	                  | j                   j                                | j                   j                          t        j                  | j                         y # t
        $ r | j                  j                  d       Y w xY w)NzException in gunicorn worker)r&   create_task_runr   run_until_complete	Exceptionlog	exceptionshutdown_asyncgensr#   sysexitr   r   s    r   runzGunicornWebWorker.run>   s    YY**499;7
	?II((4 			$$TYY%A%A%CD		   	?HH=>	?s   %C $C)(C)c           	        K   d }t        | j                  t              r| j                  }nt        j                  | j                        s2t
        j                  dk  rct        j                  | j                        rD| j                          d {   }t        |t        j                        r|}|j                  }n|}nt        d| j                         || j                  j                  r| j                  j                  nd }t        j                  || j                  | j                  j                   || j#                  | j                  j$                        | j                  j&                  dz  dz        }|j)                          d {    | j                  j*                  r| j-                  | j                        nd }|}|J |j.                  }|J | j0                  D ]2  }t        j2                  |||      }|j5                          d {    4 t7        j8                         }		 | j:                  r| j=                          |j>                  }
| j@                  r3|
| j@                  kD  r$d| _        | j                  jC                  d|        nt|	t7        j8                         k(  rE| jD                  t7        jF                         k7  r$d| _        | j                  jC                  d	|        n| jI                          d {    | j:                  r|jM                          d {    y 7 7 7 #7 3# tJ        $ r Y /w xY w7 w)
N)      zSwsgi 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iscoroutinefunctionr1   version_infor!   r	   	AppRunnerappr$   cfg	accesslogr.   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_notifyr-   cleanup)r   runnerrF   rA   r<   ctxrO   socksitepidcnts              r   r+   zGunicornWebWorker._runJ   s    dii-))C((3w&7+F+Ftyy+Q$D$.jj==AYYKI 
 >040B0B,,J]]xx"&(("4"4%"&"<"<HH..# "&!:!:S!@2!E	F lln48HHOOd&&txx0!!!!!!LL 	D<<D
 **,	 iik	**++$$t/@/@)@!&DJHHMM"CTJBIIK'DII,E!&DJHHMM"EtL00222 **  nnw %0 	 " 3 		 	s{   BML7DML:BML=M6CM M M M1M2M:M=M M 	MMMMasyncio.Future[bool]c                     | j                          | j                  }|J |j                         x| _        }| j                  j	                  d| j                   |       |S )Ng      ?)_notify_waiter_doner&   create_futurer   
call_later)r   r&   waiters      r   r\   z#GunicornWebWorker._wait_next_notify   sZ      "yy'+'9'9';;f		S$":":FCr   ri   c                 h    || j                   }|t        |d       || j                   u rd | _         y y )NT)r   r   )r   ri   s     r   rf   z%GunicornWebWorker._notify_waiter_done   s?     >((Fvt$T((("&D )r   c                 (   | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j
                  | j                  t        j
                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        | j                   j                  t        j                  | j                  t        j                  d        t        j                  t        j
                  d       t        j                  t        j                  d       t        j                  t        j                  t        j                          y NF)r&   add_signal_handlersignalSIGQUIThandle_quitSIGTERMhandle_exitSIGINTSIGWINCHhandle_winchSIGUSR1handle_usr1SIGABRThandle_abortsiginterruptSIGCHLDSIG_DFLr3   s    r   init_signalszGunicornWebWorker.init_signals   sF    			$$NND,,fnnd	
 			$$NND,,fnnd	
 			$$MM4++V]]D	
 			$$OOT..	
 			$$NND,,fnnd	
 			$$NND--v~~t	
 	FNNE2FNNE2 	fnnfnn5r   sigframec                 h    d| _         | j                  j                  |        | j                          y rl   )rU   rG   
worker_intrf   r   r~   r   s      r   rp   zGunicornWebWorker.handle_quit   s+    
 	D! 	  "r   c                     d| _         d| _        | j                  j                  |        t	        j
                  d       y )NFr
   )rU   r   rG   worker_abortr1   r2   r   s      r   ry   zGunicornWebWorker.handle_abort   s-    
d#r   rG   
SSLContextc                 p   t         t        d      t        j                  | j                        }|j	                  | j
                  | j                         | j                  |_        | j                  r|j                  | j                         | j                  r|j                  | j                         |S )z~Creates SSLContext instance for usage in asyncio.create_server.

        See ssl.SSLSocket.__init__ for more details.
        zSSL is not supported.)sslr$   r   ssl_versionload_cert_chaincertfilekeyfile	cert_reqsverify_modeca_certsload_verify_locationsciphersset_ciphers)rG   r_   s     r   rN   z%GunicornWebWorker._create_ssl_context   s     ;677nnS__-CLL#++6--<<%%cll3;;OOCKK(
r   source_formatc                 ~    || j                   k(  r| j                  S t        j                  d|      rt	        d      |S )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   rJ   z'GunicornWebWorker._get_valid_log_format   sD    D<<<222YY~}5(  ! r   r   N)r   rd   r    )__name__
__module____qualname__r   
LOG_FORMATr   GunicornAccessLogFormatdefaultr   r   r   r(   r4   r+   r\   r   rf   r}   intr   rp   ry   staticmethodrN   strrJ   __classcell__r   s   @r   r   r   &   s    !-!8!8"9"A"A@c @ @ @
!BH :>	'56	'		'$6L#s #9t+; # # I,<      "!3 !3 !r   r   c                         e Zd Zd fdZ xZS )r   c                     dd l }	 t        j                         j                          t        j
                  |j                                t        | !          y # t        $ r Y =w xY wr   )	uvloopr!   r"   r#   r$   set_event_loop_policyEventLoopPolicyr   r(   )r   r   r   s     r   r(   z$GunicornUVLoopWebWorker.init_process   sX    	""$**, 	%%f&<&<&>?  		s   "A 	A'&A'r   )r   r   r   r(   r   r   s   @r   r   r      s     r   r   )"__doc__r!   rB   rS   r   rn   r1   typesr   typingr   r   r   gunicorn.configr   r   gunicorn.workersr   aiohttpr	   helpersr   web_appr   web_logr   r   r   ImportErrorobject__all__Workerr   r    r   r   <module>r      s    +   	 	  
  / / F !     !J^^
 ;P! P!f/ w  
s   #B 	B"!B"