
    $ju                       d dl m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
mZmZ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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'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z;  G d de<      Z= G d de      Z>	 	 	 	 d0dZ?	 	 	 	 d1dZ@d2dZA	 	 	 	 	 	 	 	 d3dZB ej                  d      ZD	 	 	 	 d4dZE G d d      ZF G d  d!eF      ZG G d" d#eF      ZH G d$ d%eF      ZI G d& d'eF      ZJ ed(      ZK G d) d*eeK         ZL	 	 	 	 d5d+ZM G d, d-      ZN G d. d/      ZOy)6    )annotationsN)	AwaitableCallable
Collection	GeneratorSequence)AbstractAsyncContextManagerAbstractContextManagerasynccontextmanager)Enum)Pattern)AnyTypeVar)wrap_app_handling_exceptions)get_route_pathis_async_callable)run_in_threadpool)CONVERTOR_TYPES	Convertor)URLHeadersURLPath)HTTPExceptionStarletteDeprecationWarning)
Middleware)RequestBodyLimitMiddleware)Request)PlainTextResponseRedirectResponseResponse)ASGIAppLifespanReceiveScopeSend)	WebSocketWebSocketClosec                  $     e Zd ZdZd fdZ xZS )NoMatchFoundz}
    Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)`
    if no matching route exists.
    c                    dj                  t        |j                                     }t        |   d| d| d       y )N, zNo route exists for name "z" and params "z".)joinlistkeyssuper__init__)selfnamepath_paramsparams	__class__s       U/var/www/oz-panel.ru/ozpay-pub/venv/lib/python3.12/site-packages/starlette/routing.pyr0   zNoMatchFound.__init__$   s=    4 0 0 2345dV>&QSTU    )r2   strr3   zdict[str, Any]returnNone)__name__
__module____qualname____doc__r0   __classcell__)r5   s   @r6   r)   r)      s    
V Vr7   r)   c                      e Zd ZdZdZdZy)Matchr         N)r;   r<   r=   NONEPARTIALFULL r7   r6   rA   rA   )   s    DGDr7   rA   c                b    t        |       r| nt        j                  t        |       dfd}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    c                t   K   t        | ||      dfd} t        |      | ||       d {    y 7 w)Nc                Z   K           d {   } || ||       d {    y 7 7 wNrG   )scopereceivesendresponsefrequests       r6   appz*request_response.<locals>.app.<locals>.app=   s.     wZ'H5'4000 (0s   +'+)++rL   r$   rM   r#   rN   r%   r9   r:   )r   r   )rL   rM   rN   rR   rQ   rP   s       @r6   rR   zrequest_response.<locals>.app:   s8     %$/	1 9*38NNNs   ,868rS   )r   	functoolspartialr   )funcrR   rP   s     @r6   request_responserW   /   s2     "$'Y->->?PRV-W O Jr7   c                     d fd}|S )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    c                v   K   t        | ||      dfd} t        |      | ||       d {    y 7 w)N)rM   rN   c                2   K           d {    y 7 wrK   rG   )rL   rM   rN   rV   sessions      r6   rR   z+websocket_session.<locals>.app.<locals>.appQ   s     w-s   rS   )r&   r   )rL   rM   rN   rR   r[   rV   s       @r6   rR   zwebsocket_session.<locals>.appN   s8     E7>	  9*38NNNs   -979rS   rG   )rV   rR   s   ` r6   websocket_sessionr\   F   s    O Jr7   c                D    t        | d| j                  j                        S )Nr;   )getattrr5   r;   )endpoints    r6   get_namer`   Y   s    8Z););)D)DEEr7   c                    t        |j                               D ]O  \  }}d|z   dz   | v s||   }|j                  |      }| j                  d|z   dz   |      } |j	                  |       Q | |fS )N{})r-   items	to_stringreplacepop)pathparam_convertorsr3   keyvalue	convertors         r6   replace_paramsrm   ]   s    
 ;,,./ !
U9s?d"(-I''.E<<c	C7DOOC ! r7   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                x   | j                  d       }d}d}t               }d}i }t        j                  |       D ]  }|j	                  d      \  }}	|	j                  d      }	|	t        v sJ d|	 d       t        |	   }
|t        j                  | ||j                                z  }|d	| d
|
j                   dz  }|| ||j                          z  }|d|z  z  }||v r|j                  |       |
||<   |j                         } |r@dj                  t        |            }t        |      dkD  rdnd}t!        d| d| d|        |r3| |d j#                  d      d   }|t        j                  |      dz   z  }n|t        j                  | |d       dz   z  }|| |d z  }t        j$                  |      ||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   r8   :zUnknown path convertor ''z(?P<>)z{%s}r+   rB   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)rh   is_host
path_regexpath_formatduplicated_paramsidxri   match
param_nameconvertor_typerl   namesendinghostnames                 r6   compile_pathr   o   s    //#&&GJK"%%
C%%d+ %*\\%%8"
N'..s30^4L^L\\]2^^0#N3	biiS5;;= 9::
ZL)//):!<<
tC%++-00v
**))!!*-'0$iik#& 		&!234-.20%	$PQQ:##C(+bii)C//
biiST
+c11
4:K::j!;0@@@r7   c                  ,    e Zd ZddZddZddZddZy)		BaseRoutec                    t               rK   NotImplementedError)r1   rL   s     r6   matcheszBaseRoute.matches       !##r7   c                   t               rK   r   )r1   r2   r3   s      r6   url_path_forzBaseRoute.url_path_for   r   r7   c                   K   t               wrK   r   r1   rL   rM   rN   s       r6   handlezBaseRoute.handle   s     !##s   c                X  K   | j                  |      \  }}|t        j                  k(  rM|d   dk(  r t        dd      } ||||       d{    y|d   dk(  rt	               } ||||       d{    y|j                  |       | j                  |||       d{    y7 W7 47 	w)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   rA   rD   r   r'   updater   )r1   rL   rM   rN   r   child_scoperO   websocket_closes           r6   __call__zBaseRoute.__call__   s      "\\%0{EJJV}&,[cJugt444  v+-"0"2%eWd;;;[!kk%$/// 5 < 	0s6   A
B*B$$B*1B&2,B*B(B*&B*(B*NrL   r$   r9   ztuple[Match, Scope]r2   r8   r3   r   r9   r   rS   )r;   r<   r=   r   r   r   r   rG   r7   r6   r   r      s    $$$0r7   r   c                  h    e Zd Zdddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZddZddZddZddZdd	Zy)RouteNT)methodsr2   include_in_schema
middlewaremax_body_sizec               *   |j                  d      sJ d       || _        || _        |t        |      n|| _        || _        |}t        |t        j                        r'|j                  }t        |t        j                        r't        j                  |      st        j                  |      rt        |      | _        |dg}n|| _        |/t        |      D ]!  \  }	}
} |	| j                  g|
i || _        # |t!        | j                  |      | _        |d | _        nL|D ch c]  }|j%                          c}| _        d| j"                  v r| j"                  j'                  d       t)        |      \  | _        | _        | _        y c c}w )Nro    Routed paths must start with '/'GETr   HEAD)ry   rh   r_   r`   r2   r   
isinstancerT   rU   rV   inspect
isfunctionismethodrW   rR   reversedr   r   upperr   r   r   r   ri   )r1   rh   r_   r   r2   r   r   r   endpoint_handlerclsargskwargsmethods                r6   r0   zRoute.__init__   sm    s#G%GG#	 *.,HX&D	!2#)9+<+<=/44 )9+<+<=./73C3CDT3U'1DH '  DH!%-j%9 :!T6txx9$9&9:$1$((-XDH?DL9@AvFLLNADL$  (COPTCU@)4+@	 Bs   )Fc                   |d   dk(  rt        |      }| j                  j                  |      }|r|j                         }|j	                         D ]&  \  }}| j
                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       | j                  |d}| j                  r#|d   | j                  vrt        j                  |fS t        j                  |fS t        j                  i fS )Nr   r   r3   r_   r3   r   )r   r   r   	groupdictrd   ri   convertdictgetr   r_   r   rA   rE   rF   rD   	r1   rL   
