Ë
    ×Õ°jƒ  ã                   ó$   — d Z ddlZ G d„ d«      Zy)z¦
ASGI lifespan protocol manager.

Manages startup and shutdown events for ASGI applications,
enabling frameworks like FastAPI to run initialization and
cleanup code.
é    Nc                   ó6   — e Zd ZdZd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚLifespanManageraI  Manages ASGI lifespan events (startup/shutdown).

    The lifespan protocol allows ASGI applications to run code at
    startup and shutdown. This is essential for applications that
    need to initialize database connections, caches, or other
    resources.

    ASGI lifespan messages:
    - Server sends: {"type": "lifespan.startup"}
    - App responds: {"type": "lifespan.startup.complete"} or
                    {"type": "lifespan.startup.failed", "message": "..."}
    - Server sends: {"type": "lifespan.shutdown"}
    - App responds: {"type": "lifespan.shutdown.complete"}
    Nc                 ó  — || _         || _        |�|ni | _        t        j                  «       | _        t        j                  «       | _        d| _        d| _        d| _	        t        j                  «       | _        d| _        d| _        y)zÀInitialize the lifespan manager.

        Args:
            app: ASGI application callable
            logger: Logger instance
            state: Shared state dict for the application
        NF)ÚappÚloggerÚstateÚasyncioÚEventÚ_startup_completeÚ_shutdown_completeÚ_startup_failedÚ_startup_errorÚ_shutdown_errorÚQueueÚ_receive_queueÚ_taskÚ_app_finished)Úselfr   r   r   s       úL/var/www/mission/venv/lib/python3.12/site-packages/gunicorn/asgi/lifespan.pyÚ__init__zLifespanManager.__init__    sq   € ð ˆŒØˆŒØ#Ð/‘U°RˆŒ
ä!(§¡£ˆÔÜ")§-¡-£/ˆÔØ$ˆÔØ"ˆÔØ#ˆÔÜ%Ÿm™m›oˆÔØˆŒ
Ø"ˆÕó    c              ƒ   ó¬  K  — ddddœ| j                   dœ}| j                  j                  ddi«      ƒ d{  –—†  t        j                  | j                  |«      «      | _        	 t        j                  | j                  j                  «       d	¬
«      ƒ d{  –—†  | j                  rD| j                  r| j                  j                  «        | j                  xs d}t        d|› �«      ‚| j                  j!                  d«       y7 ŒÑ7 Œr# t        j                  $ r2 | j                  r| j                  j                  «        t        d«      ‚w xY w­w)z’Run lifespan startup and wait for completion.

        Raises:
            RuntimeError: If startup fails or app doesn't support lifespan
        Úlifespanz3.0z2.4)ÚversionÚspec_version)ÚtypeÚasgir   r   zlifespan.startupNç      >@©ÚtimeoutzLifespan startup timed outzUnknown errorzLifespan startup failed: zASGI lifespan startup complete)r   r   Úputr	   Úcreate_taskÚ_run_lifespanr   Úwait_forr   ÚwaitÚTimeoutErrorÚcancelÚRuntimeErrorr   r   r   Údebug)r   ÚscopeÚmsgs      r   ÚstartupzLifespanManager.startup5   s1  è ø€ ð Ø %°uÑ=Ø—Z‘Zñ
ˆð ×!Ñ!×%Ñ% vÐ/AÐ&BÓC×CÐCô ×(Ñ(¨×);Ñ);¸EÓ)BÓCˆŒ
ð	=Ü×"Ñ"Ø×&Ñ&×+Ñ+Ó-Øô÷ ð ð ×ÒØ�zŠzØ—
‘
×!Ñ!Ô#Ø×%Ñ%Ò8¨ˆCÜÐ!:¸3¸%Ð@ÓAÐAà�‰×ÑÐ:Õ;ð- 	Døðùô ×#Ñ#ò 	=Ø�zŠzØ—
‘
×!Ñ!Ô#ÜÐ;Ó<Ð<ð	=üs;   ‚4E¶D·-EÁ%2D ÂD
ÂD ÂA-EÄ
D ÄAEÅEc              ƒ   ó   K  — | j                   r| j                  j                  d«       y| j                  j	                  ddi«      ƒ d{  –—†  	 t        j                  | j                  j                  «       d¬«      ƒ d{  –—†  | j                  r&| j                  j                  d| j                  «       | j                  rI| j                  j                  «       s/| j                  j                  «        	 | j                  ƒ d{  –—†  | j                  j                  d	«       y7 Œß7 Œ©# t
        j                  $ r | j                  j                  d«       Y Œ×w xY w7 ŒX# t
        j                   $ r Y Œkw xY w­w)
zjSignal shutdown and wait for completion.

        This should be called during graceful shutdown.
        zASGI lifespan already finishedNr   zlifespan.shutdownr   r   zLifespan shutdown timed outzLifespan shutdown error: %szASGI lifespan shutdown complete)r   r   r)   r   r!   r	   r$   r   r%   r&   Úwarningr   Úerrorr   Údoner'   ÚCancelledError©r   s    r   ÚshutdownzLifespanManager.shutdownZ   s@  è ø€ ð
 ×ÒØ�K‰K×ÑÐ>Ô?Øð ×!Ñ!×%Ñ% vÐ/BÐ&CÓD×DÐDð	?Ü×"Ñ"Ø×'Ñ'×,Ñ,Ó.Øô÷ ð ð ×ÒØ�K‰K×ÑÐ;¸T×=QÑ=QÔRð �:Š:˜dŸj™jŸo™oÔ/Ø�J‰J×ÑÔðØ—j‘j× Ð ð 	�‰×ÑÐ;Õ<ð- 	Eøðùô ×#Ñ#ò 	?Ø�K‰K×ÑÐ =Ö>ð	?úð !ùÜ×)Ñ)ò Ùðüs   ‚A	E>ÁD+ÁE>Á2D/ ÂD-ÂD/ ÂA2E>Ã;E% Ä
