
    Cjs                       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'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.J/r/J0r0  S SK1J2r2J3r3J4r4J5r5J6r6  S SK7J8r8J9r9   " S S\:5      r; " S S\5      r<    S/S jr=    S0S jr>S1S jr?        S2S jr@\R                  " S5      rB    S3S jrC " S S5      rD " S S \D5      rE " S! S"\D5      rF " S# S$\D5      rG " S% S&\D5      rH\" S'5      rI " S( S)\\I   5      rJ    S4S* jrK " S+ S,5      rL " S- S.5      rMg)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StarletteDeprecationWarning)
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       c/home/rurouni/.local/share/pipx/venvs/strix-agent/lib/python3.13/site-packages/starlette/routing.pyr0   NoMatchFound.__init__#   s=    4 0 0 2345dV>&QSTU     )r2   strr3   zdict[str, Any]returnNone)__name__
__module____qualname____firstlineno____doc__r0   __static_attributes____classcell__)r5   s   @r6   r(   r(      s    
V Vr8   r(   c                       \ rS rSrSrSrSrSrg)Match(   r         r9   N)r=   r>   r?   r@   NONEPARTIALFULLrB   r9   r8   r6   rE   rE   (   s    DGDr8   rE   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Nr9   )scopereceivesendresponsefrequests       r6   app*request_response.<locals>.app.<locals>.app<   s*     wZ'H54000 (0s   *&*(**rP   r#   rQ   r"   rR   r$   r;   r<   )r   r   )rP   rQ   rR   rV   rU   rT   s       @r6   rV   request_response.<locals>.app9   s5     %$/	1 	1 +38NNNs   ,868rX   )r   	functoolspartialr   )funcrV   rT   s     @r6   request_responser]   .   s5     "$''Y->->?PRV-W O Jr8   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)rQ   rR   c                2   >#    T" T5      I S h  vN   g  N7frO   r9   )rP   rQ   rR   r\   sessions      r6   rV   +websocket_session.<locals>.app.<locals>.appP   s     w-s   rX   )r%   r   )rP   rQ   rR   rV   ra   r\   s       @r6   rV   websocket_session.<locals>.appM   s5     E>	  	  +38NNNs   *646rX   r9   )r\   rV   s   ` r6   websocket_sessionrd   E   s    O Jr8   c                D    [        U SU R                  R                  5      $ )Nr=   )getattrr5   r=   )endpoints    r6   get_namerh   X   s    8Z););)D)DEEr8   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_convertorsr3   keyvalue	convertors         r6   replace_paramsru   \   su    
 ;,,./
9s?d"(-I''.E<<c	C7DOOC  0 r8   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   r:   :zUnknown path convertor ''z(?P<>)z{%s}r+   rG   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)rp   is_host
path_regexpath_formatduplicated_paramsidxrq   match
param_nameconvertor_typert   namesendinghostnames                 r6   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!;@@r8   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rO   NotImplementedError)r1   rP   s     r6   matchesBaseRoute.matches       !##r8   c                   [        5       erO   r   )r1   r2   r3   s      r6   url_path_forBaseRoute.url_path_for   r   r8   c                   #    [        5       e7frO   r   r1   rP   rQ   rR   s       r6   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   rE   rI   r   r&   updater   )r1   rP   rQ   rR   r   child_scoperS   websocket_closes           r6   __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&r9   NrP   r#   r;   ztuple[Match, Scope]r2   r:   r3   r   r;   r   rX   )	r=   r>   r?   r@   r   r   r   r   rB   r9   r8   r6   r   r      s    $$$0r8   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)methodsr2   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 )Nrw    Routed paths must start with '/'GETHEAD)r   rp   rg   rh   r2   r   
isinstancerZ   r[   r\   inspect
isfunctionismethodr]   rV   reversedr   upperr   r   r   r   rq   )r1   rp   rg   r   r2   r   r   endpoint_handlerclsargskwargsmethods               r6   r0   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   r3   rg   r3   r   )r   r   r   	groupdictrl   rq   convertdictgetr   rg   r   rE   rJ   rK   rI   	r1   rP   
route_pathr   matched_paramsrr   rs   r3   r   s	            r6   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~r8   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   rp   protocolr   r.   rq   r2   r(   ru   r   r   r1   r2   r3   seen_paramsexpected_paramsrp   remaining_paramss          r6   r   Route.url_path_for   s|    +**,-d3388:;99 >t11!/0@0@$BWBWYd!e###D622r8   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+   rV   i  )r   headerszMethod Not Allowed)r   r,   r   r   rV   )r1   rP   rQ   rR   r   rS   s         r6   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  $ rO   )r   r   rp   rg   r   r1   others     r6   __eq__Route.__eq__  sR    ue$ .		UZZ'./. -		
r8   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}   )r5   r=   r   r   rp   r2   )r1   
class_namer   rp   r2   s        r6   __repr__Route.__repr__  sR    ^^,,
+,YY		dVD874(*WKqQQr8   )	rV   rg   r   r   r2   rq   rp   r   r   )rp   r:   rg   Callable[..., Any]r   Collection[str] | Noner2   
str | Noner   boolr   Sequence[Middleware] | Noner;   r<   r   r   rX   r   r   r;   r   r;   r:   r=   r>   r?   r@   r0   r   r   r   r   r   rB   r9   r8   r6   r   r      s|     +/"&26'V'V %'V
 ('V 'V  'V 0'V 
'VR$	3	1
Rr8   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)r2   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 )Nrw   r   )r   rp   rg   rh   r2   r   rZ   r[   r\   r   r   r   rd   rV   r   r   r   r   rq   )	r1   rp   rg   r2   r   r   r   r   r   s	            r6   r0   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+@r8   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   r3   r   )r   r   r   r   rl   rq   r   r   r   r   rg   rE   rK   rI   r   s	            r6   r   WebSocketRoute.matchesC  s    =K''.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN' #9"599]B#?@"">2+/==Uzz;..zz2~r8   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          r6   r   WebSocketRoute.url_path_forR  s|    +**,-d3388:;99 >t11!/0@0@$BWBWYd!e###D;77r8   c                D   #    U R                  XU5      I S h  vN   g  N7frO   rV   r   s       r6   r   WebSocketRoute.handle]       hhut,,,     c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rO   )r   r   rp   rg   r   s     r6   r   WebSocketRoute.__eq__`  s9    %0pTYY%**5LpQUQ^Q^bgbpbpQppr8   c                l    U R                   R                   SU R                  < SU R                  < S3$ )Nr   r   r}   )r5   r=   rp   r2   r1   s    r6   r   WebSocketRoute.__repr__c  s/    ..))*&WTYYMQRSSr8   )rV   rg   r2   rq   rp   r   r   )
rp   r:   rg   r   r2   r   r   r   r;   r<   r   r   rX   r   r   r   r9   r8   r6   r   r   %  s`      26VV %V
 V 0V 
V:	8-qTr8   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 )Nry   rw   r   z0Either 'app=...', or 'routes=' must be specified)routesz/{path:path})r   rstriprp   	_base_appRouterrV   r   r2   r   r   r   rq   )	r1   rp   rV   r  r2   r   r   r   r   s	            r6   r0   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+@r8   c                0    [        U R                  S/ 5      $ Nr  )rf   r  r  s    r6   r  Mount.routes  s    t~~x44r8   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_pathry   rw   rp   r3   app_root_path)r3   r  r  rg   )r   r   r   r   r   rl   rq   r   ro   r   r   r   rV   rE   rK   rI   )r1   rP   r  r   r   r   rr   rs   remaining_pathmatched_pathr3   r   s               r6   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~r8   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)Nrp   rw   )rp   rz   rG   ry   r   )r2   r   ru   r   rq   r   r   r   r   r  r   r  r:   r   r(   )
r1   r2   r3   rp   r   remaining_name
path_kwargpath_prefixrouteurls
             r6   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rO   r  r   s       r6   r   Mount.handle  r  r	  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rO   )r   r  rp   rV   r   s     r6   r   Mount.__eq__  s6    %']DII,C]TYT]T]H]]r8   c                    U R                   R                  nU R                  =(       d    SnU SU R                  < SU< SU R                  < S3$ )Nry   r   r   , app=r}   )r5   r=   r2   rp   rV   r1   r   r2   s      r6   r   Mount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr8   )r  rV   r2   rq   rp   r   r   )NNN)rp   r:   rV   ASGIApp | Noner  Sequence[BaseRoute] | Noner2   r   r   r   r;   r<   r;   zlist[BaseRoute]r   r   rX   r   r   r=   r>   r?   r@   r0   propertyr  r   r   r   r   r   rB   r9   r8   r6   r  r  g  s     #-1l 37ll l +	l
 l 0l 
l. 5 5B.6-^Tr8   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 )Nrw   zHost must not start with '/')r   hostrV   r2   r   
host_regexhost_formatrq   )r1   r:  rV   r2   s       r6   r0   Host.__init__  sF    ??3''G)GG'		COPTCU@)4+@r8   c                0    [        U R                  S/ 5      $ r  )rf   rV   r  s    r6   r  Host.routes  s    txx2..r8   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  rP   r:  ry   rz   r   r3   )r3   rg   )r   r   r   r;  r   r   rl   rq   r   r   r   rV   rE   rK   rI   )
r1   rP   r   r:  r   r   rr   rs   r3   r   s
             r6   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~r8   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)Nrp   )rp   r:  rz   rG   )rp   r   r:  )r2   ro   ru   r<  rq   r   r   r   r  r   r:   r   r(   )	r1   r2   r3   rp   r:  r   r#  r&  r'  s	            r6   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rO   r  r   s       r6   r   Host.handle  r  r	  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rO   )r   r8  r:  rV   r   s     r6   r   Host.__eq__   s6    %&\499

+B\txxSXS\S\G\\r8   c                    U R                   R                  nU R                  =(       d    SnU SU R                  < SU< SU R                  < S3$ )Nry   z(host=r   r.  r}   )r5   r=   r2   r:  rV   r/  s      r6   r   Host.__repr__  r1  r8   )rV   r:  r<  r;  r2   rq   rO   r:  r:   rV   r    r2   r   r;   r<   r4  r   r   rX   r   r   r5  r9   r8   r6   r8  r8    s7    V / /..-]Tr8   r8  _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 rO   _cm)r1   cms     r6   r0   !_AsyncLiftContextManager.__init__  s    r8   c                >   #    U R                   R                  5       $ 7frO   )rQ  	__enter__r  s    r6   
__aenter__#_AsyncLiftContextManager.__aenter__  s     xx!!##s   c                B   #    U R                   R                  XU5      $ 7frO   )rQ  __exit__)r1   exc_type	exc_value	tracebacks       r6   	__aexit__"_AsyncLiftContextManager.__aexit__  s      xx  i@@s   rP  N)rR  zAbstractContextManager[_T])r;   rL  )rZ  ztype[BaseException] | Noner[  zBaseException | Noner\  ztypes.TracebackType | Noner;   zbool | None)r=   r>   r?   r@   r0   rV  r]  rB   r9   r8   r6   rN  rN    s<    $A,A (A .	A
 
Ar8   rN  c                v   ^ [         R                  " U 5      m[        R                  " T5      SU4S jj5       nU$ )Nc                &   > [        T" U 5      5      $ rO   )rN  )rV   cmgrs    r6   wrapper+_wrap_gen_lifespan_context.<locals>.wrapper!  s    'S	22r8   )rV   r   r;   z_AsyncLiftContextManager[Any])
contextlibcontextmanagerrZ   wraps)lifespan_contextrb  ra  s     @r6   _wrap_gen_lifespan_contextrh    s8     $$%56D__T3 3 Nr8   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 rO   _router)r1   routers     r6   r0   _DefaultLifespan.__init__)  s    r8   c                   #    g 7frO   r9   r  s    r6   rV  _DefaultLifespan.__aenter__,          c                   #    g 7frO   r9   )r1   exc_infos     r6   r]  _DefaultLifespan.__aexit__/  rr  rs  c                    U $ rO   r9   )r1   rV   s     r6   r   _DefaultLifespan.__call__2  s    r8   rl  N)rn  r  )r;   r<   )ru  objectr;   r<   )r1   rL  rV   ry  r;   rL  )	r=   r>   r?   r@   r0   rV  r]  r   rB   r9   r8   r6   rj  rj  (  s    r8   rj  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defaultrj  rg  r   isasyncgenfunctionwarningswarnr   r   isgeneratorfunctionrh  rV   middleware_stackr   )	r1   r  r|  r~  lifespanr   r   r   r   s	            r6   r0   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% &: r8   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   rV   r   r   r   )r&   r   r   )r1   rP   rQ   rR   r   rS   s         r6   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rO   )r  r   r(   )r1   r2   r3   r&  s       r6   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.
FrV   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   rg  RuntimeErrorr   BaseExceptionr\  
format_exc)r1   rP   rQ   rR   startedrV   maybe_stateexc_texts           r6   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       r6   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  rn  r  r   rw   rp   rA  )r'  )r  r  r   rE   rK   r   r   rJ   r   r|  r   endswithr  rI   r   r   r:   r~  )r1   rP   rQ   rR   r[   r&  r   r   partial_scoper   redirect_scoperedirect_urlrS   s                r6   rV   
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  $ rO   )r   r  r  r   s     r6   r   Router.__eq__  s!    %(HT[[ELL-HHr8   c                N    [        XUS9nU R                  R                  U5        g N)rV   r2   )r  r  append)r1   rp   rV   r2   r&  s        r6   mountRouter.mount  s     d$/5!r8   c                N    [        XUS9nU R                  R                  U5        g r  )r8  r  r  )r1   r:  rV   r2   r&  s        r6   r:  Router.host  s     T.5!r8   c                T    [        UUUUUS9nU R                  R                  U5        g )N)rg   r   r2   r   )r   r  r  )r1   rp   rg   r   r2   r   r&  s          r6   	add_routeRouter.add_route  s1     /
 	5!r8   c                N    [        XUS9nU R                  R                  U5        g )N)rg   r2   )r   r  r  )r1   rp   rg   r2   r&  s        r6   add_websocket_routeRouter.add_websocket_route  s"     tTB5!r8   )r~  rg  r  r|  r  )NTNN)r  r3  r|  r   r~  r2  r  zLifespan[Any] | Noner   r   r;   r<   rX   r   r   rO   )rp   r:   rV   r    r2   r   r;   r<   rK  )NNT)rp   r:   rg   3Callable[[Request], Awaitable[Response] | Response]r   r   r2   r   r   r   r;   r<   )rp   r:   rg   &Callable[[WebSocket], Awaitable[None]]r2   r   r;   r<   )r=   r>   r?   r@   r0   r}  r   r  r   rV   r   r  r:  r  r  rB   r9   r8   r6   r  r  6  s    .2!%"& *.%T 37%T*%T %T  	%T '%T 0%T 
%TN-.?6:01dI"" +/"&"" F" (	"
 "  " 
"*  	"" 9" 	"
 
" "r8   r  )r\   r  r;   r    )r\   r  r;   r    )rg   r   r;   r:   )rp   r:   rq   zdict[str, Convertor[Any]]r3   zdict[str, str]r;   ztuple[str, dict[str, str]])rp   r:   r;   z3tuple[Pattern[str], str, dict[str, Convertor[Any]]])rg  z)Callable[[Any], Generator[Any, Any, Any]]r;   z1Callable[[Any], AbstractAsyncContextManager[Any]])N
__future__r   rd  rZ   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   r   starlette.middlewarer   starlette.requestsr   starlette.responsesr   r   r   starlette.typesr    r!   r"   r#   r$   starlette.websocketsr%   r&   	Exceptionr(   rE   r]   rd   rh   ru   r   r   r   r   r   r   r  r8  rL  rN  rh  rj  r  r9   r8   r6   <module>r     s   "    	    P P _ _    E > 3 ; : : K + & 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"r8   