a
    d>                     @   s   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
mZmZmZmZmZmZ eeef Zeeeeef ZdZG dd dZdS )	    N)Queue)AnyDictUnion)Config)LifespanScopeLifespanShutdownCompleteEventLifespanShutdownEventLifespanShutdownFailedEventLifespanStartupCompleteEventLifespanStartupEventLifespanStartupFailedEventz2Got invalid state transition on lifespan protocol.c                   @   sd   e Zd Ze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dddZ	dS )
LifespanOnN)configreturnc                 C   s`   |j s|  || _td| _t | _t | _	t
 | _d| _d| _d| _d| _i | _d S )Nzuvicorn.errorF)Zloadedloadr   logging	getLoggerloggerasyncioEventstartup_eventshutdown_eventr   receive_queueerror_occuredstartup_failedshutdown_failedshould_exitstate)selfr    r    \/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/uvicorn/lifespan/on.py__init__   s    


zLifespanOn.__init__)r   c                    s   | j d t }||  }ddi}| j|I d H  | j	 I d H  | j
sd| jrx| jjdkrx| j d d| _n| j d d S )Nz Waiting for application startup.typezlifespan.startuponz$Application startup failed. Exiting.TzApplication startup complete.)r   infor   Zget_event_loopZcreate_taskmainr   putr   waitr   r   r   lifespanerrorr   )r   ZloopZmain_lifespan_taskr   r    r    r!   startup-   s    zLifespanOn.startupc                    s|   | j r
d S | jd ddi}| j|I d H  | j I d H  | jsX| j rl| jj	dkrl| j
d d| _n| jd d S )Nz!Waiting for application shutdown.r#   zlifespan.shutdownr$   z%Application shutdown failed. Exiting.TzApplication shutdown complete.)r   r   r%   r   r'   r   r(   r   r   r)   r*   r   )r   r   r    r    r!   shutdown>   s    
zLifespanOn.shutdownc              
      s  zz:| j j}d| j jdd| jd}||| j| jI d H  W n ty } zzd | _d| _| j	sd| j
rW Y d }~W | j  | j  d S | j jdkrd}| j| nd}| jj||d	 W Y d }~n
d }~0 0 W | j  | j  n| j  | j  0 d S )
Nr)   z2.0)versionspec_version)r#   asgir   Tautoz-ASGI 'lifespan' protocol appears unsupported.z!Exception in 'lifespan' protocol
)exc_info)r   Z
loaded_appZasgi_versionr   receivesendBaseExceptionr/   r   r   r   r   setr   r)   r   r%   r*   )r   ZappZscopeexcmsgr    r    r!   r&   N   s0    

(

zLifespanOn.mainLifespanSendMessage)messager   c                    sJ  |d dv sJ |d dkrL| j  r.J t| j r@J t| j   n|d dkr| j  rjJ t| j r|J t| j   d| _|dr| j|d  n|d dkr| j  sJ t| j rJ t| j  nb|d dkrF| j  sJ t| j rJ t| j  d| _	|drF| j|d  d S )	Nr#   )lifespan.startup.completelifespan.startup.failedlifespan.shutdown.completelifespan.shutdown.failedr:   r;   Tr9   r<   r=   )
r   is_setSTATE_TRANSITION_ERRORr   r5   r   getr   r*   r   )r   r9   r    r    r!   r3   f   s.    


zLifespanOn.sendLifespanReceiveMessagec                    s   | j  I d H S )N)r   r@   )r   r    r    r!   r2      s    zLifespanOn.receive)
__name__
__module____qualname__r   r"   r+   r,   r&   r3   r2   r    r    r    r!   r      s   "r   )r   r   r   typingr   r   r   Zuvicornr   Zuvicorn._typesr   r   r	   r
   r   r   r   rA   r8   r?   r   r    r    r    r!   <module>   s   $
