
    i                       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  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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;S0S jr<    S1S jr=    S2S jr>S3S jr?        S4S jr@\R                  " S5      rB    S5S 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    S6S+ jrK " S, S-5      rL " S. S/5      rMg)7    )annotationsN)	Awaitable
Collection	GeneratorSequence)AbstractAsyncContextManagerAbstractContextManagerasynccontextmanager)Enum)Pattern)AnyCallable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       Y/var/www/html/qgis-automation/mouza_env/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                  " S[        5        [        U [        R
                  5      (       a-  U R                  n [        U [        R
                  5      (       a  M-  [        R                  " U 5      $ )zr
Correctly determines if an object is a coroutine function,
including those wrapped in functools.partial objects.
zViscoroutinefunction_or_partial is deprecated, and will be removed in a future release.)	warningswarnDeprecationWarning
isinstance	functoolspartialfuncinspectiscoroutinefunction)objs    r5   iscoroutinefunction_or_partialrV   .   sZ    
 MM` S)++
,
,hh S)++
,
,&&s++r7   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>.appJ   s*     wZ'H54000 (0s   *&*(**r[   r"   r\   r!   r]   r#   r:   r;   )r   r   )r[   r\   r]   ra   r`   r_   s       @r5   ra   request_response.<locals>.appG   s5     %$/	1 	1 +38NNNs   ,868rc   )r   rP   rQ   r   )rR   ra   r_   s     @r5   request_responsere   <   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)r\   r]   c                2   >#    T" T5      I S h  vN   g  N7frZ   r8   )r[   r\   r]   rR   sessions      r5   ra   +websocket_session.<locals>.app.<locals>.app^   s     w-s   rc   )r$   r   )r[   r\   r]   ra   ri   rR   s       @r5   ra   websocket_session.<locals>.app[   s5     E>	  	  +38NNNs   *646rc   r8   )rR   ra   s   ` r5   websocket_sessionrl   S   s    O Jr7   c                D    [        U SU R                  R                  5      $ )Nr<   )getattrr4   r<   )endpoints    r5   get_namerp   f   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_paramsr}   j   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)rx   is_host
path_regexpath_formatduplicated_paramsidxry   match
param_nameconvertor_typer|   namesendinghostnames                 r5   compile_pathr   |   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rZ   NotImplementedError)r0   r[   s     r5   matchesBaseRoute.matches       !##r7   c                   [        5       erZ   r   )r0   r1   r2   s      r5   url_path_forBaseRoute.url_path_for   r   r7   c                   #    [        5       e7frZ   r   r0   r[   r\   r]   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   r[   r\   r]   r   child_scoper^   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r[   r"   r:   ztuple[Match, Scope]r1   r9   r2   r   r:   r   rc   )	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 )Nr    Routed paths must start with '/'GETHEAD)r   rx   ro   rp   r1   r   rO   rP   rQ   rR   rS   
isfunctionismethodre   ra   reversedr   upperr   r   r   r   ry   )r0   rx   ro   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   ro   r2   r   )r   r   r   	groupdictrt   ry   convertdictgetr   ro   r   rD   rI   rJ   rH   	r0   r[   
route_pathr   matched_paramsrz   r{   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   rx   protocolr   r-   ry   r1   r'   r}   r   r   r0   r1   r2   seen_paramsexpected_paramsrx   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*   ra   i  )r   headerszMethod Not Allowed)r   r+   r   r   ra   )r0   r[   r\   r]   r   r^   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  $ rZ   )rO   r   rx   ro   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   rx   r1   )r0   
class_namer   rx   r1   s        r5   __repr__Route.__repr__,  sR    ^^,,
+,YY		dVD874(*WKqQQr7   )	ra   ro   r   r   r1   ry   rx   r   r   )rx   r9   ro   Callable[..., Any]r   Collection[str] | Noner1   
str | Noner   boolr   Sequence[Middleware] | Noner:   r;   r   r   rc   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)WebSocketRoutei3  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 )Nr   r   )r   rx   ro   rp   r1   rO   rP   rQ   rR   rS   r   r   rl   ra   r   r   r   r   ry   )	r0   rx   ro   r1   r   r   r   r   r   s	            r5   r/   WebSocketRoute.__init__4  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   rt   ry   r   r   r   r   ro   rD   rJ   rH   r   s	            r5   r   WebSocketRoute.matchesQ  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_for`  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rZ   ra   r   s       r5   r   WebSocketRoute.handlek       hhut,,,     c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rZ   )rO   r  rx   ro   r   s     r5   r   WebSocketRoute.__eq__n  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<   rx   r1   r0   s    r5   r   WebSocketRoute.__repr__q  s/    ..))*&WTYYMQRSSr7   )ra   ro   r1   ry   rx   r   r   )
rx   r9   ro   r   r1   r   r   r   r:   r;   r   r   rc   r   r  r  r8   r7   r5   r  r  3  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)Mountiu  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 )Nr   r   r   z0Either 'app=...', or 'routes=' must be specified)routesz/{path:path})r   rstriprx   	_base_appRouterra   r   r1   r   r   r   ry   )	r0   rx   ra   r  r1   r   r   r   r   s	            r5   r/   Mount.__init__v  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  )rn   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_pathr   r   rx   r2   app_root_path)r2   r$  r#  ro   )r   r   r   r   r   rt   ry   r   rw   r   r   r   ra   rD   rJ   rH   )r0   r[   r#  r   r   r   rz   r{   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)Nrx   r   )rx   r   rF   r   r   )r1   r   r}   r   ry   r   r   r   r   r  r   r  r9   r   r'   )
r0   r1   r2   rx   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rZ   r  r   s       r5   r   Mount.handle  r  r  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rZ   )rO   r  rx   ra   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$ )Nr   r   r   , app=r   )r4   r<   r1   rx   ra   r0   r   r1   s      r5   r   Mount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr7   )r  ra   r1   ry   rx   r   r   )NNN)rx   r9   ra   ASGIApp | Noner  Sequence[BaseRoute] | Noner1   r   r   r   r:   r;   r:   zlist[BaseRoute]r   r   rc   r   r  r<   r=   r>   r?   r/   propertyr  r   r   r   r   r   rA   r8   r7   r5   r  r  u  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 )Nr   zHost must not start with '/')r   hostra   r1   r   
host_regexhost_formatry   )r0   r@  ra   r1   s       r5   r/   Host.__init__  sF    ??3''G)GG'		COPTCU@)4+@r7   c                0    [        U R                  S/ 5      $ r  )rn   ra   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"  r[   r@  r   r   r   r2   )r2   ro   )r   r   r   rA  r   r   rt   ry   r   r   r   ra   rD   rJ   rH   )
r0   r[   r   r@  r   r   rz   r{   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)Nrx   )rx   r@  r   rF   )rx   r   r@  )r1   rw   r}   rB  ry   r   r   r   r  r   r9   r   r'   )	r0   r1   r2   rx   r@  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rZ   r  r   s       r5   r   Host.handle  r  r  c                    [        U[        5      =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ rZ   )rO   r>  r@  ra   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$ )Nr   z(host=r   r4  r   )r4   r<   r1   r@  ra   r5  s      r5   r   Host.__repr__  r7  r7   )ra   r@  rB  rA  r1   ry   rZ   r@  r9   ra   r   r1   r   r:   r;   r:  r   r   rc   r   r  r;  r8   r7   r5   r>  r>    s7    V / /..-]Tr7   r>  _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 rZ   _cm)r0   cms     r5   r/   !_AsyncLiftContextManager.__init__  s    r7   c                >   #    U R                   R                  5       $ 7frZ   )rW  	__enter__r  s    r5   
__aenter__#_AsyncLiftContextManager.__aenter__  s     xx!!##s   c                B   #    U R                   R                  XU5      $ 7frZ   )rW  __exit__)r0   exc_type	exc_value	tracebacks       r5   	__aexit__"_AsyncLiftContextManager.__aexit__!  s      xx  i@@s   rV  N)rX  zAbstractContextManager[_T])r:   rR  )r`  ztype[BaseException] | Nonera  zBaseException | Nonerb  ztypes.TracebackType | Noner:   zbool | None)r<   r=   r>   r?   r/   r\  rc  rA   r8   r7   r5   rT  rT    s<    $A,A (A .	A
 
Ar7   rT  c                v   ^ [         R                  " U 5      m[        R                  " T5      SU4S jj5       nU$ )Nc                &   > [        T" U 5      5      $ rZ   )rT  )ra   cmgrs    r5   wrapper+_wrap_gen_lifespan_context.<locals>.wrapper/  s    'S	22r7   )ra   r   r:   z_AsyncLiftContextManager[Any])
contextlibcontextmanagerrP   wraps)lifespan_contextrh  rg  s     @r5   _wrap_gen_lifespan_contextrn  *  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)_DefaultLifespani6  c                    Xl         g rZ   _router)r0   routers     r5   r/   _DefaultLifespan.__init__7  s    r7   c                T   #    U R                   R                  5       I S h  vN   g  N7frZ   )rs  startupr  s    r5   r\  _DefaultLifespan.__aenter__:  s     ll""$$$   (&(c                T   #    U R                   R                  5       I S h  vN   g  N7frZ   )rs  shutdown)r0   exc_infos     r5   rc  _DefaultLifespan.__aexit__=  s     ll##%%%ry  c                    U $ rZ   r8   )r0   ra   s     r5   r   _DefaultLifespan.__call__@  s    r7   rr  N)rt  r  r:   r;   )r|  objectr:   r;   )r0   rR  ra   r  r:   rR  )	r<   r=   r>   r?   r/   r\  rc  r   rA   r8   r7   r5   rp  rp  6  s    %&r7   rp  c                  P   \ 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 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         S"S jjrSS#S jjrS$S jrS%S jrSrg)&r  iD  Nr  c               (   Uc  / O
[        U5      U l        X l        Uc  U R                  OUU l        Uc  / O
[        U5      U l        Uc  / O
[        U5      U l        U(       d  U(       a8  [        R                  " S[        5        U(       a  [        R                  " S5        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  pn
U" U R$                  /U	Q70 U
D6U l        M#     g g )NzThe on_startup and on_shutdown parameters are deprecated, and they will be removed on version 1.0. Use the lifespan parameter instead. See more about it on https://starlette.dev/lifespan/.zThe `lifespan` parameter cannot be used with `on_startup` or `on_shutdown`. Both `on_startup` and `on_shutdown` will be ignored.zjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function instead)r,   r  redirect_slashes	not_founddefault
on_startupon_shutdownrL   rM   rN   rp  rm  rS   isasyncgenfunctionr
   isgeneratorfunctionrn  ra   middleware_stackr   )r0   r  r  r  r  r  lifespanr   r   r   r   s              r5   r/   Router.__init__E  sV    #NbV 0)0t~~g * 2"Z8H!,!42${:KMMH #	  3CD3ID!''11MMJ"
 %8%D! ((22MMv" %?%D! %-! $%-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   ra   r   r   r   )r%   r   r   )r0   r[   r\   r]   r   r^   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rZ   )r  r   r'   )r0   r1   r2   r,  s       r5   r   Router.url_path_for  sL    [[E))$>+>> !
 4--   s   3
A Ac                   #    U R                    H+  n[        U5      (       a  U" 5       I Sh  vN   M$  U" 5         M-     g N7f)z'
Run any `.on_startup` event handlers.
N)r  r   r0   handlers     r5   rw  Router.startup  s1      G ))i		 '   *A?Ac                   #    U R                    H+  n[        U5      (       a  U" 5       I Sh  vN   M$  U" 5         M-     g N7f)z(
Run any `.on_shutdown` event handlers.
N)r  r   r  s     r5   r{  Router.shutdown  s3      ''G ))i		 (r  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.
Fra   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   rm  RuntimeErrorr   BaseExceptionrb  
format_exc)r0   r[   r\   r]   startedra   maybe_stateexc_texts           r5   r  Router.lifespan  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  rt  r  r   r   rx   rG  )r-  )r  r  r   rD   rJ   r   r   rI   r   r  r   endswithr  rH   r   r   r9   r  )r0   r[   r\   r]   rQ   r,  r   r   partial_scoper   redirect_scoperedirect_urlr^   s                r5   ra   
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  $ rZ   )rO   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)ra   r1   )r  r  append)r0   rx   ra   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  )r>  r  r  )r0   r@  ra   r1   r,  s        r5   r@  Router.host  s     T.5!r7   c                T    [        UUUUUS9nU R                  R                  U5        g )N)ro   r   r1   r   )r   r  r  )r0   rx   ro   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)ro   r1   )r  r  r  )r0   rx   ro   r1   r,  s        r5   add_websocket_routeRouter.add_websocket_route  s"     tTB5!r7   c                ^   ^ ^^^^ [         R                  " S[        5        SUUUUU 4S jjnU$ )z
We no longer document this decorator style API, and its usage is discouraged.
Instead you should use the following approach:

