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 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 )
    )annotationsN)Queue)AnyUnion)Config)LifespanScopeLifespanShutdownCompleteEventLifespanShutdownEventLifespanShutdownFailedEventLifespanStartupCompleteEventLifespanStartupEventLifespanStartupFailedEventz2Got invalid state transition on lifespan protocol.c                   @  sd   e Zd Z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dddZdS )
LifespanOnr   None)configreturnc                 C  s`   |j s|  || _td| _t | _t | _	t
 | _d| _d| _d| _d| _i | _d S )Nzuvicorn.errorF)loadedloadr   logging	getLoggerloggerasyncioEventstartup_eventshutdown_eventr   receive_queueerror_occuredstartup_failedshutdown_failedshould_exitstate)selfr    r"   V/var/www/html/apigroqsegura/apigroq/lib/python3.8/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   zz:| jj}d| jjdd| jd}||| j| jI d H  W nz t	k
r } z\d | _
d| _| jsf| jrtW Y >W Ld S | jjdkrd}| j| nd}| jj||d	 W 5 d }~X Y nX W 5 | 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   setr   r   
loaded_appasgi_versionr    receivesendBaseExceptionr4   r   r   r   r-   r   r'   r.   )r!   appscopeexcmsgr"   r"   r#   r*   N   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%   )lifespan.startup.completelifespan.startup.failedlifespan.shutdown.completelifespan.shutdown.failedrC   rD   TrB   rE   rF   )AssertionErrorr   is_setSTATE_TRANSITION_ERRORr   r7   r   getr   r.   r   )r!   rB   r"   r"   r#   r;   f   s.    


zLifespanOn.sendLifespanReceiveMessagec                   s   | j  I d H S )N)r   rJ   )r!   r"   r"   r#   r:      s    zLifespanOn.receiveN)	__name__
__module____qualname__r$   r0   r1   r*   r;   r:   r"   r"   r"   r#   r      s   "r   )
__future__r   r   r   r   typingr   r   uvicornr   uvicorn._typesr   r   r	   r
   r   r   r   rK   rA   rI   r   r"   r"   r"   r#   <module>   s    $
