a
     d~                     @   s~  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl mZ d dl	m
Z
 d dlmZ d dlmZ d dlmZmZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z' G dd de(Z)G dd de
Z*ej+e,dddZ-ej.e dddZ/ej.e dddZ0ej.e1dddZ2e1ej3e1ef ej3e1e1f ej4e1e5f dddZ6e7d Z8e1ej4ej9e1ej3e1ef f d!d"d#Z:G d$d% d%Z;G d&d' d'e;Z<G d(d) d)e;Z=G d*d+ d+e;Z>G d,d- d-e;Z?e@d.ZAG d/d0 d0ejBeA ZCej.ej+gejDf ej.ej+gejBf d1d2d3ZEG d4d5 d5ZFG d6d7 d7ZGdS )8    N)asynccontextmanager)Enum)is_async_callable)run_in_threadpool)CONVERTOR_TYPES	Convertor)URLHeadersURLPath)HTTPException)
Middleware)Request)PlainTextResponseRedirectResponse)ASGIAppLifespanReceiveScopeSend)	WebSocketWebSocketClosec                       s6   e Zd ZdZeejeejf dd fddZ  Z	S )NoMatchFoundz}
    Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)`
    if no matching route exists.
    N)namepath_paramsreturnc                    s0   d t| }t d| d| d d S )N, zNo route exists for name "z" and params "z".)joinlistkeyssuper__init__)selfr   r   params	__class__ Z/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/starlette/routing.pyr       s    zNoMatchFound.__init__)
__name__
__module____qualname____doc__strtypingDictAnyr    __classcell__r%   r%   r#   r&   r      s   r   c                   @   s   e Zd ZdZdZdZdS )Matchr         N)r'   r(   r)   NONEPARTIALFULLr%   r%   r%   r&   r0   #   s   r0   )objr   c                 C   s*   t dt t| tjr | j} qt| S )z~
    Correctly determines if an object is a coroutine function,
    including those wrapped in functools.partial objects.
    zViscoroutinefunction_or_partial is deprecated, and will be removed in a future release.)	warningswarnDeprecationWarning
isinstance	functoolspartialfuncinspectiscoroutinefunction)r6   r%   r%   r&   iscoroutinefunction_or_partial)   s    r@   r=   r   c                    s&   t  tttdd fdd}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    Nscopereceivesendr   c                    sH   t | ||d}r" |I d H }nt |I d H }|| ||I d H  d S N)rD   rE   )r   r   )rC   rD   rE   requestresponser=   Zis_coroutiner%   r&   app?   s
    zrequest_response.<locals>.app)r   r   r   r   r=   rJ   r%   rI   r&   request_response8   s    rL   c                    s   t ttdd fdd}|S )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    NrB   c                    s    t | ||d} |I d H  d S rF   )r   )rC   rD   rE   sessionr=   r%   r&   rJ   P   s    zwebsocket_session.<locals>.app)r   r   r   rK   r%   rN   r&   websocket_sessionJ   s    rO   )endpointr   c                 C   s"   t | st | r| jS | jjS N)r>   	isroutineisclassr'   r$   )rP   r%   r%   r&   get_nameW   s    rT   )pathparam_convertorsr   r   c                 C   s^   t | D ]H\}}d| d | v r|| }||}| d| d |} || q| |fS )N{})r   itemsZ	to_stringreplacepop)rU   rV   r   keyvalue	convertorr%   r%   r&   replace_params]   s    
r_   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?})rU   r   c                 C   s  |  d }d}d}t }d}i }t| D ]}|d\}}	|	d}	|	tv s`J d|	 dt|	 }
|t| ||	  7 }|d	| d
|
j
 d7 }|| ||	  7 }|d| 7 }||v r|| |
||< | }q,|r"dt|}t|dkrdnd}td| d| d|  |rR| |d dd }|t|d 7 }n|t| |d d 7 }|| |d 7 }t|||fS )a*  
    Given a path string, like: "/{username:str}",
    or a host string, like: "{subdomain}.mydomain.org", return a three-tuple
    of (regex, format, {param_name:convertor}).

    regex:      "/(?P<username>[^/]+)"
    format:     "/{username}"
    convertors: {"username": StringConvertor()}
    /^ r   r+   :zUnknown path convertor ''z(?P<>)z{%s}r   r1   szDuplicated param name z	 at path N$)