E#ÄE% ÄE>Ä-D/ Ä/.E ÅE>ÅE Å E>Å#E% Å%E;Å8E>Å:E;Å;E>c              ƒ   ó  K  — 	 | j                  || j                  | j                  «      ƒ d{  –—†  d| _        | j                  j                  «       s(d| _
        d| _        | j                  j                  «        | j                  j                  «       s| j                  j                  «        yy7 Œƒ# t        j                  $ r ‚ t
        $ r·}| j                  j                  d|«       | j                  j                  «       s2d| _
        t        |«      | _        | j                  j                  «        nD| j                  j                  «       s*t        |«      | _        | j                  j                  «        Y d}~�ŒOd}~ww xY w# d| _        | j                  j                  «       s(d| _
        d| _        | j                  j                  «        | j                  j                  «       s| j                  j                  «        w w xY w­w)zRun the ASGI lifespan protocol.NzLifespan application raised: %sTz*Application exited before startup complete)r   Ú_receiveÚ_sendr	   r1   Ú	Exceptionr   r)   r   Úis_setr   Ústrr   Úsetr   r   r   )r   r*   Úes      r   r#   zLifespanManager._run_lifespan|   s›  è ø€ ð	.Ø—(‘(˜5 $§-¡-°·±Ó<×<Ð<ð "&ˆDÔà×)Ñ)×0Ñ0Ô2Ø'+�Ô$Ø&R�Ô#Ø×&Ñ&×*Ñ*Ô,Ø×*Ñ*×1Ñ1Ô3Ø×'Ñ'×+Ñ+Õ-ð 4ð+ =ùÜ×%Ñ%ò 	ØÜò 
	.Ø�K‰K×ÑÐ?ÀÔCà×)Ñ)×0Ñ0Ô2Ø'+�Ô$Ü&)¨!£f�Ô#Ø×&Ñ&×*Ñ*Õ,à×,Ñ,×3Ñ3Ô5Ü'*¨1£v�Ô$Ø×'Ñ'×+Ñ+Ô-ÿùð
	.ûð "&ˆDÔà×)Ñ)×0Ñ0Ô2Ø'+�Ô$Ø&R�Ô#Ø×&Ñ&×*Ñ*Ô,Ø×*Ñ*×1Ñ1Ô3Ø×'Ñ'×+Ñ+Õ-ð 4üsL   ‚H„*B4 ®B2¯B4 ³A?HÂ2B4 Â4FÃB,FÅ<F
 ÆFÆF
 Æ
B H
È
Hc              ƒ   óR   K  — | j                   j                  «       ƒ d{  –—† S 7 Œ­w)z#ASGI receive callable for lifespan.N)r   Úgetr2   s    r   r5   zLifespanManager._receive—   s!   è ø€ à×(Ñ(×,Ñ,Ó.×.Ð.Ð.ús   ‚' %¡'c              ƒ   ó„  K  — |d   }|dk(  r6| j                   j                  «        | j                  j                  d«       y|dk(  r_d| _        |j                  dd«      | _        | j                   j                  «        | j                  j                  d| j                  «       y|d	k(  r6| j                  j                  «        | j                  j                  d
«       y|dk(  rX|j                  dd«      | _        | j                  j                  «        | j                  j                  d| j                  «       yy­w)z ASGI send callable for lifespan.r   zlifespan.startup.completez"Received lifespan.startup.completezlifespan.startup.failedTÚmessageÚ z$Received lifespan.startup.failed: %szlifespan.shutdown.completez#Received lifespan.shutdown.completezlifespan.shutdown.failedz%Received lifespan.shutdown.failed: %sN)	r   r:   r   r)   r   r=   r   r   r   )r   r?   Úmsg_types      r   r6   zLifespanManager._send›   s  è ø€ à˜6‘?ˆàÐ2Ò2Ø×"Ñ"×&Ñ&Ô(Ø�K‰K×ÑÐBÕCàÐ2Ò2Ø#'ˆDÔ Ø")§+¡+¨i¸Ó"<ˆDÔØ×"Ñ"×&Ñ&Ô(Ø�K‰K×ÑÐDØ"×1Ñ1õ3ð Ð5Ò5Ø×#Ñ#×'Ñ'Ô)Ø�K‰K×ÑÐCÕDàÐ3Ò3Ø#*§;¡;¨y¸"Ó#=ˆDÔ Ø×#Ñ#×'Ñ'Ô)Ø�K‰K×ÑÐEØ"×2Ñ2õ4ð 4ùs   ‚D>E )N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r3   r#   r5   r6   © r   r   r   r      s'   „ ñó#ò*#<òJ =òD.ò6/ó4r   r   )rE   r	   r   rF   r   r   ú<module>rG      s   ðñ
ó ÷b4ò b4r   