>>> routes = [Route(path, endpoint=...), ...]
>>> app = Starlette(routes=routes)
zThe `route` decorator is deprecated, and will be removed in version 1.0.0.Refer to https://starlette.dev/routing/#http-routing for the recommended approach.c                .   > TR                  TU TTTS9  U $ )N)r   r1   r   )r  )rR   r   r   r1   rx   r0   s    r5   	decoratorRouter.route.<locals>.decorator9  s*    NN"3   Kr7   rR   r   r:   r   rL   rM   rN   )r0   rx   r   r1   r   r  s   ````` r5   r,  Router.route%  s,     	a	
	 	 r7   c                V   ^ ^^ [         R                  " S[        5        SUUU 4S jjnU$ )z
We no longer document this decorator style API, and its usage is discouraged.
Instead you should use the following approach:

>>> routes = [WebSocketRoute(path, endpoint=...), ...]
>>> app = Starlette(routes=routes)
zThe `websocket_route` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://starlette.dev/routing/#websocket-routing for the recommended approach.c                *   > TR                  TU TS9  U $ )N)r1   )r  )rR   r1   rx   r0   s    r5   r  )Router.websocket_route.<locals>.decoratorS  s    $$T4d$;Kr7   r  r  )r0   rx   r1   r  s   ``` r5   websocket_routeRouter.websocket_routeE  s,     	]	
	 	 r7   c                    US;   d   eUS:X  a  U R                   R                  U5        g U R                  R                  U5        g )N)rw  r{  rw  )r  r  r  )r0   
