
    Pi6s                       S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
JrJrJrJr  S SKJrJrJr  S SKJr  S SKJr  S SKJrJr  S SKJr  S S	KJrJr  S S
KJr  S SKJ r J!r!  S SK"J#r#J$r$J%r%  S SK&J'r'  S SK(J)r)  S SK*J+r+  S SK,J-r-J.r.J/r/  S SK0J1r1J2r2J3r3J4r4J5r5  S SK6J7r7J8r8   " S S\95      r: " S S\5      r;    S/S jr<    S0S jr=S1S jr>        S2S jr?\R                  " S5      rA    S3S jrB " S S5      rC " S S \C5      rD " S! S"\C5      rE " S# S$\C5      rF " S% S&\C5      rG\" S'5      rH " S( S)\\H   5      rI    S4S* jrJ " S+ S,5      rK " S- S.5      rLg)5    )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)
Middleware)Request)PlainTextResponseRedirectResponseResponse)ASGIAppLifespanReceiveScopeSend)	WebSocketWebSocketClosec                  0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )NoMatchFound   zq
Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)`
if no matching route exists.
c                   > SR                  [        UR                  5       5      5      n[        TU ]  SU SU S35        g )N, zNo route exists for name "z" and params "z".)joinlistkeyssuper__init__)selfnamepath_paramsparams	__class__s       J/root/zsrc/zsrv_dev/venv/lib/python3.13/site-packages/starlette/routing.pyr/   NoMatchFound.__init__#   s=    4 0 0 2345dV>&QSTU     )r1   strr2   zdict[str, Any]returnNone)__name__
__module____qualname____firstlineno____doc__r/   __static_attributes____classcell__)r4   s   @r5   r'   r'      s    
V Vr7   r'   c                       \ rS rSrSrSrSrSrg)Match(   r         r8   N)r<   r=   r>   r?   NONEPARTIALFULLrA   r8   r7   r5   rD   rD   (   s    DGDr7   rD   c                r   ^ [        U 5      (       a  U O[        R                  " [        U 5      mSU4S jjnU$ )z]
Takes a function or coroutine `func(request) -> response`,
and returns an ASGI application.
c                t   >^#    [        XU5      mSUU4S jjn[        UT5      " XU5      I S h  vN   g  N7f)Nc                X   >#    T" T5      I S h  vN nU" XU5      I S h  vN   g  N N7fNr8   )scopereceivesendresponsefrequests       r5   app*request_response.<locals>.app.<locals>.app<   s*     wZ'H54000 (0s   *&*(**rO   r"   rP   r!   rQ   r#   r:   r;   )r   r   )rO   rP   rQ   rU   rT   rS   s       @r5   rU   request_response.<locals>.app9   s5     %$/	1 	1 +38NNNs   ,868rW   )r   	functoolspartialr   )funcrU   rS   s     @r5   request_responser\   .   s5     "$''Y->->?PRV-W O Jr7   c                   ^  SU 4S jjnU$ )zE
Takes a coroutine `func(session)`, and returns an ASGI application.
c                p   >^#    [        XUS9mSUU4S jjn[        UT5      " XU5      I S h  vN   g  N7f)N)rP   rQ   c                2   >#    T" T5      I S h  vN   g  N7frN   r8   )rO   rP   rQ   r[   sessions      r5   rU   +websocket_session.<locals>.app.<locals>.appP   s     w-s   rW   )r$   r   )rO   rP   rQ   rU   r`   r[   s       @r5   rU   websocket_session.<locals>.appM   s5     E>	  	  +38NNNs   *646rW   r8   )r[   rU   s   ` r5   websocket_sessionrc   E   s    O Jr7   c                D    [        U SU R                  R                  5      $ )Nr<   )getattrr4   r<   )endpoints    r5   get_namerg   X   s    8Z););)D)DEEr7   c                    [        UR                  5       5       HQ  u  p4SU-   S-   U ;   d  M  X   nUR                  U5      nU R                  SU-   S-   U5      n UR	                  U5        MS     X4$ )N{})r,   items	to_stringreplacepop)pathparam_convertorsr2   keyvalue	convertors         r5   replace_paramsrt   \   su    
 ;,,./
9s?d"(-I''.E<<c	C7DOOC  0 r7   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                   U R                  S5      (       + nSnSn[        5       nSn0 n[        R                  U 5       H  nUR	                  S5      u  pU	R                  S5      n	U	[        ;   d   SU	 S35       e[        U	   n
U[        R                  " XUR                  5        5      -  nUS	U S
U
R                   S3-  nX0XWR                  5        -  nUSU-  -  nX;   a  UR                  U5        XU'   UR                  5       nM     U(       aA  SR                  [        U5      5      n[        U5      S:  a  SOSn[!        SU SU SU  35      eU(       a3  XS R#                  S5      S   nU[        R                  " U5      S-   -  nOU[        R                  " XS 5      S-   -  nX0US -  n[        R$                  " U5      X64$ )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   r9   :zUnknown path convertor ''z(?P<>)z{%s}r*   rF   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)ro   is_host
path_regexpath_formatduplicated_paramsidxrp   match
param_nameconvertor_typers   namesendinghostnames                 r5   compile_pathr   n   s    //#&&GJK"%%
C%%d+%*\\%%8"
'..s30^4L^L\\]2^^0#N3	bii5;;= 9::
ZL)//):!<<
C++-00v
**)!!*-'0$iik# ,& 		&!234-.20%	$PQQ:##C(+bii)C//
biiT
+c11
:K::j!;@@r7   c                  <    \ rS rSrSS jrS	S jrS
S jrS
S jrSrg)	BaseRoute   c                    [        5       erN   NotImplementedError)r0   rO   s     r5   matchesBaseRoute.matches       !##r7   c                   [        5       erN   r   )r0   r1   r2   s      r5   url_path_forBaseRoute.url_path_for   r   r7   c                   #    [        5       e7frN   r   r0   rO   rP   rQ   s       r5   handleBaseRoute.handle   s     !##s   c                P  #    U R                  U5      u  pEU[        R                  :X  aJ  US   S:X  a  [        SSS9nU" XU5      I Sh  vN   gUS   S:X  a  [	        5       nU" XU5      I Sh  vN   gUR                  U5        U R                  XU5      I Sh  vN   g NV N3 N	7f)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   rD   rH   r   r%   updater   )r0   rO   rP   rQ   r   child_scoperR   websocket_closes           r5   __call__BaseRoute.__call__   s      "\\%0EJJV}&,[cJut444  v+-"0"2%ed;;;[!kk%$/// 5 < 	0s6   AB&	B 
$B&.B"/+B&B$B&"B&$B&r8   NrO   r"   r:   ztuple[Match, Scope]r1   r9   r2   r   r:   r   rW   )	r<   r=   r>   r?   r   r   r   r   rA   r8   r7   r5   r   r      s    $$$0r7   r   c                  x    \ rS rSrSSSSS.             SS jjrSS jrSS jrSS jrSS	 jrSS
 jr	Sr
g)Route   NT)methodsr1   include_in_schema
middlewarec               0   UR                  S5      (       d   S5       eXl        X l        Uc  [        U5      OUU l        XPl        Un[        U[        R                  5      (       a-  UR                  n[        U[        R                  5      (       a  M-  [        R                  " U5      (       d  [        R                  " U5      (       a  [        U5      U l        Uc  S/nOX l        Ub0  [        U5       H!  u  pn
U" U R                  /U	Q70 U
D6U l        M#     Uc  S U l        OPU Vs1 s H  oR#                  5       iM     snU l        SU R                   ;   a  U R                   R%                  S5        ['        U5      u  U l        U l        U l        g s  snf )Nrv    Routed paths must start with '/'GETHEAD)r   ro   rf   rg   r1   r   
isinstancerY   rZ   r[   inspect
isfunctionismethodr\   rU   reversedr   upperr   r   r   r   rp   )r0   ro   rf   r   r1   r   r   endpoint_handlerclsargskwargsmethods               r5   r/   Route.__init__   sZ    s##G%GG#	 *.,HX&D	!2#)9+<+<==/44 )9+<+<==.//73C3CDT3U3U'1DH '  H!%-j%9!6txx9$9&9 &: ?DL9@AvLLNADL$  (COPTCU@)4+@	 Bs   (Fc                *   US   S:X  a  [        U5      nU R                  R                  U5      nU(       a  UR                  5       nUR	                  5        H%  u  pVU R
                  U   R                  U5      XE'   M'     [        UR                  S0 5      5      nUR                  U5        U R                  US.nU R                  (       a%  US   U R                  ;  a  [        R                  U4$ [        R                  U4$ [        R                  0 4$ )Nr   r   r2   rf   r2   r   )r   r   r   	groupdictrk   rp   convertdictgetr   rf   r   rD   rI   rJ   rH   	r0   rO   
route_pathr   matched_paramsrq   rr   r2   r   s	            r5   r   Route.matches   s    =F"'.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN' #9"599]B#?@"">2+/==U<<E(O4<<$G ==+55 ::{22zz2~r7   c               $   [        UR                  5       5      n[        U R                  R                  5       5      nXR                  :w  d  X4:w  a  [	        X5      e[        U R                  U R                  U5      u  pVU(       a   e[        USS9$ )Nr   ro   protocolr   r-   rp   r1   r'   rt   r   r   r0   r1   r2   seen_paramsexpected_paramsro   remaining_paramss          r5   r   Route.url_path_for   s|    +**,-d3388:;99 >t11!/0@0@$BWBWYd!e###D622r7   c                $  #    U R                   (       a]  US   U R                   ;  aJ  SSR                  U R                   5      0nSU;   a
  [        SUS9e[        SSUS9nU" XU5      I S h  vN   g U R	                  XU5      I S h  vN   g  N  N7f)Nr   Allowr*   rU   i  )r   headerszMethod Not Allowed)r   r+   r   r   rU   )r0   rO   rP   rQ   r   rR   s         r5   r   Route.handle  s     <<E(O4<<?		$,, 78G~#WEE,-As\cd54000((54000 10s$   A)B+B,BBBBc                    [        U[        5      =(       aY    U R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rN   )r   r   ro   rf   r   r0   others     r5   __eq__Route.__eq__  sR    ue$ .		UZZ'./. -		
r7   c                    U R                   R                  n[        U R                  =(       d    / 5      nU R                  U R
                  pCU SU< SU< SU< S3$ )N(path=, name=z
, methods=r|   )r4   r<   r   r   ro   r1   )r0   
class_namer   ro   r1   s        r5   __repr__Route.__repr__  sR    ^^,,
+,YY		dVD874(*WKqQQr7   )	rU   rf   r   r   r1   rp   ro   r   r   )ro   r9   rf   Callable[..., Any]r   Collection[str] | Noner1   
str | Noner   boolr   Sequence[Middleware] | Noner:   r;   r   r   rW   r   r   r:   r   r:   r9   r<   r=   r>   r?   r/   r   r   r   r   r   rA   r8   r7   r5   r   r      s|     +/"&26'V'V %'V
 ('V 'V  'V 0'V 
'VR$	3	1
Rr7   r   c                  l    \ rS rSrSSS.         SS jjrSS jrSS jrSS jrSS jrSS	 jr	S
r
g)WebSocketRoutei%  N)r1   r   c               X   UR                  S5      (       d   S5       eXl        X l        Uc  [        U5      OUU l        Un[        U[        R                  5      (       a-  UR                  n[        U[        R                  5      (       a  M-  [        R                  " U5      (       d  [        R                  " U5      (       a  [        U5      U l        OX l        Ub0  [        U5       H!  u  pgnU" U R                  /UQ70 UD6U l        M#     [        U5      u  U l        U l        U l        g )Nrv   r   )r   ro   rf   rg   r1   r   rY   rZ   r[   r   r   r   rc   rU   r   r   r   r   rp   )	r0   ro   rf   r1   r   r   r   r   r   s	            r5   r/   WebSocketRoute.__init__&  s     s##G%GG#	 *.,HX&D	#)9+<+<==/44 )9+<+<==.//73C3CDT3U3U(2DH  H!%-j%9!6txx9$9&9 &: DPPTCU@)4+@r7   c                   US   S:X  a  [        U5      nU R                  R                  U5      nU(       a  UR                  5       nUR	                  5        H%  u  pVU R
                  U   R                  U5      XE'   M'     [        UR                  S0 5      5      nUR                  U5        U R                  US.n[        R                  U4$ [        R                  0 4$ )Nr   r   r2   r   )r   r   r   r   rk   rp   r   r   r   r   rf   rD   rJ   rH   r   s	            r5   r   WebSocketRoute.matchesC  s    =K''.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN' #9"599]B#?@"">2+/==Uzz;..zz2~r7   c               $   [        UR                  5       5      n[        U R                  R                  5       5      nXR                  :w  d  X4:w  a  [	        X5      e[        U R                  U R                  U5      u  pVU(       a   e[        USS9$ )Nr   r   r   r   s          r5   r   WebSocketRoute.url_path_forR  s|    +**,-d3388:;99 >t11!/0@0@$BWBWYd!e###D;77r7   c                D   #    U R                  XU5      I S h  vN   g  N7frN   rU   r   s       r5   r   WebSocketRoute.handle]       hhut,,,     c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rN   )r   r   ro   rf   r   s     r5   r   WebSocketRoute.__eq__`  s9    %0pTYY%**5LpQUQ^Q^bgbpbpQppr7   c                l    U R                   R                   SU R                  < SU R                  < S3$ )Nr   r   r|   )r4   r<   ro   r1   r0   s    r5   r   WebSocketRoute.__repr__c  s/    ..))*&WTYYMQRSSr7   )rU   rf   r1   rp   ro   r   r   )
