o
    Ci                     @   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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!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.dej/de0fddZ1dej2egej3ej4e" e"f f de$fddZ5dej2e*gej4d f de$fddZ6dej2dej/f de7fddZ8d e7d!ej9e7eej/ f d"ej9e7e7f dej:e7ej9e7e7f f fd#d$Z;e<d%Z=d e7dej:ej>e7 e7ej9e7eej/ f f fd&d'Z?G d(d) d)Z@G d*d+ d+e@ZAG d,d- d-e@ZBG d.d/ d/e@ZCG d0d1 d1e@ZDeEd2ZFG d3d4 d4ejGeF ZHd5ej2ej/gejIej/ej/ej/f f dej2ej/gejGej/ f fd6d7ZJG d8d9 d9ZKG d:d; d;ZLdS )<    N)asynccontextmanager)Enum)wrap_app_handling_exceptions)get_route_pathis_async_callable)run_in_threadpool)CONVERTOR_TYPES	Convertor)URLHeadersURLPath)HTTPException)
Middleware)Request)PlainTextResponseRedirectResponseResponse)ASGIAppLifespanReceiveScopeSend)	WebSocketWebSocketClosec                       s:   e Zd ZdZdedejeejf ddf 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.
    namepath_paramsreturnNc                    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__ i/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/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)   r3   $   s    r3   objr   c                 C   s4   t dt t| tjr| j} t| tjs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)r9   r(   r(   r)   iscoroutinefunction_or_partial*   s   
rC   r@   c                    "   dt dtdtddf fdd}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    scopereceivesendr   Nc                    sJ   t | || dtdtdtdd f fdd}t| | ||I d H  d S )NrE   rF   rG   r   c                    s@   t  r I d H }nt I d H }|| ||I d H  d S N)r   r   )rE   rF   rG   response)r@   requestr(   r)   appF   s
   z*request_response.<locals>.app.<locals>.app)r   r   r   r   r   rE   rF   rG   rK   r@   )rJ   r)   rK   C   s    zrequest_response.<locals>.appr   r   r   r@   rK   r(   rM   r)   request_response9   s   
rP   c                    rD   )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    rE   rF   rG   r   Nc                    sL   t | ||d dtdtdtdd f fdd}t| | ||I d H  d S )N)rF   rG   rE   rF   rG   r   c                    s    I d H  d S rH   r(   )rE   rF   rG   )r@   sessionr(   r)   rK   ]   s   z+websocket_session.<locals>.app.<locals>.app)r   r   r   r   r   rL   rM   )rQ   r)   rK   Z   s    zwebsocket_session.<locals>.apprN   rO   r(   rM   r)   websocket_sessionR   s   rR   endpoint.c                 C   s"   t | s
t | r| jS | jjS rH   )rA   	isroutineisclassr*   r'   )rS   r(   r(   r)   get_namee   s   rV   pathparam_convertorsr   c                 C   s^   t | D ]$\}}d| d | v r*|| }||}| d| d |} || q| |fS )N{})r    items	to_stringreplacepop)rW   rX   r   keyvalue	convertorr(   r(   r)   replace_paramsk   s   

rb   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                 C   s  |  d }d}d}t }d}i }t| D ]X}|d\}}	|	d}	|	tv s0J d|	 dt|	 }
|t| ||	  7 }|d	| d
|
j
 d7 }|| ||	  7 }|d| 7 }||v rf|| |
||< | }q|rdt|}t|dkrdnd}td| d| d|  |r| |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   r4   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)rW   is_host
path_regexpath_formatduplicated_paramsidxrX   match
param_nameconvertor_typera   namesendinghostnamer(   r(   r)   compile_path}   s>   