startswithsetPARAM_REGEXfinditergroupslstripr   reescapestartregexaddendr   sortedlen
ValueErrorsplitcompile)rU   Zis_host
path_regexpath_formatZduplicated_paramsidxrV   match
param_nameZconvertor_typer^   namesendinghostnamer%   r%   r&   compile_patho   s@    



r   c                   @   sb   e Zd Zeejeef dddZeej	e
dddZeeeddd	d
ZeeeddddZdS )	BaseRouterC   r   c                 C   s
   t  d S rQ   NotImplementedError)r!   rC   r%   r%   r&   matches   s    zBaseRoute.matches)_BaseRoute__namer   r   c                 K   s
   t  d S rQ   r   )r!   r   r   r%   r%   r&   url_path_for   s    zBaseRoute.url_path_forNrB   c                    s
   t  d S rQ   r   r!   rC   rD   rE   r%   r%   r&   handle   s    zBaseRoute.handlec                    s   |  |\}}|tjkrl|d dkrDtddd}||||I dH  n$|d dkrht }||||I dH  dS || | |||I dH  dS )z
        A route may be used in isolation as a stand-alone ASGI app.
        This is a somewhat contrived case, as they'll almost always be used
        within a Router, but could be useful for some tooling and minimal apps.
        typehttp	Not Found  status_codeN	websocket)r   r0   r3   r   r   updater   )r!   rC   rD   rE   r~   child_scoperH   websocket_closer%   r%   r&   __call__   s    

zBaseRoute.__call__)r'   r(   r)   r   r,   Tupler0   r   r+   r.   r
   r   r   r   r   r   r%   r%   r%   r&   r      s   r   c                   @   s   e Zd Zddddeejejeje  eje eddddZ	e