ro   r9   rf   r   r1   r   r   r   r:   r;   r   r   rW   r   r   r   r8   r7   r5   r   r   %  s`      26VV %V
 V 0V 
V:	8-qTr7   r   c                      \ rS rSr   SSS.           SS jjjr\SS j5       rSS jrSS jrSS jr	SS	 jr
SS
 jrSrg)Mountig  Nr   c                  US:X  d  UR                  S5      (       d   S5       eUc
  Uc   S5       eUR                  S5      U l        Ub  X l        O[	        US9U l        U R                  U l        Ub0  [        U5       H!  u  pgnU" U R
                  /UQ70 UD6U l        M#     X@l        [        U R                  S-   5      u  U l	        U l
        U l        g )Nrx   rv   r   z0Either 'app=...', or 'routes=' must be specified)routesz/{path:path})r   rstripro   	_base_appRouterrU   r   r1   r   r   r   rp   )	r0   ro   rU   r  r1   r   r   r   r   s	            r5   r/   Mount.__init__h  s     rzT__S11U3UU1&"4h6hh4KK$	?&)N#62DN>>!%-j%9!6txx9$9&9 &:	COPTPYPY\jPjCk@)4+@r7   c                0    [        U R                  S/ 5      $ Nr  )re   r  r  s    r5   r  Mount.routes  s    t~~x44r7   c                R   US   S;   Ga  UR                  SS5      n[        U5      nU R                  R                  U5      nU(       a  UR	                  5       nUR                  5        H%  u  pgU R                  U   R                  U5      XV'   M'     SUR                  S5      -   nUS [        U5      *  n	[        UR                  S0 5      5      n
U
R                  U5        U
UR                  SU5      X)-   U R                  S	.n[        R                  U4$ [        R                  0 4$ )
Nr   r   r   	root_pathrx   rv   ro   r2   app_root_path)r2   r  r  rf   )r   r   r   r   r   rk   rp   r   rn   r   r   r   rU   rD   rJ   rH   )r0   rO   r  r   r   r   rq   rr   remaining_pathmatched_pathr2   r   s               r5   r   Mount.matches  s   =11		+r2I'.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN' #9!$~'9'9&'A!A)*@S-@,@A"599]B#?@"">2#. &+YY	%J!*!9 $  zz;..zz2~r7   c                  U R                   b`  XR                   :X  aQ  SU;   aK  US   R                  S5      US'   [        U R                  U R                  U5      u  p4U(       d	  [        US9$ OU R                   b#  UR                  U R                   S-   5      (       a  U R                   c  UnOU[        U R                   5      S-   S  nUR                  S5      nSUS'   [        U R                  U R                  U5      u  ptUb  XdS'   U R                  =(       d    /  HF  n UR                  " U40 UD6n	[        UR                  S5      [        U	5      -   U	R                  S9s  $    [        X5      e! [         a     Mb  f = f)Nro   rv   )ro   ry   rF   rx   r   )r1   r   rt   r   rp   r   r   r   r   r  r   r  r9   r   r'   )
r0   r1   r2   ro   r   remaining_name
path_kwargpath_prefixrouteurls
             r5   r   Mount.url_path_for  sp   99 TYY%66[;P"-f"5"<"<S"AK%3D4D4DdF[F[]h%i"D#D)) $YY$//$))c/"B"Byy !% "&c$))nq&8&:!;$0J"$K,:4;K;KTMbMbdo,p)K%+5(**,,^P?OPC"(:(:3(?#c((JUXUaUabb + 4-- $ s   "AE33
F Fc                D   #    U R                  XU5      I S h  vN   g  N7frN   r  r   s       r5   r   Mount.handle  r  r  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rN   )r   r  ro   rU   r   s     r5   r   Mount.__eq__  s6    %']DII,C]TYT]T]H]]r7   c                    U R                   R                  nU R                  =(       d    SnU SU R                  < SU< SU R                  < S3$ )Nrx   r   r   , app=r|   )r4   r<   r1   ro   rU   r0   r   r1   s      r5   r   Mount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr7   )r  rU   r1   rp   ro   r   r   )NNN)ro   r9   rU   ASGIApp | Noner  Sequence[BaseRoute] | Noner1   r   r   r   r:   r;   r:   zlist[BaseRoute]r   r   rW   r   r   r<   r=   r>   r?   r/   propertyr  r   r   r   r   r   rA   r8   r7   r5   r  r  g  s     #-1l 37ll l +	l
 l 0l 
l. 5 5B.6-^Tr7   r  c                  h    \ rS rSrSSS jjr\SS j5       rSS jrSS jrSS jr	SS jr
SS	 jrS
rg)Hosti  Nc                    UR                  S5      (       a   S5       eXl        X l        X0l        [	        U5      u  U l        U l        U l        g )Nrv   zHost must not start with '/')r   hostrU   r1   r   
host_regexhost_formatrp   )r0   r9  rU   r1   s       r5   r/   Host.__init__  sF    ??3''G)GG'		COPTCU@)4+@r7   c                0    [        U R                  S/ 5      $ r  )re   rU   r  s    r5   r  Host.routes  s    txx2..r7   c                    US   S;   a  [        US9nUR                  SS5      R                  S5      S   nU R                  R	                  U5      nU(       a  UR                  5       nUR                  5        H%  u  pgU R                  U   R                  U5      XV'   M'     [        UR                  S0 5      5      nUR                  U5        XR                  S	.n	[        R                  U	4$ [        R                  0 4$ )
Nr   r  rO   r9  rx   ry   r   r2   )r2   rf   )r   r   r   r:  r   r   rk   rp   r   r   r   rU   rD   rJ   rH   )
r0   rO   r   r9  r   r   rq   rr   r2   r   s
             r5   r   Host.matches  s    =11E*G;;vr*005a8DOO))$/E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN' #9"599]B#?@"">2.9xxPzz;..zz2~r7   c                  U R                   bZ  XR                   :X  aK  SU;   aE  UR                  S5      n[        U R                  U R                  U5      u  pEU(       d	  [        X4S9$ OU R                   b#  UR                  U R                   S-   5      (       a  U R                   c  UnOU[        U R                   5      S-   S  n[        U R                  U R                  U5      u  pEU R                  =(       d    /  H5  n UR                  " U40 UD6n[        [        U5      UR                  US9s  $    [        X5      e! [         a     MQ  f = f)Nro   )ro   r9  ry   rF   )ro   r   r9  )r1   rn   rt   r;  rp   r   r   r   r  r   r9   r   r'   )	r0   r1   r2   ro   r9  r   r"  r%  r&  s	            r5   r   Host.url_path_for  s-   99 TYY%66[;P??6*D%3D4D4DdF[F[]h%i"D#D44 $YY$//$))c/"B"Byy !% "&c$))nq&8&:!;%3D4D4DdF[F[]h%i"D**,,^P?OPC"C3<<dSS + 4-- $ s   ?0D??