r   c                   @   st   e Zd Zdedejeef fddZdedej	de
fddZded	ed
eddfddZded	ed
eddfddZdS )	BaseRouterE   r   c                 C      t  rH   NotImplementedError)r$   rE   r(   r(   r)   matches      zBaseRoute.matchesr   r   c                K   r   rH   r   )r$   r   r   r(   r(   r)   url_path_for   r   zBaseRoute.url_path_forrF   rG   Nc                    s   t  rH   r   r$   rE   rF   rG   r(   r(   r)   handle   s   zBaseRoute.handlec                    s   |  |\}}|tjkr8|d dkr$tddd}||||I dH  dS |d dkr6t }||||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   r3   r6   r   r   updater   )r$   rE   rF   rG   r   child_scoperI   websocket_closer(   r(   r)   __call__   s   

zBaseRoute.__call__)r*   r+   r,   r   r/   Tupler3   r   r.   r1   r   r   r   r   r   r   r(   r(   r(   r)   r      s
    r   c                   @   s   e Zd Zddddddedejdejf dejeje  deje d	e	d
ejej
e  ddfddZdedejeef fddZdedejdefddZdedededdfddZdejde	fddZdefddZdS )RouteNT)methodsr   include_in_schema
middlewarerW   rS   .r   r   r   r   r   c                C   s  | ds	J d|| _|| _|d u rt|n|| _|| _|}t|tjr.|j	}t|tjs%t
|s8t
|rEt|| _|d u rDdg}n|| _|d urat|D ]\}}	}
||	d| ji|
| _qP|d u rid | _ndd |D | _d| jv r|| jd t|\| _| _| _d S )Nrc    Routed paths must start with '/'GETrK   c                 S   s   h | ]}|  qS r(   )upper).0methodr(   r(   r)   	<setcomp>   s    z!Route.__init__.<locals>.<setcomp>HEAD)rm   rW   rS   rV   r   r   r=   r>   r?   r@   rA   
isfunctionismethodrP   rK   reversedr   rw   r   r   r   rX   )r$   rW   rS   r   r   r   r   endpoint_handlerclsargskwargsr(   r(   r)   r#      s0   


zRoute.__init__rE   c           	      C   s   |d dkrPt |}| j|}|rP| }| D ]\}}| j| |||< qt|di }|	| | j
|d}| jrK|d | jvrKtj|fS tj|fS tji fS )Nr   r   r   rS   r   r   )r   r   r   	groupdictr[   rX   convertdictgetr   rS   r   r3   r7   r8   r6   	r$   rE   
route_pathr   matched_paramsr_   r`   r   r   r(   r(   r)   r      s   



zRoute.matchesr   c                K   ^   t | }t | j }|| jks||krt||t| j| j|\}}|r)J t|ddS )Nr   rW   protocolrn   r!   rX   r   r   rb   r   r   r$   r   r   seen_paramsexpected_paramsrW   remaining_paramsr(   r(   r)   r        

zRoute.url_path_forrF   rG   c                    sv   | j r/|d | j vr/dd| j i}d|v rtd|dtdd|d}||||I d H  d S | |||I d H  d S )Nr   Allowr   rK   i  )r   headerszMethod Not Allowed)r   r   r   r   rK   )r$   rE   rF   rG   r   rI   r(   r(   r)   r     s   zRoute.handleotherc                 C   s.   t |to| j|jko| j|jko| j|jkS rH   )r=   r   rW   rS   r   r$   r   r(   r(   r)   __eq__+  s   



zRoute.__eq__c                 C   s@   | j j}t| jp	g }| j| j}}| d|d|d|dS )N(path=, name=z
, methods=ri   )r'   r*   ry   r   rW   r   )r$   
class_namer   rW   r   r(   r(   r)   __repr__3  s   zRoute.__repr__)r*   r+   r,   r.   r/   Callabler1   OptionalListboolSequencer   r#   r   r   r3   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r      s2    	
)r   c                   @   s   e Zd Zddddedejdejf deje dejeje	  ddf
d	d
Z
dedejeef fddZdedejdefddZdedededdfddZdejdefddZdefddZdS )WebSocketRouteN)r   r   rW   rS   .r   r   r   c          	      C   s   | ds	J d|| _|| _|d u rt|n|| _|}t|tjr+|j}t|tjs"t	
|s5t	|r;t|| _n|| _|d urWt|D ]\}}}||d| ji|| _qFt|\| _| _| _d S )Nrc   r   rK   )rm   rW   rS   rV   r   r=   r>   r?   r@   rA   r   r   rR   rK   r   r   r   r   rX   )	r$   rW   rS   r   r   r   r   r   r   r(   r(   r)   r#   ;  s   zWebSocketRoute.__init__rE   c           	      C   s   |d dkrAt |}| j|}|rA| }| D ]\}}| j| |||< qt|di }|	| | j
|d}tj|fS tji fS )Nr   r   r   r   )r   r   r   r   r[   rX   r   r   r   r   rS   r3   r8   r6   r   r(   r(   r)   r   X  s   


zWebSocketRoute.matchesr   c                K   r   )Nr   r   r   r   r(   r(   r)   r   g  r   zWebSocketRoute.url_path_forrF   rG   c                       |  |||I d H  d S rH   rK   r   r(   r(   r)   r   t     zWebSocketRoute.handler   c                 C   "   t |to| j|jko| j|jkS rH   )r=   r   rW   rS   r   r(   r(   r)   r   w  
   


zWebSocketRoute.__eq__c                 C   s   | j j d| jd| jdS )Nr   r   ri   )r'   r*   rW   r   r$   r(   r(   r)   r   ~  s   zWebSocketRoute.__repr__)r*   r+   r,   r.   r/   r   r1   r   r   r   r#   r   r   r3   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deje dejeje  deje dejeje	  ddfd	d
Z
edeje fddZdedejeef fddZdedejdefddZdedededdfddZdejdefddZdefddZdS )MountNr   rW   rK   routesr   r   r   c          	      C   s   |dks| dsJ d|d us|d usJ d|d| _|d ur'|| _nt|d| _| j| _|d urJt|D ]\}}}||d| ji|| _q9|| _t| jd \| _	| _
| _d S )Nre   rc   r   z0Either 'app=...', or 'routes=' must be specified)r   rK   z/{path:path})rm   rstriprW   	_base_appRouterrK   r   r   r   r   r   rX   )	r$   rW   rK   r   r   r   r   r   r   r(   r(   r)   r#     s    	zMount.__init__c                 C      t | jdg S Nr   )getattrr   r   r(   r(   r)   r        zMount.routesrE   c                 C   s   |d dv r_| dd}t|}| j|}|r_| }| D ]\}}| j| |||< q d|d }|d t	|  }	t
| di }
|
| |
| d|||	 | jd	}tj|fS tji fS )
Nr   r   r   	root_pathre   rc   rW   r   app_root_path)r   r   r   rS   )r   r   r   r   r   r[   rX   r   r^   rz   r   r   rK   r3   r8   r6   )r$   rE   r   r   r   r   r_   r`   remaining_pathmatched_pathr   r   r(   r(   r)   r     s&   



zMount.matchesr   c          
   	   K   s(  | j d ur)|| j kr)d|v r)|d d|d< t| j| j|\}}|s(t|dS nf| j d u s6|| j d r| j d u r>|}n|t| j d d  }|d}d|d< t| j| j|\}}|d urd||d< | j	phg D ]%}z|j
