U
    ){fZ                     @  s   d dl mZ d dlZd dlZd dlmZ d dlmZmZ ddl	m
Z
 ddlmZmZmZmZmZ ddlmZmZ ejd	k rd d
lmZ G dd deZG dd dZdS )    )annotationsN)partial)AnyCallable   )Config)
AppWrapperASGIReceiveEventASGISendEventLifespanScopeLifespanState)LifespanFailureErrorLifespanTimeoutError)      )BaseExceptionGroupc                   @  s   e Zd ZdS )UnexpectedMessageErrorN)__name__
__module____qualname__ r   r   Y/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/asyncio/lifespan.pyr      s   r   c                   @  sj   e Zd ZddddddddZdd	d
dZdd	ddZdd	ddZdd	ddZdddddZdS )Lifespanr   r   zasyncio.AbstractEventLoopr   None)appconfiglooplifespan_statereturnc                 C  sN   || _ || _t | _t | _t|j| _d| _	|| _
|| _t | _d S )NT)r   r   asyncioEventstartupshutdownQueueZmax_app_queue_size	app_queue	supportedr   state_started)selfr   r   r   r   r   r   r   __init__   s    

zLifespan.__init__)r   c              
     s6   j   dddd jd}dddd fd	d
}zz* | j jt j	j
d |I d H  W n tk
rv    Y n ttfk
r } z~t|tr|t}|d k	r|d _ j s҈ jjdI d H  n4 j s jjdI d H  n jjdI d H  W 5 d }~X Y nX W 5  j   j  X d S )NZlifespanz2.0z3.0)spec_versionversion)typeZasgir&   r   r   )funcargsr   c                   s   t | |  j}| S N)r   run_coroutine_threadsafer   result)r-   r.   futurer(   r   r   
_call_soon2   s    z,Lifespan.handle_lifespan.<locals>._call_soonFzBASGI Framework Lifespan error, continuing without Lifespan supportz@ASGI Framework Lifespan error, shutdown without Lifespan supportz/ASGI Framework Lifespan errored after shutdown.)r'   setr&   r!   r"   r   asgi_receive	asgi_sendr   r   run_in_executorr   r   	Exception
isinstanceZsubgroupr%   is_setr   logwarning	exception)r(   scoper4   errorZfailure_errorr   r3   r   handle_lifespan*   sB    




*
zLifespan.handle_lifespanc              
     s   | j  I d H  | jsd S | jddiI d H  z"tj| j | jj	dI d H  W n. tj
k
r } ztd|W 5 d }~X Y nX d S )Nr,   zlifespan.startuptimeoutr!   )r'   waitr%   r$   putr   wait_forr!   r   Zstartup_timeoutTimeoutErrorr   r(   r@   r   r   r   wait_for_startupW   s    "zLifespan.wait_for_startupc              
     s   | j  I d H  | jsd S | jddiI d H  z"tj| j | jj	dI d H  W n. tj
k
r } ztd|W 5 d }~X Y nX d S )Nr,   zlifespan.shutdownrB   r"   )r'   rD   r%   r$   rE   r   rF   r"   r   Zshutdown_timeoutrG   r   rH   r   r   r   wait_for_shutdownb   s    "zLifespan.wait_for_shutdownr	   c                   s   | j  I d H S r/   )r$   getr3   r   r   r   r6   m   s    zLifespan.asgi_receiver
   )messager   c                   s   |d dkr| j   nx|d dkr0| j  n`|d dkrZ| j   td|ddn6|d dkr| j  td	|ddnt|d d S )
Nr,   zlifespan.startup.completezlifespan.shutdown.completezlifespan.startup.failedr!   rL    zlifespan.shutdown.failedr"   )r!   r5   r"   r   rK   r   )r(   rL   r   r   r   r7   p   s    

zLifespan.asgi_sendN)	r   r   r   r)   rA   rI   rJ   r6   r7   r   r   r   r   r      s   -r   )
__future__r   r   sys	functoolsr   typingr   r   r   r   r   r	   r
   r   r   utilsr   r   version_infoZexceptiongroupr   r9   r   r   r   r   r   r   <module>   s   