ejee
f ddd	Zeejed
ddZe
eeddddZejedddZedddZdS )RouteNTmethodsr   include_in_schemarU   rP   r   r   r   r   c                C   s   | dsJ d|| _|| _|d u r.t|n|| _|| _|}t|tjrR|j	}q>t
|sft
|rt|| _|d u rdg}n|| _|d u rd | _n&dd |D | _d| jv r| jd t|\| _| _| _d S )Nr`    Routed paths must start with '/'GETc                 S   s   h | ]}|  qS r%   )upper).0methodr%   r%   r&   	<setcomp>       z!Route.__init__.<locals>.<setcomp>HEAD)rj   rU   rP   rT   r   r   r:   r;   r<   r=   r>   
isfunctionismethodrL   rJ   r   rt   r   r{   r|   rV   )r!   rU   rP   r   r   r   endpoint_handlerr%   r%   r&   r       s&    	

zRoute.__init__r   c                 C   s   |d dkr| j |d }|r| }| D ]\}}| j| |||< q0t|di }|| | j	|d}| j
r|d | j
vrtj|fS tj|fS tji fS )Nr   r   rU   r   rP   r   r   )r{   r~   	groupdictrY   rV   convertdictgetr   rP   r   r0   r4   r5   r3   r!   rC   r~   matched_paramsr\   r]   r   r   r%   r%   r&   r      s    


zRoute.matches)_Route__namer   r   c                 K   s^   t | }t | j }|| jks,||kr6t||t| j| j|\}}|rRJ t|ddS )Nr   rU   protocolrk   r   rV   r   r   r_   r|   r
   )r!   r   r   seen_paramsexpected_paramsrU   remaining_paramsr%   r%   r&   r      s    

zRoute.url_path_forrB   c                    st   | j r\|d | j vr\dd| j i}d|v r:td|dntdd|d}||||I d H  n| |||I d H  d S )Nr   ZAllowr   rJ   i  )r   headerszMethod Not Allowed)r   r   r   r   rJ   )r!   rC   rD   rE   r   rH   r%   r%   r&   r   	  s    zRoute.handleotherr   c                 C   s.   t |to,| j|jko,| j|jko,| j|jkS rQ   )r:   r   rU   rP   r   r!   r   r%   r%   r&   __eq__  s    



zRoute.__eq__r   c                 C   s@   | j j}t| jpg }| j| j }}| d|d|d|dS )N(path=, name=z
, methods=rf   )r$   r'   rv   r   rU   r   )r!   
class_namer   rU   r   r%   r%   r&   __repr__  s    zRoute.__repr__)r'   r(   r)   r+   r,   CallableOptionalListboolr    r   r   r0   r   r.   r
   r   r   r   r   r   r   r%   r%   r%   r&   r      s    $r   c                   @   s   e Zd Zddeejeje ddddZeej	e
ef dddZeejed	d
dZeeeddddZejedddZedddZdS )WebSocketRouteNr   rU   rP   r   r   c                C   s   | dsJ d|| _|| _|d u r.t|n|| _|}t|tjrL|j}q8t	
|s`t	|rlt|| _n|| _t|\| _| _| _d S )Nr`   r   )rj   rU   rP   rT   r   r:   r;   r<   r=   r>   r   r   rO   rJ   r   r{   r|   rV   )r!   rU   rP   r   r   r%   r%   r&   r    &  s    zWebSocketRoute.__init__r   c                 C   s   |d dkr~| j |d }|r~| }| D ]\}}| j| |||< q0t|di }|| | j	|d}t
j|fS t
ji fS )Nr   r   rU   r   r   )r{   r~   r   rY   rV   r   r   r   r   rP   r0   r5   r3   r   r%   r%   r&   r   :  s    

zWebSocketRoute.matches)_WebSocketRoute__namer   r   c                 K   s^   t | }t | j }|| jks,||kr6t||t| j| j|\}}|rRJ t|ddS )Nr   r   r   )r!   r   r   r   r   rU   r   r%   r%   r&   r   G  s    

zWebSocketRoute.url_path_forrB   c                    s   |  |||I d H  d S rQ   rJ   r   r%   r%   r&   r   T  s    zWebSocketRoute.handler   c                 C   s"   t |to | j|jko | j|jkS rQ   )r:   r   rU   rP   r   r%   r%   r&   r   W  s
    


zWebSocketRoute.__eq__r   c                 C   s   | j j d| jd| jdS )Nr   r   rf   )r$   r'   rU   r   r!   r%   r%   r&   r   ^  s    zWebSocketRoute.__repr__)r'   r(   r)   r+   r,   r   r   r    r   r   r0   r   r.   r
   r   r   r   r   r   r   r   r%   r%   r%   r&   r   %  s   r   c                	   @   s   e Zd Zdddeeje ejeje  eje ejeje	  ddddZ
eeje dddZeejeef d	d
dZeejedddZeeeddddZejedddZedddZdS )MountN)
middleware)rU   rJ   routesr   r   r   c                C   s   |dks| dsJ d|d us2|d us2J d|d| _|d urN|| _nt|d| _| j| _|d urt|D ]\}}|f d| ji|| _qr|| _t| jd \| _	| _
| _d S )Nrb   r`   r   z0Either 'app=...', or 'routes=' must be specified)r   rJ   z/{path:path})rj   rstriprU   	_base_appRouterrJ   reversedr   r   r{   r|   rV   )r!   rU   rJ   r   r   r   clsoptionsr%   r%   r&   r    c  s&    	zMount.__init__r   c                 C   s   t | jdg S Nr   )getattrr   r   r%   r%   r&   r   ~  s    zMount.routesr   c                 C   s   |d dv r|d }| j |}|r| }| D ]\}}| j| |||< q4d|d }|d t|  }t|	di }	|	
| |	dd}
|	|	d|
|
| || jd	}tj|fS tji fS )
Nr   r   r   rU   r`   r   	root_pathrb   app_root_path)r   r   r   rU   rP   )r{   r~   r   rY   rV   r   r[   rw   r   r   r   rJ   r0   r5   r3   )r!   rC   rU   r~   r   r\   r]   Zremaining_pathZmatched_pathr   r   r   r%   r%   r&   r     s(    


zMount.matches)_Mount__namer   r   c           
   	   K   s2  | j d urR|| j krRd|v rR|d d|d< t| j| j|\}}|sPt|dS n| j d u sn|| j d r$| j d u r~|}n|t| j d d  }|d}d|d< t| j| j|\}}|d ur||d< | j	pg D ]N}z4|j
|fi |}	t|dt|	 |	jdW   S  ty    Y q0 qt||d S )NrU   r`   )rU   rc   r1   rb   r   )r   ro   r_   r|   rV   r
   rj   rw   r   r   r   r   r+   r   r   )
r!   r   r   rU   r   remaining_nameZ
path_kwargZpath_prefixrouteurlr%   r%   r&   r     s6    



