U
    ){f                     @  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m	Z	m
Z
mZ ddlmZmZ ejdk rjd dlmZ G d	d
 d
eZG dd dZdS )    )annotationsN   )Config)
AppWrapperASGIReceiveEventASGISendEventLifespanScopeLifespanState)LifespanFailureErrorLifespanTimeoutError)      )BaseExceptionGroupc                   @  s   e Zd ZdS )UnexpectedMessageErrorN)__name__
__module____qualname__ r   r   V/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/hypercorn/trio/lifespan.pyr      s   r   c                   @  sr   e Zd ZdddddddZej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dZ
dS )Lifespanr   r   r	   None)appconfigstatereturnc                 C  sD   || _ || _t | _t | _t|j\| _| _	|| _
d| _d S )NT)r   r   trioEventstartupshutdownZopen_memory_channelZmax_app_queue_sizeapp_send_channelapp_receive_channelr   	supported)selfr   r   r   r   r   r   __init__   s    

zLifespan.__init__)task_statusztrio._core._run._TaskStatus)r$   r   c             
     s:  |   dddd| jd}zz(| || j	| j
tjjtjjI d H  W n tk
r\    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  | j I d H  | j I d H  X d S )
NZlifespanz2.0z3.0)spec_versionversion)typeZasgir   FzBASGI Framework Lifespan error, continuing without Lifespan supportz@ASGI Framework Lifespan error, shutdown without Lifespan supportz/ASGI Framework Lifespan errored after shutdown.)startedr   r   setr   r   acloser    r   asgi_receive	asgi_sendr   Z	to_threadZrun_syncZfrom_threadrunr
   r   	Exception
isinstanceZsubgroupr!   is_setr   logwarning	exception)r"   r$   scopeerrorZfailure_errorr   r   r   handle_lifespan   sD    



*

zLifespan.handle_lifespan)r   c              
     s   | j s
d S | jddiI d H  z.t| jj | j I d H  W 5 Q R X W n. tj	k
r| } zt
d|W 5 d }~X Y nX d S )Nr'   zlifespan.startupr   )r!   r   sendr   
fail_afterr   Zstartup_timeoutr   waitTooSlowErrorr   r"   r5   r   r   r   wait_for_startupK   s    zLifespan.wait_for_startupc              
     s   | j s
d S | jddiI d H  z.t| jj | j I d H  W 5 Q R X W n. tj	k
r| } zt
d|W 5 d }~X Y nX d S )Nr'   zlifespan.shutdownr   )r!   r   r7   r   r8   r   Zshutdown_timeoutr   r9   r:   r   r;   r   r   r   wait_for_shutdownV   s    zLifespan.wait_for_shutdownr   c                   s   | j  I d H S )N)r    Zreceive)r"   r   r   r   r+   a   s    zLifespan.asgi_receiver   )messager   c                   s   |d dkr| j   nd|d dkr0| j  nL|d dkrPtd|ddn,|d dkrptd	|ddnt|d d S )
Nr'   zlifespan.startup.completezlifespan.shutdown.completezlifespan.startup.failedr   r>    zlifespan.shutdown.failedr   )r   r)   r   r
   getr   )r"   r>   r   r   r   r,   d   s    zLifespan.asgi_sendN)r   r   r   r#   r   ZTASK_STATUS_IGNOREDr6   r<   r=   r+   r,   r   r   r   r   r      s   ,r   )
__future__r   sysr   r   r   typingr   r   r   r   r	   utilsr
   r   version_infoZexceptiongroupr   r.   r   r   r   r   r   r   <module>   s   