|fi |}	t|dt|	 |	jdW   S  ty   Y qiw t||)NrW   rc   )rW   rf   r4   re   r   )r   rr   rb   r   rX   r   rm   rz   r   r   r   r   r.   r   r   )
r$   r   r   rW   r   remaining_name
path_kwargpath_prefixrouteurlr(   r(   r)   r     s:   





zMount.url_path_forrF   rG   c                    r   rH   r   r   r(   r(   r)   r     r   zMount.handler   c                 C   r   rH   )r=   r   rW   rK   r   r(   r(   r)   r     r   zMount.__eq__c                 C   2   | j j}| jpd}| d| jd|d| jdS )Nre   r   r   , app=ri   )r'   r*   r   rW   rK   r$   r   r   r(   r(   r)   r        
 zMount.__repr__)NNN)r*   r+   r,   r.   r/   r   r   r   r   r   r#   propertyr   r   r   r   r3   r   r1   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r     s4    
!!r   c                	   @   s   e Zd Z	ddededeje ddfddZedej	e
 fdd	Zd
edejeef fddZdedejdefddZd
edededdfddZdejdefddZdefddZdS )HostNhostrK   r   r   c                 C   s<   | dr	J d|| _|| _|| _t|\| _| _| _d S )Nrc   zHost must not start with '/')rm   r   rK   r   r   
host_regexhost_formatrX   )r$   r   rK   r   r(   r(   r)   r#     s
   zHost.__init__c                 C   r   r   )r   rK   r   r(   r(   r)   r     r   zHost.routesrE   c           
      C   s   |d dv rMt |d}|dddd }| j|}|rM| }| D ]\}}| j| |||< q&t	|di }|
