Ë
    W¸‘iØ  ã                   ó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e   ddfd„Zdedee   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      €úE/var/www/telegram/venv/lib/python3.12/site-packages/aiohttp/worker.pyr   zGunicornWebWorker.__init__+   s+   ø€ Ü‰Ñ˜$Ð% "Ò%à37ˆŒ
ØˆŒØ>BˆÕó    c                 óÖ   •— t        j                  «       j                  «        t        j                  «       | _        t        j
                  | j                  «       t        ‰| �  «        y ©N)ÚasyncioÚget_event_loopÚcloseÚnew_event_loopÚloopÚset_event_loopr   Úinit_process)r   r   s    €r   r'   zGunicornWebWorker.init_process2   sE   ø€ ä×ÑÓ ×&Ñ&Ô(ä×*Ñ*Ó,ˆŒ	Ü×Ñ˜tŸy™yÔ)ä‰ÑÕr   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œ   € Ø—Y‘Y×*Ñ*¨4¯9©9«;Ó7ˆŒ
ð	?Ø�I‰I×(Ñ(¨¯©Ô4ð 	�	‰	×$Ñ$ T§Y¡Y×%AÑ%AÓ%CÔDØ�	‰	�‰Ôä�‰�—‘Õ øô ò 	?Ø�H‰H×ÑÐ=Ö>ð	?ús   °%C Ã$C)Ã(C)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                  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 ‚|j0                  }|€J ‚| j2                  D ]2  }t        j4                  |||¬«      }|j7                  «       ƒ d {  –—†  Œ4 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)é   é   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Úiscoroutinefunctionr0   Úversion_infor!   r	   Ú	AppRunnerÚappÚRuntimeErrorÚformatÚ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_notifyÚBaseExceptionÚcleanup)r   ÚrunnerrE   r@   r;   ÚctxrP   ÚsockÚsiteÚpidÚcnts              r   r*   zGunicornWebWorker._runG   s¦  è ø€ ØˆÜ�d—i‘i¤Ô-Ø—)‘)‰CÜ×(Ñ(¨¯©Ô3Ü×Ñ˜wÒ&¬7×+FÑ+FÀtÇyÁyÔ+QàŸ™›×$ˆDÜ˜$¤§¡Ô.Ø�Ø—j‘j‘à‘äð?ß?E¹vÀdÇiÁiÓ?Póð ð
 ˆ>Ø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Ó×Ñðw %ùð0 	ùð ùð" 3ùÜò 	Ùð	úð 	ús{   ‚B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                 óÂ   — | 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   rk   c                 óh   — |€| j                   }|�t        |d«       || j                   u rd | _         y y )NT)r   r   )r   rk   s     r   rh   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«       y ©NF)r%   Úadd_signal_handlerÚsignalÚSIGQUITÚhandle_quitÚSIGTERMÚhandle_exitÚSIGINTÚSIGWINCHÚhandle_winchÚSIGUSR1Úhandle_usr1ÚSIGABRTÚhandle_abortÚsiginterruptr2   s    r   Úinit_signalszGunicornWebWorker.init_signals    s.  € ð 	�	‰	×$Ñ$Ü�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Õ2r   ÚsigÚframec                 óh   — d| _         | j                  j                  | «       | j                  «        y rn   )rV   rH   Ú
worker_intrh   ©r   r~   r   s      r   rr   zGunicornWebWorker.handle_quitÂ   s+   € ØˆŒ
ð 	�‰×Ñ˜DÔ!ð 	× Ñ Õ"r   c                 ó€   — d| _         d| _        | j                  j                  | «       t	        j
                  d«       y )NFr
   )rV   r   rH   Úworker_abortr0   r1   r‚   s      r   r{   zGunicornWebWorker.handle_abortË   s-   € ØˆŒ
ØˆŒØ�‰×Ñ˜dÔ#Ü�‰��r   rH   Ú
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.)ÚsslrF   r…   Ússl_versionÚload_cert_chainÚcertfileÚkeyfileÚ	cert_reqsÚverify_modeÚca_certsÚload_verify_locationsÚciphersÚset_ciphers)rH   ra   s     r   rO   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   rK   z'GunicornWebWorker._get_valid_log_formatã   sD   € Ø˜D×<Ñ<Ò<Ø×2Ñ2Ð2Ü�Y‰Y�~ }Ô5Üð(óð ð !Ð r   ©r   N)r   rf   r    )Ú__name__Ú
__module__Ú__qualname__r   Ú
LOG_FORMATr•   ÚGunicornAccessLogFormatÚdefaultr”   r   r   r'   r3   r*   r]   r   rh   r}   Úintr   rr   r{   ÚstaticmethodrO   ÚstrrK   Ú__classcell__©r   s   @r   r   r   &   sè   ø„ à!-×!8Ñ!8ÐØ"9×"AÑ"AÐðC˜cð C¨ð C°õ Cõó
!óBóHð :>ñ	'ØÐ5Ñ6ð	'à	ó	'ó3ðD#˜sð #¨8°IÑ+>ð #À4ó #ð ð ¨H°YÑ,?ð ÀDó ð ð ð ¨ò ó ðð"!°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 r   )Úuvloopr!   r"   r#   Úset_event_loop_policyÚEventLoopPolicyr   r'   )r   r§   r   s     €r   r'   z$GunicornUVLoopWebWorker.init_processó   sA   ø€ Ûô 	×ÑÓ ×&Ñ&Ô(ô
 	×%Ñ% f×&<Ñ&<Ó&>Ô?ä‰ÑÕr   r™   )rš   r›   rœ   r'   r£   r¤   s   @r   r   r   ò   s   ø„ ÷ñ r   r   )"Ú__doc__r!   rA   rT   r–   rp   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ðÛà—^‘^ˆ
ð ;€ôI!˜Ÿ™ô I!ôXÐ/õ øði ò ØˆØŠ
ðús   Á#B Â	B"Â!B"