zMount.url_path_forrB   c                    s   |  |||I d H  d S rQ   r   r   r%   r%   r&   r     s    zMount.handler   c                 C   s"   t |to | j|jko | j|jkS rQ   )r:   r   rU   rJ   r   r%   r%   r&   r     s
    


zMount.__eq__c                 C   s2   | j j}| jpd}| d| jd|d| jdS )Nrb   r   r   , app=rf   )r$   r'   r   rU   rJ   r!   r   r   r%   r%   r&   r     s    
zMount.__repr__)NNN)r'   r(   r)   r+   r,   r   r   Sequencer   r   r    propertyr   r   r   r   r0   r   r.   r
   r   r   r   r   r   r   r   r%   r%   r%   r&   r   b  s(      !r   c                   @   s   e Zd Zdeeeje ddddZeej	e
 dddZeejeef dd	d
ZeejedddZeeeddddZejedddZedddZdS )HostNhostrJ   r   r   c                 C   s<   | drJ d|| _|| _|| _t|\| _| _| _d S )Nr`   zHost must not start with '/')rj   r   rJ   r   r   
host_regexhost_formatrV   )r!   r   rJ   r   r%   r%   r&   r      s
    zHost.__init__r   c                 C   s   t | jdg S r   )r   rJ   r   r%   r%   r&   r     s    zHost.routesr   c           
      C   s   |d dv rt |d}|dddd }| j|}|r| }| D ]\}}| j| |||< qLt	|di }|
| || jd	}	tj|	fS tji fS )
Nr   r   rC   r   rb   rc   r   r   )r   rP   )r	   r   ry   r   r~   r   rY   rV   r   r   r   rJ   r0   r5   r3   )
r!   rC   r   r   r~   r   r\   r]   r   r   r%   r%   r&   r     s    


zHost.matches)_Host__namer   r   c           	   	   K   s   | j d urL|| j krLd|v rL|d}t| j| j|\}}|st||dS n| j d u sf|| j d r| j d u rv|}n|t| j d d  }t| j| j|\}}| jpg D ]D}z,|j	|fi |}tt
||j|dW   S  ty   Y q0 qt||d S )NrU   )rU   r   rc   r1   )rU   r   r   )r   r[   r_   r   rV   r
   rj   rw   r   r   r+   r   r   )	r!   r   r   rU   r   r   r   r   r   r%   r%   r&   r     s*    



zHost.url_path_forrB   c                    s   |  |||I d H  d S rQ   r   r   r%   r%   r&   r     s    zHost.handler   c                 C   s"   t |to | j|jko | j|jkS rQ   )r:   r   r   rJ   r   r%   r%   r&   r     s
    


zHost.__eq__c                 C   s2   | j j}| jpd}| d| jd|d| jdS )Nrb   z(host=r   r   rf   )r$   r'   r   r   rJ   r   r%   r%   r&   r     s    
zHost.__repr__)N)r'   r(   r)   r+   r   r,   r   r    r   r   r   r   r   r   r0   r   r.   r
   r   r   r   r   r   r   r   r%   r%   r%   r&   r     s    	r   _Tc                   @   sb   e Zd Zeje dddZedddZejej	e
  eje
 ejej eje ddd	Zd
S )_AsyncLiftContextManager)cmc                 C   s
   || _ d S rQ   )_cm)r!   r   r%   r%   r&   r      s    z!_AsyncLiftContextManager.__init__r   c                    s
   | j  S rQ   )r   	__enter__r   r%   r%   r&   
__aenter__  s    z#_AsyncLiftContextManager.__aenter__)exc_type	exc_value	tracebackr   c                    s   | j |||S rQ   )r   __exit__)r!   r   r   r   r%   r%   r&   	__aexit__  s    z"_AsyncLiftContextManager.__aexit__N)r'   r(   r)   r,   ContextManagerr   r    r   r   TypeBaseExceptiontypesTracebackTyper   r   r%   r%   r%   r&   r     s   
r   )lifespan_contextr   c                    s.   t |  t tjtd fdd}|S )N)rJ   r   c                    s   t  | S rQ   )r   r   Zcmgrr%   r&   wrapper*  s    z+_wrap_gen_lifespan_context.<locals>.wrapper)
contextlibcontextmanagerr;   wrapsr,   r.   r   )r   r   r%   r   r&   _wrap_gen_lifespan_context%  s    
r   c                   @   sJ   e Zd ZddddZddddZedd	d
dZeeedddZdS )_DefaultLifespanr   )routerc                 C   s
   || _ d S rQ   )_router)r!   r   r%   r%   r&   r    2  s    z_DefaultLifespan.__init__Nr   c                    s   | j  I d H  d S rQ   )r  startupr   r%   r%   r&   r   5  s    z_DefaultLifespan.__aenter__)exc_infor   c                    s   | j  I d H  d S rQ   )r  shutdown)r!   r  r%   r%   r&   r   8  s    z_DefaultLifespan.__aexit__)r!   rJ   r   c                 C   s   | S rQ   r%   )r!   rJ   r%   r%   r&   r   ;  s    z_DefaultLifespan.__call__)	r'   r(   r)   r    r   objectr   r   r   r%   r%   r%   r&   r   1  s   r   c                	   @   s  e Zd Zd0ejeje  eeje ejejej	  ejejej	  eje
ej  ddddZeeeddddZeejed	d
dZddddZddddZeeeddddZeeeddddZejedddZd1eeeje ddddZd2eeeje ddddZd3eej	ejeje  eje edddd Zd4eej	eje dd!d"d#Zd5eejeje  eje eej	d$d%d&Zd6eeje ej	d'd(d)Zeej	dd*d+d,Z eej	d-d.d/Z!dS )7r   NT)r   redirect_slashesdefault
on_startupon_shutdownlifespanr   c                 C   s   |d u rg nt || _|| _|d u r*| jn|| _|d u r<g nt || _|d u rRg nt || _|sd|rptdt	 |d u rt
| | _nJt|rtdt	 t|| _n(t|rtdt	 t|| _n|| _d S )NzThe on_startup and on_shutdown parameters are deprecated, and they will be removed on version 1.0. Use the lifespan parameter instead. See more about it on https://www.starlette.io/lifespan/.zjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead)r   r   r  	not_foundr  r  r	  r7   r8   r9   r   r   r>   isasyncgenfunctionr   isgeneratorfunctionr   )r!   r   r  r  r  r	  r
  r%   r%   r&   r    @  s:    

zRouter.__init__rB   c                    s^   |d dkr(t  }||||I d H  d S d|v r<tddntddd}||||I d H  d S )Nr   r   rJ   r   r   r   )r   r   r   )r!   rC   rD   rE   r   rH   r%   r%   r&   r  q  s    zRouter.not_found)_Router__namer   r   c              	   K   sF   | j D ]0}z|j|fi |W   S  ty4   Y q0 qt||d S rQ   )r   r   r   )r!   r  r   r   r%   r%   r&   r     s    
zRouter.url_path_forr   c                    s,   | j D ] }t|r | I dH  q|  qdS )z7
        Run any `.on_startup` event handlers.
        N)r  r   r!   handlerr%   r%   r&   r    s    
zRouter.startupc                    s,   | j D ] }t|r | I dH  q|  qdS )z8
        Run any `.on_shutdown` event handlers.
        N)r	  r   r  r%   r%   r&   r    s    
zRouter.shutdownc              	      s  d}| d}| I dH  z| |4 I dH ^}|durVd|vrHtd|d | |ddiI dH  d}| I dH  W d  I dH  q1 I dH s0    Y  W nJ ty   t }|r|d	|d
I dH  n|d|d
I dH   Y n0 |ddiI dH  dS )z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        FrJ   Nstatez:The server does not support "state" in the lifespan scope.r   zlifespan.startup.completeTzlifespan.shutdown.failed)r   messagezlifespan.startup.failedzlifespan.shutdown.complete)r   r   RuntimeErrorr   r   r   
format_exc)r!   rC   rD   rE   startedrJ   Zmaybe_stateexc_textr%   r%   r&   r
    s*    
:zRouter.lifespanc                    s  |d dv sJ d|vr | |d< |d dkrD|  |||I dH  dS d}| jD ]Z}||\}}|tjkr|| ||||I dH   dS |tjkrN|du rN|}|}qN|dur|| ||||I dH  dS |d dkr| jr|d dkrt	|}	|d 
dr$|	d d|	d< n|	d d |	d< | jD ]P}||	\}}|tjkr:t|	d	}
tt|
d
}||||I dH   dS q:| |||I dH  dS )z;
        The main entry point to the Router class.
        r   )r   r   r
  r   r
  Nr   rU   r`   r   )r   )r
  r   r   r0   r5   r   r   r4   r  r   endswithr   r3   r   r   r+   r  )r!   rC   rD   rE   r<   r   r~   r   Zpartial_scopeZredirect_scopeZredirect_urlrH   r%   r%   r&   r     sB    