route_pathr   matched_paramsrj   rk   r3   r   s	            r6   r   zRoute.matches   s    =F"'.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2+/==U<<E(O4<<$G ==+55 ::{22zz2~r7   c               $   t        |j                               }t        | j                  j                               }|| j                  k7  s||k7  rt	        ||      t        | j                  | j                  |      \  }}|rJ t        |d      S )Nr   rh   protocolrz   r.   ri   r2   r)   rm   r   r   r1   r2   r3   seen_paramsexpected_paramsrh   remaining_paramss          r6   r   zRoute.url_path_for  s    +**,-d3388:;499 >t[11!/0@0@$BWBWYd!e###D622r7   c                "  K   | j                   r`|d   | j                   vrOddj                  | j                         i}d|v rt        d|      t        dd|      } ||||       d {    y | j	                  |||       d {    y 7 !7 w)Nr   Allowr+   rR   i  )r   headerszMethod Not Allowed)r   r,   r   r   rR   )r1   rL   rM   rN   r   rO   s         r6   r   zRoute.handle  s     <<E(O4<<?		$,, 78G~#WEE,-As\cd5'4000((5'4000 10s$   A'B)B*BBBBc                    t        |t              xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rK   )r   r   rh   r_   r   r1   others     r6   __eq__zRoute.__eq__  sR    ue$ .		UZZ'./. -		
r7   c                    | j                   j                  }t        | j                  xs g       }| j                  | j
                  }}| d|d|d|dS )N(path=, name=z
, methods=ru   )r5   r;   r   r   rh   r2   )r1   
class_namer   rh   r2   s        r6   __repr__zRoute.__repr__"  sT    ^^,,
+,YY		dVD874(*WKqQQr7   )rh   r8   r_   Callable[..., Any]r   Collection[str] | Noner2   
str | Noner   boolr   Sequence[Middleware] | Noner   
int | Noner9   r:   r   r   rS   r   r   r9   r   r9   r8   	r;   r<   r=   r0   r   r   r   r   r   rG   r7   r6   r   r      s     +/"&26$(*V*V %*V
 (*V *V  *V 0*V "*V 
*VX$	3	1
Rr7   r   c                  V    e Zd Zddd	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZddZddZy)WebSocketRouteN)r2   r   c                   |j                  d      sJ d       || _        || _        |t        |      n|| _        |}t        |t        j                        r'|j                  }t        |t        j                        r't        j                  |      st        j                  |      rt        |      | _        n|| _        |/t        |      D ]!  \  }}} || j                  g|i || _        # t        |      \  | _        | _        | _        y )Nro   r   )ry   rh   r_   r`   r2   r   rT   rU   rV   r   r   r   r\   rR   r   r   r   r   ri   )	r1   rh   r_   r2   r   r   r   r   r   s	            r6   r0   zWebSocketRoute.__init__*  s     s#G%GG#	 *.,HX&D	#)9+<+<=/44 )9+<+<=./73C3CDT3U(2DH  DH!%-j%9 :!T6txx9$9&9: DPPTCU@)4+@r7   c                   |d   dk(  rt        |      }| j                  j                  |      }|r|j                         }|j	                         D ]&  \  }}| j
                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       | j                  |d}t        j                  |fS t        j                  i fS )Nr   r   r3   r   )r   r   r   r   rd   ri   r   r   r   r   r_   rA   rF   rD   r   s	            r6   r   zWebSocketRoute.matchesG  s    =K''.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2+/==Uzz;..zz2~r7   c               $   t        |j                               }t        | j                  j                               }|| j                  k7  s||k7  rt	        ||      t        | j                  | j                  |      \  }}|rJ t        |d      S )Nr   r   r   r   s          r6   r   zWebSocketRoute.url_path_forV  s    +**,-d3388:;499 >t[11!/0@0@$BWBWYd!e###D;77r7   c                F   K   | j                  |||       d {    y 7 wrK   rR   r   s       r6   r   zWebSocketRoute.handlea       hhugt,,,   !!c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rK   )r   r   rh   r_   r   s     r6   r   zWebSocketRoute.__eq__d  s9    %0pTYY%**5LpQUQ^Q^bgbpbpQppr7   c                h    | j                   j                   d| j                  d| j                  dS )Nr   r   ru   )r5   r;   rh   r2   r1   s    r6   r   zWebSocketRoute.__repr__g  s/    ..))*&WTYYMQRSSr7   )
rh   r8   r_   r   r2   r   r   r   r9   r:   r   r   rS   r   r   r   rG   r7   r6   r   r   )  s`      26VV %V
 V 0V 
V:	8-qTr7   r   c                  x    e Zd Z	 	 	 d
ddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       ZddZddZddZddZ	dd	Z
y)MountNr   r   c                  |dk(  s|j                  d      sJ d       |	|J d       |j                  d      | _        ||| _        nt	        |      | _        | j                  | _        |/t        |      D ]!  \  }}}	 || j
                  g|i |	| _        # |t        | j
                  |      | _        || _        t        | j                  dz         \  | _
        | _        | _        y )Nrq   ro   r   z0Either 'app=...', or 'routes=' must be specified)routesr   z/{path:path})ry   rstriprh   	_base_appRouterrR   r   r   r2   r   r   r   ri   )
r1   rh   rR   r   r2   r   r   r   r   r   s
             r6   r0   zMount.__init__l  s     rzT__S1U3UU1&"4h6hh4KK$	?&)DN#62DN>>!%-j%9 :!T6txx9$9&9:$1$((-XDH	COPTPYPY\jPjCk@)4+@r7   c                0    t        | j                  dg       S Nr   )r^   r   r   s    r6   r   zMount.routes  s    t~~x44r7   c                F   |d   dv r|j                  dd      }t        |      }| j                  j                  |      }|r|j	                         }|j                         D ]&  \  }}| j                  |   j                  |      ||<   ( d|j                  d      z   }|d t        |        }	t        |j                  di             }
|
j                  |       |
|j                  d|      ||	z   | j                  d	}t        j                  |fS t        j                  i fS )
Nr   r   r   	root_pathrq   ro   rh   r3   app_root_path)r3   r  r  r_   )r   r   r   r   r   rd   ri   r   rg   r   r   r   rR   rA   rF   rD   )r1   rL   r  r   r   r   rj   rk   remaining_pathmatched_pathr3   r   s               r6   r   zMount.matches  s   =11		+r2I'.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T!$~'9'9&'A!A)*@S-@,@A"599]B#?@"">2#. &+YY	%J!*\!9 $  zz;..zz2~r7   c                  | j                   \|| j                   k(  rMd|v rI|d   j                  d      |d<   t        | j                  | j                  |      \  }}|st        |      S | j                   |j                  | j                   dz         r| j                   |}n|t        | j                         dz   d  }|j                  d      }d|d<   t        | j                  | j                  |      \  }}|||d<   | j                  xs g D ]I  }	  |j                  |fi |}	t        |j                  d      t        |	      z   |	j                        c S  t        ||      # t        $ r Y cw xY w)Nrh   ro   )rh   rr   rB   rq   r   )r2   r~   rm   r   ri   r   ry   r   r   r   r   r   r8   r   r)   )
r1   r2   r3   rh   r   remaining_name
path_kwargpath_prefixrouteurls
             r6   r   zMount.url_path_for  sy   99 TTYY%66[;P"-f"5"<"<S"AK%3D4D4DdF[F[]h%i"D"#D))YY$//$))c/"Byy !% "&c$))nq&8&:!;$0J"$K,:4;K;KTMbMbdo,p)K)%+5 (* ,%,,^P?OPC"(:(:3(?#c((JUXUaUabb 4-- $ s   AE&&	E21E2c                F   K   | j                  |||       d {    y 7 wrK   r   r   s       r6   r   zMount.handle  r   r   c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rK   )r   r   rh   rR   r   s     r6   r   zMount.__eq__  s6    %']DII,C]TYT]T]H]]r7   c                    | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrq   r   r   , app=ru   )r5   r;   r2   rh   rR   r1   r   r2   s      r6   r   zMount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr7   )NNN)rh   r8   rR   ASGIApp | Noner   Sequence[BaseRoute] | Noner2   r   r   r   r   r   r9   r:   r9   zlist[BaseRoute]r   r   rS   r   r   r;   r<   r=   r0   propertyr   r   r   r   r   r   rG   r7   r6   r   r   k  s     #-1l 37$(ll l +	l
 l 0l "l 
l4 5 5B.6-^Tr7   r   c                  P    e Zd Zd	d
dZedd       ZddZddZddZddZ	ddZ
y)HostNc                    |j                  d      rJ d       || _        || _        || _        t	        |      \  | _        | _        | _        y )Nro   zHost must not start with '/')ry   hostrR   r2   r   
host_regexhost_formatri   )r1   r  rR   r2   s       r6   r0   zHost.__init__  sI    ??3'G)GG'		COPTCU@)4+@r7   c                0    t        | j                  dg       S r  )r^   rR   r   s    r6   r   zHost.routes  s    txx2..r7   c                   |d   dv rt        |      }|j                  dd      j                  d      d   }| j                  j	                  |      }|r|j                         }|j                         D ]&  \  }}| j                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       || j                  d	}	t        j                  |	fS t        j                  i fS )
Nr   r  rL   r  rq   rr   r   r3   )r3   r_   )r   r   r   r  r   r   rd   ri   r   r   r   rR   rA   rF   rD   )
r1   rL   r   r  r   r   rj   rk   r3   r   s
             r6   r   zHost.matches  s    =11E*G;;vr*005a8DOO))$/E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2.9txxPzz;..zz2~r7   c                  | j                   W|| j                   k(  rHd|v rD|j                  d      }t        | j                  | j                  |      \  }}|st        ||      S | j                   |j                  | j                   dz         r| j                   |}n|t        | j                         dz   d  }t        | j                  | j                  |      \  }}| j                  xs g D ]8  }	  |j                  |fi |}t        t        |      |j                  |      c S  t        ||      # t        $ r Y Rw xY w)Nrh   )rh   r  rr   rB   )rh   r   r  )r2   rg   rm   r  ri   r   ry   r   r   r   r8   r   r)   )	r1   r2   r3   rh   r  r   r	  r  r  s	            r6   r   zHost.url_path_for  s5   99 TTYY%66[;P??6*D%3D4D4DdF[F[]h%i"D"#Dt44YY$//$))c/"Byy !% "&c$))nq&8&:!;%3D4D4DdF[F[]h%i"D"* ,%,,^P?OPC"C3<<dSS 4-- $ s   03D33	D?>D?c                F   K   | j                  |||       d {    y 7 wrK   r   r   s       r6   r   zHost.handle  r   r   c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rK   )r   r  r  rR   r   s     r6   r   zHost.__eq__  s6    %&\499

+B\txxSXS\S\G\\r7   c                    | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrq   z(host=r   r  ru   )r5   r;   r2   r  rR   r  s      r6   r   zHost.__repr__
  r  r7   rK   r  r8   rR   r!   r2   r   r9   r:   r  r   r   rS   r   r   r  rG   r7   r6   r  r    s7    V / /..-]Tr7   r  _Tc                  4    e Zd ZddZddZ	 	 	 	 	 	 	 	 ddZy)_AsyncLiftContextManagerc                    || _         y rK   )_cm)r1   cms     r6   r0   z!_AsyncLiftContextManager.__init__  s	    r7   c                >   K   | j                   j                         S wrK   )r+  	__enter__r   s    r6   
__aenter__z#_AsyncLiftContextManager.__aenter__  s     xx!!##s   c                D   K   | j                   j                  |||      S wrK   )r+  __exit__)r1   exc_type	exc_value	tracebacks       r6   	__aexit__z"_AsyncLiftContextManager.__aexit__  s!      xx  9i@@s    N)r,  zAbstractContextManager[_T])r9   r'  )r2  ztype[BaseException] | Noner3  zBaseException | Noner4  ztypes.TracebackType | Noner9   zbool | None)r;   r<   r=   r0   r/  r5  rG   r7   r6   r)  r)    s<    $A,A (A .	A
 
Ar7   r)  c                n    t        j                  |       t        j                        dfd       }|S )Nc                &    t         |             S rK   )r)  )rR   cmgrs    r6   wrapperz+_wrap_gen_lifespan_context.<locals>.wrapper(  s    'S	22r7   )rR   r   r9   z_AsyncLiftContextManager[Any])
contextlibcontextmanagerrT   wraps)lifespan_contextr9  r8  s     @r6   _wrap_gen_lifespan_contextr>  #  s8     $$%56D__T3 3 Nr7   c                  ,    e Zd ZddZddZddZd	dZy)
_DefaultLifespanc                    || _         y rK   )_router)r1   routers     r6   r0   z_DefaultLifespan.__init__0  s	    r7   c                   K   y wrK   rG   r   s    r6   r/  z_DefaultLifespan.__aenter__3  	        c                   K   y wrK   rG   )r1   exc_infos     r6   r5  z_DefaultLifespan.__aexit__6  rE  rF  c                    | S rK   rG   )r1   rR   s     r6   r   z_DefaultLifespan.__call__9  s    r7   N)rC  r   )r9   r:   )rH  objectr9   r:   )r1   r'  rR   rJ  r9   r'  )r;   r<   r=   r0   r/  r5  r   rG   r7   r6   r@  r@  /  s    r7   r@  c                      e Zd Z	 	 	 	 dddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZdd	Z	ddd
Z
dddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)r   Nr   c               Z   |g n
t        |      | _        || _        || j                  n|| _        |t        |       | _        nt        j                  |      r+t        j                  dt               t        |      | _        nGt        j                  |      r+t        j                  dt               t        |      | _        n|| _        | j                  | _        |r/t#        |      D ]!  \  }}}	 || j                   g|i |	| _        # |t%        | j                   |      | _        y y )Nzjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadr   )r-   r   redirect_slashes	not_founddefaultr@  r=  r   isasyncgenfunctionwarningswarnr   r   isgeneratorfunctionr>  rR   middleware_stackr   r   )
r1   r   rM  rO  lifespanr   r   r   r   r   s
             r6   r0   zRouter.__init__>  s    #NbV 0)0t~~g3CD3ID!''1MMJ+
 %8$AD!((2MMv+ %?x$HD!$,D! $%-j%9 T!T6(+D,A,A(SD(SF(S%T$$>t?T?Tdq$rD! %r7   c                   K   |d   dk(  rt               } ||||       d {    y d|v rt        d      t        dd      } ||||       d {    y 7 57 w)Nr   r   rR   r   r   r   )r'   r   r   )r1   rL   rM   rN   r   rO   s         r6   rN  zRouter.not_foundh  sl     =K',.O!%$777
 E>C00(#FHugt,,, 8 	-s!    AA/AAAAc                   | j                   D ]  }	  |j                  |fi |c S  t        ||      # t        $ r Y 1w xY wrK   )r   r   r)   )r1   r2   r3   r  s       r6   r   zRouter.url_path_forw  sU    [[ 	E)u))$>+>>	
 4--   s   3	??c                6  K   d}|j                  d      } |        d{    	 | j                  |      4 d{   }|#d|vrt        d      |d   j                  |        |ddi       d{    d} |        d{    ddd      d{     |dd	i       d{    y7 7 q7 <7 -7 # 1 d{  7  sw Y   /xY w7 $# t        $ rA t        j                         }|r |d
|d       d{  7     |d|d       d{  7    w xY ww)z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        FrR   Nstatez:The server does not support "state" in the lifespan scope.r   zlifespan.startup.completeTzlifespan.shutdown.completezlifespan.shutdown.failed)r   messagezlifespan.startup.failed)r   r=  RuntimeErrorr   BaseExceptionr4  
format_exc)r1   rL   rM   rN   startedrR   maybe_stateexc_texts           r6   rU  zRouter.lifespan  s6    
 99U#i	?,,S1    [*e+*+ghh'N))+6F$?@AAAi      <=>>>% 	 
 B         ?  	 ++-H$>8TUUU  $=(STTT	s   DB+DC B-C 3B52B/3B5B1B5C B3C D%C
&D-C /B51B53C 5C;B><CC 
D-D9C<:DDDDc                F   K   | j                  |||       d{    y7 w)z;
        The main entry point to the Router class.
        N)rT  r   s       r6   r   zRouter.__call__  s       ##E7D999r   c                  K   |d   dv sJ d|vr| |d<   |d   dk(  r| j                  |||       d {    y d }| j                  D ]r  }|j                  |      \  }}|t        j                  k(  r.|j                  |       |j                  |||       d {     y |t        j                  k(  sl|o|}|}t |-|j                         |j                  |||       d {    y t        |      }	|d   dk(  r| j                  r|	dk7  rt        |      }
|	j                  d      r|
d   j                  d      |
d<   n|
d   dz   |
d<   | j                  D ]^  }|j                  |
      \  }}|t        j                  k7  s+t        |
      }t        t!        |      	      } ||||       d {     y  | j#                  |||       d {    y 7 7 B7 7 +7 w)
Nr   )r   r   rU  rC  rU  r   ro   rh   r!  )r  )rU  r   r   rA   rF   r   r   rE   r   rM  r   endswithr   rD   r   r   r8   rO  )r1   rL   rM   rN   rU   r  r   r   partial_scoper   redirect_scoperedirect_urlrO   s                r6   rR   z
Router.app  s    V} AAAA5 "E(O=J&--w555[[ 
	,E "'u!5E;

"[)ll5'4888%--'GO +
	,  LL'..666#E*
=F"t'<'<sAR!%[N""3')7)?)F)Fs)Kv&)7)?#)Ev& %*]]>%B"{EJJ&#&^#<L/C4EFH"5'4888 ll5'4000S 6 9 7  9 	1sk   1G#GA$G#GG#3G#6/G#%G&BG#.G#3G4G#G!G#G#G#G#!G#c                X    t        |t              xr | j                  |j                  k(  S rK   )r   r   r   r   s     r6   r   zRouter.__eq__  s!    %(HT[[ELL-HHr7   c                V    t        |||      }| j                  j                  |       y N)rR   r2   )r   r   append)r1   rh   rR   r2   r  s        r6   mountzRouter.mount  s"    d$/5!r7   c                V    t        |||      }| j                  j                  |       y ri  )r  r   rj  )r1   r  rR   r2   r  s        r6   r  zRouter.host  s"    Ts.5!r7   c                Z    t        |||||      }| j                  j                  |       y )N)r_   r   r2   r   )r   r   rj  )r1   rh   r_   r   r2   r   r  s          r6   	add_routezRouter.add_route  s1     /
 	5!r7   c                V    t        |||      }| j                  j                  |       y )N)r_   r2   )r   r   rj  )r1   rh   r_   r2   r  s        r6   add_websocket_routezRouter.add_websocket_route  s$     thTB5!r7   )NTNN)r   r  rM  r   rO  r  rU  zLifespan[Any] | Noner   r   r   r   r9   r:   rS   r   r   rK   )rh   r8   rR   r!   r2   r   r9   r:   r&  )NNT)rh   r8   r_   3Callable[[Request], Awaitable[Response] | Response]r   r   r2   r   r   r   r9   r:   )rh   r8   r_   &Callable[[WebSocket], Awaitable[None]]r2   r   r9   r:   )r;   r<   r=   r0   rN  r   rU  r   rR   r   rk  r  rn  rp  rG   r7   r6   r   r   =  s    .2!%"& *.(s 37$((s*(s (s  	(s '(s 0(s "(s 
(sT-.?6:01dI"" +/"&"" F" (	"
 "  " 
"*  	"" 9" 	"
 
"r7   r   )rV   rq  r9   r!   )rV   rr  r9   r!   )r_   r   r9   r8   )rh   r8   ri   zdict[str, Convertor[Any]]r3   zdict[str, str]r9   ztuple[str, dict[str, str]])rh   r8   r9   z3tuple[Pattern[str], str, dict[str, Convertor[Any]]])r=  z)Callable[[Any], Generator[Any, Any, Any]]r9   z1Callable[[Any], AbstractAsyncContextManager[Any]])P
__future__r   r:  rT   r   r   r4  typesrQ  collections.abcr   r   r   r   r   r	   r
   r   enumr   r   typingr   r   starlette._exception_handlerr   starlette._utilsr   r   starlette.concurrencyr   starlette.convertorsr   r   starlette.datastructuresr   r   r   starlette.exceptionsr   r   starlette.middlewarer   starlette.middleware.body_limitr   starlette.requestsr   starlette.responsesr   r   r    starlette.typesr!   r"   r#   r$   r%   starlette.websocketsr&   r'   	Exceptionr)   rA   rW   r\   r`   rm   r   r{   r   r   r   r   r   r  r'  r)  r>  r@  r   rG   r7   r6   <module>r     s   "    	    P P _ _    E > 3 ; : : K + F & M M C C :V9 VD 
=.
0&F
/    	 bjjOP5A
5A85Ap0 0<aRI aRH?TY ?TDdTI dTN;T9 ;T| T]A:2> A 	?	6	 x" x"r7   