event_typerR   s      r5   add_event_handlerRouter.add_event_handlerY  s?    4444"OO""4(##D)r7   c                R   ^ ^ [         R                  " S[        5        SUU 4S jjnU$ )NzThe `on_event` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://starlette.dev/lifespan/ for recommended approach.c                ,   > TR                  TU 5        U $ rZ   )r  )rR   r  r0   s    r5   r  "Router.on_event.<locals>.decoratorh  s    "":t4Kr7   r  r  )r0   r  r  s   `` r5   on_eventRouter.on_eventa  s*    Q	
	 	 r7   )r  rm  r  r  r  r  r  )NTNNNN)r  r9  r  r   r  r8  r  "Sequence[Callable[[], Any]] | Noner  r  r  zLifespan[Any] | Noner   r   r:   r;   rc   r   r  r   rZ   )rx   r9   ra   r   r1   r   r:   r;   rQ  )NNT)rx   r9   ro   3Callable[[Request], Awaitable[Response] | Response]r   r   r1   r   r   r   r:   r;   )rx   r9   ro   &Callable[[WebSocket], Awaitable[None]]r1   r   r:   r;   )
rx   r9   r   r   r1   r   r   r   r:   r   )rx   r9   r1   r   r:   r   )r  r9   rR   zCallable[[], Any]r:   r;   )r  r9   r:   r   )r<   r=   r>   r?   r/   r  r   rw  r{  r  r   ra   r   r  r@  r  r  r,  r  r  r  rA   r8   r7   r5   r  r  D  s    .2!%"&9=:> *.;T 37;T*;T ;T  	;T
 7;T 8;T ';T 0;T 
;Tz-.?6:01dI"" +/"&"" F" (	"
 "  " 
"*  	"" 9" 	"
 
" +/"& ( 	
   
@(*r7   r  )rU   r   r:   r   )rR   r  r:   r   )rR   r  r:   r   )ro   r   r:   r9   )rx   r9   ry   zdict[str, Convertor[Any]]r2   zdict[str, str]r:   ztuple[str, dict[str, str]])rx   r9   r:   z3tuple[Pattern[str], str, dict[str, Convertor[Any]]])rm  z)Callable[[Any], Generator[Any, Any, Any]]r:   z1Callable[[Any], AbstractAsyncContextManager[Any]])N
__future__r   rj  rP   rS   r   rb  typesrL   collections.abcr   r   r   r   r   r	   r
   enumr   r   typingr   r   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   rV   re   rl   rp   r}   r   r   r   r   r   r  r  r>  rR  rT  rn  rp  r  r8   r7   r5   <module>r     s   "    	    F F _ _   ) ) 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	 h hr7   