o
    㥵i	                     @  s   d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZmZmZ d dlmZmZmZ e	r<ddlmZ edge
f ZejG d	d
 d
ZdddZdS )    )annotationsNasynccontextmanagernullcontext)TYPE_CHECKINGAnyAsyncGeneratorCallableListTuple)ReceiveScopeSend   )Kuir   c                   @  s@   e Zd ZU ejedZded< ejedZded< dddZ	dS )Lifespan)default_factoryzList[LifespanCallback]
on_startupon_shutdownscoper   receiver   sendr   returnNonec           	        s  |d }| I dH }|d dksJ z| j D ]}||}t|r'|I dH  qW n ty?   t }|d|dI dH   w |ddiI dH  | I dH }|d dksWJ z| jD ]}||}t|rk|I dH  q[W n ty   t }|d	|dI dH   w |dd
iI dH  dS )z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        appNtypezlifespan.startupzlifespan.startup.failed)r   messagezlifespan.startup.completezlifespan.shutdownzlifespan.shutdown.failedzlifespan.shutdown.complete)r   inspectisawaitableBaseException	traceback
format_excr   )	selfr   r   r   r   r   handlerresultmsg r&   E/home/ubuntu/.local/lib/python3.10/site-packages/kui/asgi/lifespan.py__call__   s@   





zLifespan.__call__N)r   r   r   r   r   r   r   r   )
__name__
__module____qualname__dataclassesfieldlistr   __annotations__r   r(   r&   r&   r&   r'   r      s   
 r   func,Callable[['Kui'], AsyncGenerator[Any, None]]r   )Tuple[LifespanCallback, LifespanCallback]c                   s4   t | t  d
 fdd}d
 fdd}||fS )zR
    Convert `asynccontextmanager` function to `on_startup` and `on_shutdown`
    r   r   r   r   c                   s   |     I d H  d S N)
__aenter__r   context_managercontext_manager_funcr&   r'   r   B   s   z0asynccontextmanager_lifespan.<locals>.on_startupc                   s     d d d I d H  d S r3   )	__aexit__r5   )r7   r&   r'   r   G   s   z1asynccontextmanager_lifespan.<locals>.on_shutdownN)r   r   r   r   r   )r0   r   r   r&   r6   r'   asynccontextmanager_lifespan9   s
   r:   )r0   r1   r   r2   )
__future__r   r,   r   r    
contextlibr   r   typingr   r   r   r	   r
   r   baize.typingr   r   r   applicationsr   LifespanCallback	dataclassr   r:   r&   r&   r&   r'   <module>   s     &