$


zRouter.__call__r   c                 C   s   t |to| j|jkS rQ   )r:   r   r   r   r%   r%   r&   r     s    zRouter.__eq__)rU   rJ   r   r   c                 C   s   t |||d}| j| d S N)rJ   r   )r   r   append)r!   rU   rJ   r   r   r%   r%   r&   mount  s    zRouter.mountr   c                 C   s   t |||d}| j| d S r  )r   r   r  )r!   r   rJ   r   r   r%   r%   r&   r     s    zRouter.hostr   c                 C   s"   t |||||d}| j| d S )N)rP   r   r   r   )r   r   r  )r!   rU   rP   r   r   r   r   r%   r%   r&   	add_route  s    zRouter.add_router   c                 C   s   t |||d}| j| d S )N)rP   r   )r   r   r  )r!   rU   rP   r   r   r%   r%   r&   add_websocket_route  s    zRouter.add_websocket_route)rU   r   r   r   r   c                    s0   t dt tjtjd fdd}|S )z
        We no longer document this decorator style API, and its usage is discouraged.
        Instead you should use the following approach:

        >>> routes = [Route(path, endpoint=...), ...]
        >>> app = Starlette(routes=routes)
        zThe `route` decorator is deprecated, and will be removed in version 1.0.0.Refer to https://www.starlette.io/routing/#http-routing for the recommended approach.rA   c                    s   j |  d | S )Nr   )r  rN   r   r   r   rU   r!   r%   r&   	decorator'  s    zRouter.route.<locals>.decoratorr7   r8   r9   r,   r   )r!   rU   r   r   r   r  r%   r  r&   r     s     
