Ë
    [üàgh  ã                   óB  — 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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j4                  Zn	 ddlZej4                  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      €úL/var/www/skyplay_api_hub/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_process1   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                  «      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 ‚|j*                  }|€J ‚| j,                  D ]2  }t        j.                  |||¬«      }|j1                  «       ƒ d {  –—†  Œ4 t3        j4                  «       }		 | j6                  rÜ| j9                  «        |j:                  }
| j<                  r3|
| j<                  kD  r$d| _        | j                  j?                  d| «       nt|	t3        j4                  «       k(  rE| j@                  t3        jB                  «       k7  r$d| _        | j                  j?                  d| «       n| jE                  «       ƒ d {  –—†  | j6                  rŒÜ|jI                  «       ƒ d {  –—†  y 7 �Œ³7 �Œ¨7 �Œ#7 Œ3# tF        $ r Y Œ/w xY w7 Œ­w)	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Ú	accesslogr-   r9   Ú	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   ÚrunnerrA   r>   r9   ÚctxrL   ÚsockÚsiteÚpidÚcnts              r   r*   zGunicornWebWorker._runF   s‡  è ø€ ØˆÜ�d—i‘i¤Ô-Ø—)‘)‰CÜ×(Ñ(¨¯©Ô3ØŸ™›×$ˆ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{   ‚AL-ÁLÁDL-Å,LÅ-BL-Ç4LÇ5L-ÈCL Ë&LË'L Ë8L-ÌL+ÌL-ÌL-ÌL-ÌL Ì	L(Ì%L-Ì'L(Ì(L-ú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   rY   z#GunicornWebWorker._wait_next_notifyˆ   sZ   € Ø× Ñ Ô"à�y‰yˆØÐÐÐØ'+×'9Ñ'9Ó';Ð;ˆÔ˜fØ�	‰	×Ñ˜S $×":Ñ":¸FÔCàˆr   rg   c                 óh   — |€| j                   }|�t        |d«       || j                   u rd | _         y y )NT)r   r   )r   rg   s     r   rd   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 rj   )rR   rD   Ú
worker_intrd   ©r   rz   r{   s      r   rn   zGunicornWebWorker.handle_quit¿   s+   € ØˆŒ
ð 	�‰×Ñ˜DÔ!ð 	× Ñ Õ"r   c                 ó€   — d| _         d| _        | j                  j                  | «       t	        j
                  d«       y )NFr
   )rR   r   rD   Úworker_abortr0   r1   r~   s      r   rw   zGunicornWebWorker.handle_abortÈ   s-   € ØˆŒ
ØˆŒØ�‰×Ñ˜dÔ#Ü�‰��r   rD   Ú
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.)ÚsslrB   r�   Ússl_versionÚload_cert_chainÚcertfileÚkeyfileÚ	cert_reqsÚverify_modeÚca_certsÚload_verify_locationsÚciphersÚset_ciphers)rD   r]   s     r   rK   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   rG   z'GunicornWebWorker._get_valid_log_formatà   sD   € Ø˜D×<Ñ<Ò<Ø×2Ñ2Ð2Ü�Y‰Y�~ }Ô5Üð(óð ð !Ð r   ©r   N)r   rb   r    )Ú__name__Ú
__module__Ú__qualname__r   Ú
LOG_FORMATr‘   ÚGunicornAccessLogFormatÚdefaultr�   r   r   r'   r3   r*   rY   r   rd   ry   Úintr   rn   rw   ÚstaticmethodrK   ÚstrrG   Ú__classcell__©r   s   @r   r   r   %   sè   ø„ à!-×!8Ñ!8ÐØ"9×"AÑ"AÐðC˜cð C¨ð C°õ Cõó
!ó@óDð :>ñ	'ØÐ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!   rP   r’   rl   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ðÛà—^‘^ˆ
ð ;€ôG!˜Ÿ™ô G!ôTÐ/õ øðe ò ØˆØŠ
ðús   ÁB Â	BÂB