EEc                D   #    U R                  XU5      I S h  vN   g  N7frN   r  r   s       r5   r   Host.handle  r  r  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rN   )r   r7  r9  rU   r   s     r5   r   Host.__eq__   s6    %&\499

+B\txxSXS\S\G\\r7   c                    U R                   R                  nU R                  =(       d    SnU SU R                  < SU< SU R                  < S3$ )Nrx   z(host=r   r-  r|   )r4   r<   r1   r9  rU   r.  s      r5   r   Host.__repr__  r0  r7   )rU   r9  r;  r:  r1   rp   rN   r9  r9   rU   r   r1   r   r:   r;   r3  r   r   rW   r   r   r4  r8   r7   r5   r7  r7    s7    V / /..-]Tr7   r7  _Tc                  B    \ rS rSrSS jrSS jr        S	S jrSrg)
_AsyncLiftContextManageri  c                    Xl         g rN   _cm)r0   cms     r5   r/   !_AsyncLiftContextManager.__init__  s    r7   c                >   #    U R                   R                  5       $ 7frN   )rP  	__enter__r  s    r5   
__aenter__#_AsyncLiftContextManager.__aenter__  s     xx!!##s   c                B   #    U R                   R                  XU5      $ 7frN   )rP  __exit__)r0   exc_type	exc_value	tracebacks       r5   	__aexit__"_AsyncLiftContextManager.__aexit__  s      xx  i@@s   rO  N)rQ  zAbstractContextManager[_T])r:   rK  )rY  ztype[BaseException] | NonerZ  zBaseException | Noner[  ztypes.TracebackType | Noner:   zbool | None)r<   r=   r>   r?   r/   rU  r\  rA   r8   r7   r5   rM  rM    s<    $A,A (A .	A
 
