Ë
    Eü´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/root/workspace/ytshorts/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`   ø€ ð	Ü×"Ñ"Ó$×*Ñ*Ô,ô
 ×*Ñ*Ó,ˆŒ	Ü×Ñ˜tŸy™yÔ)ä‰ÑÕøô ò 	áð	ús   ƒ"A, Á,	A8Á7A8c                 ó6  — d| _         | j                  j                  | j                  «       «      | _        	 | j                  j                  | j                  «       | j                  j                  | j                  j                  «       «       | j                  j                  «        t        j                  | j                  «       y # | j                  j                  | j                  j                  «       «       | j                  j                  «        w xY w©NF)Úbootedr&   Úcreate_taskÚ_runr   Úrun_until_completeÚshutdown_asyncgensr#   ÚsysÚexitr   ©r   s    r   ÚrunzGunicornWebWorker.run>   s°   € ð ˆŒà—Y‘Y×*Ñ*¨4¯9©9«;Ó7ˆŒ
ð	Ø�I‰I×(Ñ(¨¯©Ô4à�I‰I×(Ñ(¨¯©×)EÑ)EÓ)GÔHØ�I‰I�O‰OÔä�‰�—‘Õ øð �I‰I×(Ñ(¨¯©×)EÑ)EÓ)GÔHØ�I‰I�O‰OÕús   ·%C	 Ã	ADc           	   ƒ   ó¸  K  — d }t        | j                  t        «      r| j                  }n­t        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 d| _        t9        j:                  «       }		 | j<                  rÜ| j?                  «        |j@                  }
| jB                  r3|
| jB                  kD  r$d| _        | j                  jE                  d	| «       nt|	t9        j:                  «       k(  rE| jF                  t9        jH                  «       k7  r$d| _        | j                  jE                  d
| «       n| jK                  «       ƒ d {  –—†  | j<                  rŒÜ|jO                  «       ƒ d {  –—†  y 7 �Œ®7 �Œ¯7 �Œ*7 Œ3# tL        $ 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_contextTFzMax requests, shutting down: %sz!Parent changed, shutting down: %s)(Ú
isinstanceÚwsgir   ÚinspectÚiscoroutinefunctionr0   Úversion_infor!   r	   Ú	AppRunnerÚappr$   ÚcfgÚ	accesslogÚlogr;   Ú	keepaliveÚ_get_valid_log_formatr<   Úgraceful_timeoutÚsetupÚis_sslÚ_create_ssl_contextÚserverÚsocketsÚSockSiteÚstartr+   ÚosÚgetpidÚaliveÚnotifyÚrequests_countÚmax_requestsÚinfoÚppidÚgetppidÚ_wait_next_notifyÚ	ExceptionÚcleanup)r   ÚrunnerrE   r@   r;   ÚctxrO   ÚsockÚsiteÚpidÚcnts              r   r-   zGunicornWebWorker._runP   s°  è ø€ ØˆÜ�d—i‘i¤Ô-Ø—)‘)‰CÜ×(Ñ(¨¯©Ô3Ü×Ñ˜wÒ&¬7×+FÑ+FÀtÇyÁyÔ+QàŸ™›×$ˆDÜ˜$¤§¡Ô.Ø�Ø—j‘j‘à‘äð=Ø=A¿Y¹Y¸KðIóð ð
 ˆ>Ø04·±×0BÒ0B˜Ÿ™×,Ò,ÈˆJÜ—]‘]ØØ—x‘xØ"&§(¡(×"4Ñ"4Ø%Ø"&×"<Ñ"<Ø—H‘H×.Ñ.ó#ð "&§¡×!:Ñ!:¸SÑ!@À2Ñ!Eô	ˆFð �l‰l‹n×Ðà48·H±H·O²Oˆd×&Ñ& t§x¡xÔ0ÈˆàˆØÐ!Ð!Ð!Ø—‘ˆØÐ!Ð!Ð!Ø—L‘Lò 	ˆDÜ—<‘<ØØØôˆDð
 —*‘*“,×Ñð	ð ˆŒô �i‰i‹kˆð	Ø—*’*Ø—‘”à×+Ñ+�Ø×$Ò$¨¨t×/@Ñ/@Ò)@Ø!&�D”JØ—H‘H—M‘MÐ"CÀTÕJàœBŸI™I›KÒ'¨D¯I©I¼¿¹»Ò,EØ!&�D”JØ—H‘H—M‘MÐ"EÀtÕLà×0Ñ0Ó2×2Ð2ð —*“*ð  �n‰nÓ×ÑðC %ùð0 	ùð ùð. 3ùÜò 	Ùð	úð 	ús{   ‚BMÂL>ÂDMÆMÆBMÈMÈ!MÈ=CM	 ÌMÌM	 Ì%MÌ8MÌ9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   € Ø× Ñ Ô"à�y‰yˆØÐÐÐØ'+×'9Ñ'9Ó';Ð;ˆÔ˜fØ�	‰	×Ñ˜S $×":Ñ":¸FÔCàˆr   rj   c                 óh   — |€| j                   }|�t        |d«       || j                   u rd | _         y y )NT)r   r   )r   rj   s     r   rg   z%GunicornWebWorker._notify_waiter_done¤   s?   € ð ˆ>Ø×(Ñ(ˆFØÐÜ�v˜tÔ$à�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 r*   )r&   Úadd_signal_handlerÚsignalÚSIGQUITÚhandle_quitÚSIGTERMÚhandle_exitÚSIGINTÚSIGWINCHÚhandle_winchÚSIGUSR1Úhandle_usr1ÚSIGABRTÚhandle_abortÚsiginterruptÚSIGCHLDÚSIG_DFLr2   s    r   Úinit_signalszGunicornWebWorker.init_signals¯   sF  € ð 	�	‰	×$Ñ$Ü�N‰N˜D×,Ñ,¬f¯n©n¸dô	
ð 	�	‰	×$Ñ$Ü�N‰N˜D×,Ñ,¬f¯n©n¸dô	
ð 	�	‰	×$Ñ$Ü�M‰M˜4×+Ñ+¬V¯]©]¸Dô	
ð 	�	‰	×$Ñ$Ü�O‰O˜T×.Ñ.´·±Àô	
ð 	�	‰	×$Ñ$Ü�N‰N˜D×,Ñ,¬f¯n©n¸dô	
ð 	�	‰	×$Ñ$Ü�N‰N˜D×-Ñ-¬v¯~©~¸tô	
ô 	×ÑœFŸN™N¨EÔ2Ü×ÑœFŸN™N¨EÔ2ô 	�‰”f—n‘n¤f§n¡nÕ5r   ÚsigÚframec                 óh   — d| _         | j                  j                  | «       | j                  «        y r*   )rU   rF   Ú
worker_intrg   ©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   rF   Úworker_abortr0   r1   r‚   s      r   ry   zGunicornWebWorker.handle_abortÞ   s-   € ØˆŒ
ØˆŒØ�‰×Ñ˜dÔ#Ü�‰��r   rF   Ú
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)rF   r`   s     r   rN   z%GunicornWebWorker._create_ssl_contextä   s   € ô ˆ;ÜÐ6Ó7Ð7ä�n‰n˜SŸ_™_Ó-ˆØ×Ñ˜CŸL™L¨#¯+©+Ô6ØŸ-™-ˆŒØ�<Š<Ø×%Ñ% c§l¡lÔ3Ø�;Š;Ø�O‰O˜CŸK™KÔ(Øˆ
r   Úsource_formatc                 ó~   — || j                   k(  r| j                  S t        j                  d|«      rt	        d«      ‚|S )Nz%\([^\)]+\)zêGunicorn'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Ü�Y‰Y�~ }Ô5Üð(óð ð !Ð r   ©r   N)r   re   r    )Ú__name__Ú
__module__Ú__qualname__r   Ú
LOG_FORMATr•   ÚGunicornAccessLogFormatÚdefaultr”   r   r   r(   r3   r-   r\   r   rg   r}   Úintr   rp   ry   ÚstaticmethodrN   ÚstrrJ   Ú__classcell__©r   s   @r   r   r   &   sè   ø„ Ø!-×!8Ñ!8ÐØ"9×"AÑ"AÐð@˜cð @¨ð @°õ @õó!ó$HóTð :>ñ	'ØÐ5Ñ6ð	'à	ó	'ó$6ðL#˜sð #¨9°tÑ+;ð #Àó #ð ð ¨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!   rA   rS   r–   rn   r0   Ú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ðÛà—^‘^ˆ
ð ;€ô\!˜Ÿ™ô \!ô~Ð/õ øðO ò ØˆØŠ
ðús   Á#B Â	B"Â!B"