| || jd	}	tj|	fS tji fS )
Nr   r   rE   r   re   rf   r   r   )r   rS   )r   r   r|   r   r   r   r[   rX   r   r   r   rK   r3   r8   r6   )
r$   rE   r   r   r   r   r_   r`   r   r   r(   r(   r)   r     s   



zHost.matchesr   c          	   	   K   s   | j d ur&|| j kr&d|v r&|d}t| j| j|\}}|s%t||dS nQ| j d u s3|| j d rw| j d u r;|}n|t| j d d  }t| j| j|\}}| jpTg D ]!}z|j	|fi |}tt
||j|dW   S  tyv   Y qUw t||)NrW   )rW   r   rf   r4   )rW   r   r   )r   r^   rb   r   rX   r   rm   rz   r   r   r.   r   r   )	r$   r   r   rW   r   r   r   r   r   r(   r(   r)   r     s.   




zHost.url_path_forrF   rG   c                    r   rH   r   r   r(   r(   r)   r   ,  r   zHost.handler   c                 C   r   rH   )r=   r   r   rK   r   r(   r(   r)   r   /  r   zHost.__eq__c                 C   r   )Nre   z(host=r   r   ri   )r'   r*   r   r   rK   r   r(   r(   r)   r   6  r   zHost.__repr__rH   )r*   r+   r,   r.   r   r/   r   r#   r   r   r   r   r   r   r3   r   r1   r   r   r   r   r   r   r   r   r(   r(   r(   r)   r     s$    
	r   _Tc                	   @   sh   e Zd Zdeje fddZdefddZdejej	e
  deje
 d	ejej deje fd
dZdS )_AsyncLiftContextManagercmc                 C   
   || _ d S rH   )_cm)r$   r   r(   r(   r)   r#   @     
z!_AsyncLiftContextManager.__init__r   c                    s   | j  S rH   )r   	__enter__r   r(   r(   r)   
__aenter__C  s   
z#_AsyncLiftContextManager.__aenter__exc_type	exc_value	tracebackc                    s   | j |||S rH   )r   __exit__)r$   r   r   r   r(   r(   r)   	__aexit__F  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_contextc                    s6   t |  t dtjdttj f fdd}|S )NrK   r   c                    s   t  | S rH   )r   r   cmgrr(   r)   wrapperV  s   z+_wrap_gen_lifespan_context.<locals>.wrapper)
contextlibcontextmanagerr>   wrapsr/   r1   r   )r  r
  r(   r  r)   _wrap_gen_lifespan_contextO  s   
 r  c                   @   sH   e Zd ZdddZdddZd	eddfd
dZdededefddZdS )_DefaultLifespanrouterr   c                 C   r   rH   )_router)r$   r  r(   r(   r)   r#   ^  r   z_DefaultLifespan.__init__r   Nc                       | j  I d H  d S rH   )r  startupr   r(   r(   r)   r   a     z_DefaultLifespan.__aenter__exc_infoc                    r  rH   )r  shutdown)r$   r  r(   r(   r)   r  d  r  z_DefaultLifespan.__aexit__r$   rK   c                 C   s   | S rH   r(   )r$   rK   r(   r(   r)   r   g  s   z_DefaultLifespan.__call__)r  r   r   N)	r*   r+   r,   r#   r   objectr  r   r   r(   r(   r(   r)   r  ]  s
    

r  c                   @   s  e Zd Z						d<dddejeje  dedeje dejejej	g ej
f   dejejej	g ej
f   d	ejeej
  d
ejeje  ddfddZdedededdfddZdedej
defddZd=ddZd=ddZdedededdfddZdedededdfddZdedededdfdd Zd!ej
defd"d#Z	d>d$ed%edeje ddfd&d'Z	d>d(ed%edeje ddfd)d*Z			d?d$ed+ej	egejeje  e f f d,ejej!e  deje d-eddfd.d/Z"	d>d$ed+ej	e#gejd f deje ddfd0d1Z$			d?d$ed,ejej!e  deje d-edej	f
d2d3Z%	d>d$edeje dej	fd4d5Z&d6ed7ej	g ej
f ddfd8d9Z'd6edej	fd:d;Z(dS )@r   NTr   r   redirect_slashesdefault
on_startupon_shutdownlifespanr   r   c                C   s  |d u rg nt || _|| _|d u r| jn|| _|d u rg nt || _|d u r)g nt || _|s2|r?tdt	 |r?td |d u rIt
| | _n%t|rZtdt	 t|| _nt|rktdt	 t|| _n|| _| j| _|rt|D ]\}}	}
|| jg|	R i |
| _qxd S 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/.zThe `lifespan` parameter cannot be used with `on_startup` or `on_shutdown`. Both `on_startup` and `on_shutdown` will be ignored.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  r:   r;   r<   r  r  rA   isasyncgenfunctionr   isgeneratorfunctionr  rK   middleware_stackr   )r$   r   r  r  r  r  r  r   r   r   r   r(   r(   r)   r#   l  sN   

zRouter.__init__rE   rF   rG   c                    s^   |d dkrt  }||||I d H  d S d|v rtddtddd}||||I d H  d S )Nr   r   rK   r   r   r   )r   r   r   )r$   rE   rF   rG   r   rI   r(   r(   r)   r    s   
zRouter.not_foundr   r   c             	   K   s@   | j D ]}z|j|fi |W   S  ty   Y qw t||rH   )r   r   r   )r$   r   r   r   r(   r(   r)   r     s   

zRouter.url_path_forc                    .   | 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       
zRouter.startupc                    r"  )z8
        Run any `.on_shutdown` event handlers.
        N)r  r   r#  r(   r(   r)   r    r%  zRouter.shutdownc              	      s  d}| d}| I dH  zE| |4 I dH /}|dur,d|vr%td|d | |ddiI dH  d}| I dH  W d  I dH  n1 I dH sMw   Y  W n# tyv   t }|rk|d	|d
I dH   |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.
        FrK   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$   rE   rF   rG   startedrK   maybe_stateexc_textr(   r(   r)   r    s4   
(
zRouter.lifespanc                    s   |  |||I dH  dS )z;
        The main entry point to the Router class.
        N)r!  r   r(   r(   r)   r     s   zRouter.__call__c                    s  |d dv s	J d|vr| |d< |d dkr#|  |||I d H  d S d }| jD ]-}||\}}|tjkrH|| ||||I d H   d S |tjkrU|d u rU|}|}q(|d urk|| ||||I d H  d S t|}	|d dkr| j	r|	dkrt
|}
|	dr|
d d|
d< n|
d d |
d< | jD ]&}||
\}}|tjkrt|
d}tt|d	}||||I d H   d S q| |||I d H  d S )
Nr   )r   r   r  r  r  r   rc   rW   r   )r   )r  r   r   r3   r8   r   r   r7   r   r  r   endswithr   r6   r
   r   r.   r  )r$   rE   rF   rG   r?   r   r   r   partial_scoper   redirect_scoperedirect_urlrI   r(   r(   r)   rK     sJ   







z
Router.appr   c                 C   s   t |to
| j|jkS rH   )r=   r   r   r   r(   r(   r)   r   .  s   zRouter.__eq__rW   rK   c                 C      t |||d}| j| d S N)rK   r   )r   r   append)r$   rW   rK   r   r   r(   r(   r)   mount1     zRouter.mountr   c                 C   r1  r2  )r   r   r3  )r$   r   rK   r   r   r(   r(   r)   r   7  r5  zRouter.hostrS   r   r   c                 C   s"   t |||||d}| j| d S )N)rS   r   r   r   )r   r   r3  )r$   rW   rS   r   r   r   r   r(   r(   r)   	add_route=  s   
zRouter.add_routec                 C   r1  )N)rS   r   )r   r   r3  )r$   rW   rS   r   r   r(   r(   r)   add_websocket_routeP  s   zRouter.add_websocket_routec                    s2   t dt dtjdtjf 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.r@   r   c                    s   j |  d | S )N)r   r   r   )r6  rM   r   r   r   rW   r$   r(   r)   	decoratorm  s   zRouter.route.<locals>.decoratorr:   r;   r<   r/   r   )r$   rW   r   r   r   r9  r(   r8  r)   r   Y  s   "
zRouter.routec                    s.   t dt dtjdtjf 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.r@   r   c                    s   j |  d | S )N)r   )r7  rM   r   rW   r$   r(   r)   r9    s   z)Router.websocket_route.<locals>.decoratorr:  )r$   rW   r   r9  r(   r;  r)   websocket_routey  s   
zRouter.websocket_route
event_typer@   c                 C   s4   |dv sJ |dkr| j | d S | j| d S )N)r  r  r  )r  r3  r  )r$   r=  r@   r(   r(   r)   add_event_handler  s   zRouter.add_event_handlerc                    s,   t dt dtjdtjf 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.r@   r   c                    s     |  | S rH   )r>  rM   r=  r$   r(   r)   r9    s   z"Router.on_event.<locals>.decoratorr:  )r$   r=  r9  r(   r?  r)   on_event  s   zRouter.on_event)NTNNNNr  rH   )NNT))r*   r+   r,   r/   r   r   r   r   r   r   r1   r   r   r#   r   r   r   r  r.   r   r   r  r  r  r   rK   r   r4  r   r   Union	Awaitabler   r   r6  r   r7  r   r<  r>  r@  r(   r(   r(   r)   r   k  s    
B



2

	


!


r   )Mr  r>   rA   rs   r   r  r/   r:   r   enumr   starlette._exception_handlerr   starlette._utilsr   r   starlette.concurrencyr   starlette.convertorsr   r	   starlette.datastructuresr
   r   r   starlette.exceptionsr   starlette.middlewarer   starlette.requestsr   starlette.responsesr   r   r   starlette.typesr   r   r   r   r   starlette.websocketsr   r   	Exceptionr   r3   r1   r   rC   r   rA  rB  rP   rR   r.   rV   r0   r   rb   r}   ro   Patternr   r   r   r   r   r   TypeVarr   AsyncContextManagerr   	Generatorr  r  r   r(   r(   r(   r)   <module>   s    



$
:eHr
H