zRouter.route)rU   r   r   c                    s,   t dt tjtjd fdd}|S )a  
        We no longer document this decorator style API, and its usage is discouraged.
        Instead you should use the following approach:

        >>> routes = [WebSocketRoute(path, endpoint=...), ...]
        >>> app = Starlette(routes=routes)
        zThe `websocket_route` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/routing/#websocket-routing for the recommended approach.rA   c                    s   j |  d | S )Nr   )r  rN   r   rU   r!   r%   r&   r  C  s    z)Router.websocket_route.<locals>.decoratorr  )r!   rU   r   r  r%   r   r&   websocket_route3  s    
zRouter.websocket_route)
event_typer=   r   c                 C   s2   |dv sJ |dkr"| j | n| j| d S )N)r  r  r  )r  r  r	  )r!   r"  r=   r%   r%   r&   add_event_handlerI  s    zRouter.add_event_handler)r"  r   c                    s*   t dt tjtjd fdd}|S )NzThe `on_event` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/lifespan/ for recommended approach.rA   c                    s     |  | S rQ   )r#  rN   r"  r!   r%   r&   r  Z  s    z"Router.on_event.<locals>.decoratorr  )r!   r"  r  r%   r$  r&   on_eventS  s    zRouter.on_event)NTNNNN)N)N)NNT)N)NNT)N)"r'   r(   r)   r,   r   r   r   r   r   r   r   r.   r    r   r   r   r  r+   r
   r   r  r  r
  r   r   r  r   r   r  r  r   r!  r#  r%  r%   r%   r%   r&   r   ?  s         1

4  
    	   ! 

r   )Hr   r;   r>   rp   r   r   r,   r7   r   enumr   Zstarlette._utilsr   Zstarlette.concurrencyr   Zstarlette.convertorsr   r   Zstarlette.datastructuresr   r	   r
   Zstarlette.exceptionsr   Zstarlette.middlewarer   Zstarlette.requestsr   Zstarlette.responsesr   r   Zstarlette.typesr   r   r   r   r   Zstarlette.websocketsr   r   	Exceptionr   r0   r.   r   r@   r   rL   rO   r+   rT   r-   r   r   r_   rz   rl   Patternr   r   r   r   r   r   TypeVarr   AsyncContextManagerr   	Generatorr   r   r   r%   r%   r%   r&   <module>   s\   
:^=hH