Ar7   rM  c                v   ^ [         R                  " U 5      m[        R                  " T5      SU4S jj5       nU$ )Nc                &   > [        T" U 5      5      $ rN   )rM  )rU   cmgrs    r5   wrapper+_wrap_gen_lifespan_context.<locals>.wrapper!  s    'S	22r7   )rU   r   r:   z_AsyncLiftContextManager[Any])
contextlibcontextmanagerrY   wraps)lifespan_contextra  r`  s     @r5   _wrap_gen_lifespan_contextrg    s8     $$%56D__T3 3 Nr7   c                  <    \ rS rSrSS jrS	S jrS
S jrSS jrSrg)_DefaultLifespani(  c                    Xl         g rN   _router)r0   routers     r5   r/   _DefaultLifespan.__init__)  s    r7   c                   #    g 7frN   r8   r  s    r5   rU  _DefaultLifespan.__aenter__,          c                   #    g 7frN   r8   )r0   exc_infos     r5   r\  _DefaultLifespan.__aexit__/  rq  rr  c                    U $ rN   r8   )r0   rU   s     r5   r   _DefaultLifespan.__call__2  s    r7   rk  N)rm  r  )r:   r;   )rt  objectr:   r;   )r0   rK  rU   rx  r:   rK  )	r<   r=   r>   r?   r/   rU  r\  r   rA   r8   r7   r5   ri  ri  (  s    r7   ri  c                      \ rS rSr    SSS.           SS jjjrSS jrSS jrSS jrSS jrSS	 jr	SS
 jr
SSS jjrSSS jjr   S           SS jjr S       SS jjrSrg)r  i6  Nr  c               H   Uc  / O
[        U5      U l        X l        Uc  U R                  OUU l        Uc  [        U 5      U l        O[        R                  " U5      (       a,  [        R                  " S[        5        [        U5      U l        OM[        R                  " U5      (       a,  [        R                  " S[        5        [        U5      U l        OX@l        U R                  U l        U(       a1  [#        U5       H!  u  pgnU" U R                   /UQ70 UD6U l        M#     g g )Nzjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead)r,   r  redirect_slashes	not_founddefaultri  rf  r   isasyncgenfunctionwarningswarnDeprecationWarningr   isgeneratorfunctionrg  rU   middleware_stackr   )	r0   r  r{  r}  lifespanr   r   r   r   s	            r5   r/   Router.__init__7  s     #NbV 0)0t~~g3CD3ID!''11MMJ"
 %8$AD!((22MMv" %?x$HD!$,! $%-j%9!6(+D,A,A(SD(SF(S% &: r7   c                   #    US   S:X  a  [        5       nU" XU5      I S h  vN   g SU;   a	  [        SS9e[        SSS9nU" XU5      I S h  vN   g  N0 N7f)Nr   r   rU   r   r   r   )r%   r   r   )r0   rO   rP   rQ   r   rR   s         r5   r|  Router.not_found^  sf     =K',.O!%$777
 E>C00(#FHut,,, 8 	-s!    AA*AAAAc                   U R                    H  n UR                  " U40 UD6s  $    [        X5      e! [         a     M3  f = frN   )r  r   r'   )r0   r1   r2   r%  s       r5   r   Router.url_path_form  sL    [[E))$>+>> !
 4--   s   3
A Ac                T  #    SnUR                  S5      nU" 5       I Sh  vN    U R                  U5       ISh  vN nUb%  SU;  a  [        S5      eUS   R                  U5        U" SS05      I Sh  vN   SnU" 5       I Sh  vN   SSS5      ISh  vN   U" SS	05      I Sh  vN   g N Nt N< N- N! , ISh  vN  (       d  f       N4= f N)! [         aG    [
        R                  " 5       nU(       a  U" S
US.5      I Sh  vN    e U" SUS.5      I Sh  vN    e f = f7f)zc
Handle ASGI lifespan messages, which allows us to manage application
startup and shutdown events.
FrU   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   rf  RuntimeErrorr   BaseExceptionr[  
format_exc)r0   rO   rP   rQ   startedrU   maybe_stateexc_texts           r5   r  Router.lifespanu  s    
 99U#i	?,,S11[*e+*+ghh'N))+6F$?@AAAi 21   <=>>>% 	1
 B 2111  ?  	 ++-H$>8TUUU  $=(STTT	s   D(B.D(C B0C 6B85B26B8B4B8C B6C D((C)D(0C 2B84B86C 8C>C?CC D(4D%D	D%D D%%D(c                D   #    U R                  XU5      I Sh  vN   g N7f)z+
The main entry point to the Router class.
N)r  r   s       r5   r   Router.__call__  s      ##ED999r  c                  #    US   S;   d   eSU;  a  XS'   US   S:X  a  U R                  XU5      I S h  vN   g S nU R                   Hv  nUR                  U5      u  pgU[        R                  :X  a-  UR                  U5        UR                  XU5      I S h  vN     g U[        R                  :X  d  Mm  Ub  Mr  UnUnMx     Ub,  UR                  W5        UR                  XU5      I S h  vN   g [        U5      n	US   S:X  a  U R                  (       a  U	S:w  a  [        U5      n
U	R                  S5      (       a  U
S   R                  S5      U
S'   OU
S   S-   U
S'   U R                   HX  nUR                  U
5      u  pgU[        R                  :w  d  M,  [        U
S9n[        [!        U5      S	9nU" XU5      I S h  vN     g    U R#                  XU5      I S h  vN   g  GN GNN N N+ N7f)
Nr   )r   r   r  rm  r  r   rv   ro   r@  )r&  )r  r  r   rD   rJ   r   r   rI   r   r{  r   endswithr  rH   r   r   r9   r}  )r0   rO   rP   rQ   rZ   r%  r   r   partial_scoper   redirect_scoperedirect_urlrR   s                r5   rU   
Router.app  s    V} AAAA5 "(O=J&--555[[E "'u!5E

"[)ll54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"54888 % ll54000S 6 9 7  9 	1sk   4G1G%A#G1G(G17G1<1G1-G+.B(G1'G1G-G1G/ G1(G1+G1-G1/G1c                b    [        U[        5      =(       a    U R                  UR                  :H  $ rN   )r   r  r  r   s     r5   r   Router.__eq__  s!    %(HT[[ELL-HHr7   c                N    [        XUS9nU R                  R                  U5        g N)rU   r1   )r  r  append)r0   ro   rU   r1   r%  s        r5   mountRouter.mount  s     d$/5!r7   c                N    [        XUS9nU R                  R                  U5        g r  )r7  r  r  )r0   r9  rU   r1   r%  s        r5   r9  Router.host  s     T.5!r7   c                T    [        UUUUUS9nU R                  R                  U5        g )N)rf   r   r1   r   )r   r  r  )r0   ro   rf   r   r1   r   r%  s          r5   	add_routeRouter.add_route  s1     /
 	5!r7   c                N    [        XUS9nU R                  R                  U5        g )N)rf   r1   )r   r  r  )r0   ro   rf   r1   r%  s        r5   add_websocket_routeRouter.add_websocket_route  s"     tTB5!r7   )r}  rf  r  r{  r  )NTNN)r  r2  r{  r   r}  r1  r  zLifespan[Any] | Noner   r   r:   r;   rW   r   r   rN   )ro   r9   rU   r   r1   r   r:   r;   rJ  )NNT)ro   r9   rf   3Callable[[Request], Awaitable[Response] | Response]r   r   r1   r   r   r   r:   r;   )ro   r9   rf   &Callable[[WebSocket], Awaitable[None]]r1   r   r:   r;   )r<   r=   r>   r?   r/   r|  r   r  r   rU   r   r  r9  r  r  rA   r8   r7   r5   r  r  6  s    .2!%"& *.%T 37%T*%T %T  	%T '%T 0%T 
%TN-.?6:01dI"" +/"&"" F" (	"
 "  " 
"*  	"" 9" 	"
 
" "r7   r  )r[   r  r:   r   )r[   r  r:   r   )rf   r   r:   r9   )ro   r9   rp   zdict[str, Convertor[Any]]r2   zdict[str, str]r:   ztuple[str, dict[str, str]])ro   r9   r:   z3tuple[Pattern[str], str, dict[str, Convertor[Any]]])rf  z)Callable[[Any], Generator[Any, Any, Any]]r:   z1Callable[[Any], AbstractAsyncContextManager[Any]])M
__future__r   rc  rY   r   r   r[  typesr  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   starlette.middlewarer   starlette.requestsr   starlette.responsesr   r   r   starlette.typesr   r    r!   r"   r#   starlette.websocketsr$   r%   	Exceptionr'   rD   r\   rc   rg   rt   r   r   r   r   r   r   r  r7  rK  rM  rg  ri  r  r8   r7   r5   <module>r     s   "    	    P P _ _    E > 3 ; : : . + & M M C C :V9 VD 
=.
0&F
/    	 jjOP5A
5A85Ap0 0<^RI ^RB?TY ?TDaTI aTH;T9 ;T| T]A:2> A 	?	6	 u" u"r7   