B
    Ce                 @   s   d dl Z d dlZd dl mZ d dlmZmZmZmZ d dlm	Z	 erd 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)TYPE_CHECKING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!   g/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/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   get_event_loopcreate_taskmainr   putr   waitr   r   r   lifespanerrorr   )r    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   zy:| j j}d| j jdd| jd}||| j| jI d H  W np tk
r } zRd | _d| _| j	sf| j
rjd S | j jdkrd}| j| nd}| jj||d	 W d d }~X Y nX W d | j  | j  X 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BaseExceptionr3   r   r   r   r,   r   r&   r-   r   setr   )r    Zappscopeexcmsgr!   r!   r"   r)   P   s$    
&
zLifespanOn.mainLifespanSendMessage)messager   c                sJ  |d dkst |d dkrL| j r.t t| j r@t t| j  n|d dkr| j rjt t| j r|t t| j  d| _|dr| j	|d  n|d dkr| j st t| j rt t| j  nb|d dkrF| j st t| j rt t| j  d| _
|drF| j	|d  d S )	Nr$   )zlifespan.startup.completezlifespan.startup.failedzlifespan.shutdown.completezlifespan.shutdown.failedzlifespan.startup.completezlifespan.startup.failedTr>   zlifespan.shutdown.completezlifespan.shutdown.failed)AssertionErrorr   is_setSTATE_TRANSITION_ERRORr   r9   r   getr   r-   r   )r    r>   r!   r!   r"   r7   h   s0    



zLifespanOn.sendLifespanReceiveMessagec                s   | j  I d H S )N)r   rB   )r    r!   r!   r"   r6      s    zLifespanOn.receive)
__name__
__module____qualname__r   r#   r/   r0   r)   r7   r6   r!   r!   r!   r"   r      s   "r   )r   r   r   typingr   r   r   r   Zuvicornr   Zasgiref.typingr   r	   r
   r   r   r   r   rC   r=   rA   r   r!   r!   r!   r"   <module>   s   $
