
    Ojw                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZmZ d dlmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZ d d
lmZ d dl m!Z!m"Z" d dl#m$Z$m%Z%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z;m<Z<  G d de=      Z> G d de      Z?	 	 	 	 d0dZ@	 	 	 	 d1dZAd2dZB	 	 	 	 	 	 	 	 d3dZC ej                  d      ZE	 	 	 	 d4dZF G d d      ZG G d  d!eG      ZH G d" d#eG      ZI G d$ d%eG      ZJ G d& d'eG      ZK ed(      ZL G d) d*eeL         ZM	 	 	 	 d5d+ZN G d, d-      ZO G d. d/      ZPy)6    )annotationsN)	AwaitableCallable
Collection	GeneratorSequence)AbstractAsyncContextManagerAbstractContextManagerasynccontextmanager)Enum)Pattern)AnyTypeVar)wrap_app_handling_exceptions)get_route_pathis_async_callableparse_host_header)run_in_threadpool)CONVERTOR_TYPES	Convertor)URLHeadersURLPath)HTTPExceptionStarletteDeprecationWarning)
Middleware)RequestBodyLimitMiddleware)Request)PlainTextResponseRedirectResponseResponse)ASGIAppLifespanReceiveScopeSend)	WebSocketWebSocketClosec                  $     e Zd ZdZd fdZ xZS )NoMatchFoundz}
    Raised by `.url_for(name, **path_params)` and `.url_path_for(name, **path_params)`
    if no matching route exists.
    c                    dj                  t        |j                                     }t        |   d| d| d       y )N, zNo route exists for name "z" and params "z".)joinlistkeyssuper__init__)selfnamepath_paramsparams	__class__s       h/var/www/origus_pro_usr/data/www/origus.pro/core/.venv/lib/python3.12/site-packages/starlette/routing.pyr1   zNoMatchFound.__init__$   s=    4 0 0 2345dV>&QSTU    )r3   strr4   zdict[str, Any]returnNone)__name__
__module____qualname____doc__r1   __classcell__)r6   s   @r7   r*   r*      s    
V Vr8   r*   c                      e Zd ZdZdZdZy)Matchr         N)r<   r=   r>   NONEPARTIALFULL r8   r7   rB   rB   )   s    DGDr8   rB   c                b    t        |       r| nt        j                  t        |       dfd}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    c                t   K   t        | ||      dfd} t        |      | ||       d {    y 7 w)Nc                Z   K           d {   } || ||       d {    y 7 7 wNrH   )scopereceivesendresponsefrequests       r7   appz*request_response.<locals>.app.<locals>.app=   s.     wZ'H5'4000 (0s   +'+)++rM   r%   rN   r$   rO   r&   r:   r;   )r   r   )rM   rN   rO   rS   rR   rQ   s       @r7   rS   zrequest_response.<locals>.app:   s8     %$/	1 9*38NNNs   ,868rT   )r   	functoolspartialr   )funcrS   rQ   s     @r7   request_responserX   /   s2     "$'Y->->?PRV-W O Jr8   c                     d fd}|S )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    c                v   K   t        | ||      dfd} t        |      | ||       d {    y 7 w)N)rN   rO   c                2   K           d {    y 7 wrL   rH   )rM   rN   rO   rW   sessions      r7   rS   z+websocket_session.<locals>.app.<locals>.appQ   s     w-s   rT   )r'   r   )rM   rN   rO   rS   r\   rW   s       @r7   rS   zwebsocket_session.<locals>.appN   s8     E7>	  9*38NNNs   -979rT   rH   )rW   rS   s   ` r7   websocket_sessionr]   F   s    O Jr8   c                D    t        | d| j                  j                        S )Nr<   )getattrr6   r<   )endpoints    r7   get_namera   Y   s    8Z););)D)DEEr8   c                    t        |j                               D ]O  \  }}d|z   dz   | v s||   }|j                  |      }| j                  d|z   dz   |      } |j	                  |       Q | |fS )N{})r.   items	to_stringreplacepop)pathparam_convertorsr4   keyvalue	convertors         r7   replace_paramsrn   ]   s    
 ;,,./ !
U9s?d"(-I''.E<<c	C7DOOC ! r8   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                   | j                  d       }d}d}t               }d}i }t        j                  |       D ]  }|j	                  d      \  }}	|	j                  d      }	|	t        v sJ d|	 d       t        |	   }
|t        j                  | ||j                                z  }|d	| d
|
j                   dz  }|| ||j                          z  }|d|z  z  }||v r|j                  |       |
||<   |j                         } |r@dj                  t        |            }t        |      dkD  rdnd}t!        d| d| d|        |rG| |d }|j#                  d      s|j%                  dd      d   }|t        j                  |      dz   z  }n|t        j                  | |d       dz   z  }|| |d z  }t        j&                  |      ||fS )a*  
    Given a path string, like: "/{username:str}",
    or a host string, like: "{subdomain}.mydomain.org", return a three-tuple
    of (regex, format, {param_name:convertor}).

    regex:      "/(?P<username>[^/]+)"
    format:     "/{username}"
    convertors: {"username": StringConvertor()}
    /^ r   r9   :zUnknown path convertor ''z(?P<>)z{%s}r,   rC   szDuplicated param name z	 at path N]$)
startswithsetPARAM_REGEXfinditergroupslstripr   reescapestartregexaddendr-   sortedlen
ValueErrorendswithrsplitcompile)ri   is_host
path_regexpath_formatduplicated_paramsidxrj   match
param_nameconvertor_typerm   namesendinghostnames                 r7   compile_pathr   o   s    //#&&GJK"%%
C%%d+ %*\\%%8"
N'..s30^4L^L\\]2^^0#N3	biiS5;;= 9::
ZL)//):!<<
tC%++-00v
**))!!*-'0$iik#& 		&!234-.20%	$PQQ:  %sA.q1Hbii)C//
biiST
+c11
4:K::j!;0@@@r8   c                  ,    e Zd ZddZddZddZddZy)		BaseRoutec                    t               rL   NotImplementedError)r2   rM   s     r7   matcheszBaseRoute.matches       !##r8   c                   t               rL   r   )r2   r3   r4   s      r7   url_path_forzBaseRoute.url_path_for   r   r8   c                   K   t               wrL   r   r2   rM   rN   rO   s       r7   handlezBaseRoute.handle   s     !##s   c                X  K   | j                  |      \  }}|t        j                  k(  rM|d   dk(  r t        dd      } ||||       d{    y|d   dk(  rt	               } ||||       d{    y|j                  |       | j                  |||       d{    y7 W7 47 	w)z
        A route may be used in isolation as a stand-alone ASGI app.
        This is a somewhat contrived case, as they'll almost always be used
        within a Router, but could be useful for some tooling and minimal apps.
        typehttp	Not Found  status_codeN	websocket)r   rB   rE   r   r(   updater   )r2   rM   rN   rO   r   child_scoperP   websocket_closes           r7   __call__zBaseRoute.__call__   s      "\\%0{EJJV}&,[cJugt444  v+-"0"2%eWd;;;[!kk%$/// 5 < 	0s6   A
B*B$$B*1B&2,B*B(B*&B*(B*NrM   r%   r:   ztuple[Match, Scope]r3   r9   r4   r   r:   r   rT   )r<   r=   r>   r   r   r   r   rH   r8   r7   r   r      s    $$$0r8   r   c                  h    e Zd Zdddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d
dZddZddZddZddZdd	Zy)RouteNT)methodsr3   include_in_schema
middlewaremax_body_sizec               *   |j                  d      sJ d       || _        || _        |t        |      n|| _        || _        |}t        |t        j                        r'|j                  }t        |t        j                        r't        j                  |      st        j                  |      rt        |      | _        |dg}n|| _        |/t        |      D ]!  \  }	}
} |	| j                  g|
i || _        # |t!        | j                  |      | _        |d | _        nL|D ch c]  }|j%                          c}| _        d| j"                  v r| j"                  j'                  d       t)        |      \  | _        | _        | _        y c c}w )Nrp    Routed paths must start with '/'GETr   HEAD)r{   ri   r`   ra   r3   r   
isinstancerU   rV   rW   inspect
isfunctionismethodrX   rS   reversedr   r   upperr   r   r   r   rj   )r2   ri   r`   r   r3   r   r   r   endpoint_handlerclsargskwargsmethods                r7   r1   zRoute.__init__   sm    s#G%GG#	 *.,HX&D	!2#)9+<+<=/44 )9+<+<=./73C3CDT3U'1DH '  DH!%-j%9 :!T6txx9$9&9:$1$((-XDH?DL9@AvFLLNADL$  (COPTCU@)4+@	 Bs   )Fc                   |d   dk(  rt        |      }| j                  j                  |      }|r|j                         }|j	                         D ]&  \  }}| j
                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       | j                  |d}| j                  r#|d   | j                  vrt        j                  |fS t        j                  |fS t        j                  i fS )Nr   r   r4   r`   r4   r   )r   r   r   	groupdictre   rj   convertdictgetr   r`   r   rB   rF   rG   rE   	r2   rM   
route_pathr   matched_paramsrk   rl   r4   r   s	            r7   r   zRoute.matches   s    =F"'.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2+/==U<<E(O4<<$G ==+55 ::{22zz2~r8   c               $   t        |j                               }t        | j                  j                               }|| j                  k7  s||k7  rt	        ||      t        | j                  | j                  |      \  }}|rJ t        |d      S )Nr   ri   protocolr|   r/   rj   r3   r*   rn   r   r   r2   r3   r4   seen_paramsexpected_paramsri   remaining_paramss          r7   r   zRoute.url_path_for  s    +**,-d3388:;499 >t[11!/0@0@$BWBWYd!e###D622r8   c                "  K   | j                   r`|d   | j                   vrOddj                  | j                         i}d|v rt        d|      t        dd|      } ||||       d {    y | j	                  |||       d {    y 7 !7 w)Nr   Allowr,   rS   i  )r   headerszMethod Not Allowed)r   r-   r   r   rS   )r2   rM   rN   rO   r   rP   s         r7   r   zRoute.handle  s     <<E(O4<<?		$,, 78G~#WEE,-As\cd5'4000((5'4000 10s$   A'B)B*BBBBc                    t        |t              xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rL   )r   r   ri   r`   r   r2   others     r7   __eq__zRoute.__eq__  sR    ue$ .		UZZ'./. -		
r8   c                    | j                   j                  }t        | j                  xs g       }| j                  | j
                  }}| d|d|d|dS )N(path=, name=z
, methods=rv   )r6   r<   r   r   ri   r3   )r2   
class_namer   ri   r3   s        r7   __repr__zRoute.__repr__$  sT    ^^,,
+,YY		dVD874(*WKqQQr8   )ri   r9   r`   Callable[..., Any]r   Collection[str] | Noner3   
str | Noner   boolr   Sequence[Middleware] | Noner   
int | Noner:   r;   r   r   rT   r   r   r:   r   r:   r9   	r<   r=   r>   r1   r   r   r   r   r   rH   r8   r7   r   r      s     +/"&26$(*V*V %*V
 (*V *V  *V 0*V "*V 
*VX$	3	1
Rr8   r   c                  V    e Zd Zddd	 	 	 	 	 	 	 	 	 d	dZd
dZddZddZddZddZy)WebSocketRouteN)r3   r   c                   |j                  d      sJ d       || _        || _        |t        |      n|| _        |}t        |t        j                        r'|j                  }t        |t        j                        r't        j                  |      st        j                  |      rt        |      | _        n|| _        |/t        |      D ]!  \  }}} || j                  g|i || _        # t        |      \  | _        | _        | _        y )Nrp   r   )r{   ri   r`   ra   r3   r   rU   rV   rW   r   r   r   r]   rS   r   r   r   r   rj   )	r2   ri   r`   r3   r   r   r   r   r   s	            r7   r1   zWebSocketRoute.__init__,  s     s#G%GG#	 *.,HX&D	#)9+<+<=/44 )9+<+<=./73C3CDT3U(2DH  DH!%-j%9 :!T6txx9$9&9: DPPTCU@)4+@r8   c                   |d   dk(  rt        |      }| j                  j                  |      }|r|j                         }|j	                         D ]&  \  }}| j
                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       | j                  |d}t        j                  |fS t        j                  i fS )Nr   r   r4   r   )r   r   r   r   re   rj   r   r   r   r   r`   rB   rG   rE   r   s	            r7   r   zWebSocketRoute.matchesI  s    =K''.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2+/==Uzz;..zz2~r8   c               $   t        |j                               }t        | j                  j                               }|| j                  k7  s||k7  rt	        ||      t        | j                  | j                  |      \  }}|rJ t        |d      S )Nr   r   r   r   s          r7   r   zWebSocketRoute.url_path_forX  s    +**,-d3388:;499 >t[11!/0@0@$BWBWYd!e###D;77r8   c                F   K   | j                  |||       d {    y 7 wrL   rS   r   s       r7   r   zWebSocketRoute.handlec       hhugt,,,   !!c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rL   )r   r   ri   r`   r   s     r7   r   zWebSocketRoute.__eq__f  s9    %0pTYY%**5LpQUQ^Q^bgbpbpQppr8   c                h    | j                   j                   d| j                  d| j                  dS )Nr   r   rv   )r6   r<   ri   r3   r2   s    r7   r   zWebSocketRoute.__repr__i  s/    ..))*&WTYYMQRSSr8   )
ri   r9   r`   r   r3   r   r   r   r:   r;   r   r   rT   r   r   r   rH   r8   r7   r   r   +  s`      26VV %V
 V 0V 
V:	8-qTr8   r   c                  x    e Zd Z	 	 	 d
ddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       ZddZddZddZddZ	dd	Z
y)MountNr   r   c                  |dk(  s|j                  d      sJ d       |	|J d       |j                  d      | _        ||| _        nt	        |      | _        | j                  | _        |/t        |      D ]!  \  }}}	 || j
                  g|i |	| _        # |t        | j
                  |      | _        || _        t        | j                  dz         \  | _
        | _        | _        y )Nrr   rp   r   z0Either 'app=...', or 'routes=' must be specified)routesr   z/{path:path})r{   rstripri   	_base_appRouterrS   r   r   r3   r   r   r   rj   )
r2   ri   rS   r   r3   r   r   r   r   r   s
             r7   r1   zMount.__init__n  s     rzT__S1U3UU1&"4h6hh4KK$	?&)DN#62DN>>!%-j%9 :!T6txx9$9&9:$1$((-XDH	COPTPYPY\jPjCk@)4+@r8   c                0    t        | j                  dg       S Nr   )r_   r  r   s    r7   r   zMount.routes  s    t~~x44r8   c                F   |d   dv r|j                  dd      }t        |      }| j                  j                  |      }|r|j	                         }|j                         D ]&  \  }}| j                  |   j                  |      ||<   ( d|j                  d      z   }|d t        |        }	t        |j                  di             }
|
j                  |       |
|j                  d|      ||	z   | j                  d	}t        j                  |fS t        j                  i fS )
Nr   r   r   	root_pathrr   rp   ri   r4   app_root_path)r4   r  r  r`   )r   r   r   r   r   re   rj   r   rh   r   r   r   rS   rB   rG   rE   )r2   rM   r  r   r   r   rk   rl   remaining_pathmatched_pathr4   r   s               r7   r   zMount.matches  s   =11		+r2I'.JOO))*5E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T!$~'9'9&'A!A)*@S-@,@A"599]B#?@"">2#. &+YY	%J!*\!9 $  zz;..zz2~r8   c                  | j                   \|| j                   k(  rMd|v rI|d   j                  d      |d<   t        | j                  | j                  |      \  }}|st        |      S | j                   |j                  | j                   dz         r| j                   |}n|t        | j                         dz   d  }|j                  d      }d|d<   t        | j                  | j                  |      \  }}|||d<   | j                  xs g D ]I  }	  |j                  |fi |}	t        |j                  d      t        |	      z   |	j                        c S  t        ||      # t        $ r Y cw xY w)Nri   rp   )ri   rs   rC   rr   r   )r3   r   rn   r   rj   r   r{   r   r   r   r   r   r9   r   r*   )
r2   r3   r4   ri   r   remaining_name
path_kwargpath_prefixrouteurls
             r7   r   zMount.url_path_for  sy   99 TTYY%66[;P"-f"5"<"<S"AK%3D4D4DdF[F[]h%i"D"#D))YY$//$))c/"Byy !% "&c$))nq&8&:!;$0J"$K,:4;K;KTMbMbdo,p)K)%+5 (* ,%,,^P?OPC"(:(:3(?#c((JUXUaUabb 4-- $ s   AE&&	E21E2c                F   K   | j                  |||       d {    y 7 wrL   r   r   s       r7   r   zMount.handle  r   r   c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rL   )r   r   ri   rS   r   s     r7   r   zMount.__eq__  s6    %']DII,C]TYT]T]H]]r8   c                    | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrr   r   r   , app=rv   )r6   r<   r3   ri   rS   r2   r   r3   s      r7   r   zMount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr8   )NNN)ri   r9   rS   ASGIApp | Noner   Sequence[BaseRoute] | Noner3   r   r   r   r   r   r:   r;   r:   zlist[BaseRoute]r   r   rT   r   r   r<   r=   r>   r1   propertyr   r   r   r   r   r   rH   r8   r7   r   r   m  s     #-1l 37$(ll l +	l
 l 0l "l 
l4 5 5B.6-^Tr8   r   c                  P    e Zd Zd	d
dZedd       ZddZddZddZddZ	ddZ
y)HostNc                    |j                  d      rJ d       || _        || _        || _        t	        |      \  | _        | _        | _        y )Nrp   zHost must not start with '/')r{   hostrS   r3   r   
host_regexhost_formatrj   )r2   r  rS   r3   s       r7   r1   zHost.__init__  sI    ??3'G)GG'		COPTCU@)4+@r8   c                0    t        | j                  dg       S r  )r_   rS   r   s    r7   r   zHost.routes  s    txx2..r8   c                &   |d   dv rt        |      }t        |j                  d            }|t        j                  i fS |j
                  }| j                  j                  |      }|r|j                         }|j                         D ]&  \  }}| j                  |   j                  |      ||<   ( t        |j                  di             }	|	j                  |       |	| j                  d}
t        j                  |
fS t        j                  i fS )Nr   r  rM   r  r4   )r4   r`   )r   r   r   rB   rE   r  r   r   r   re   rj   r   r   r   rS   rG   )r2   rM   r   parsed_hostr  r   r   rk   rl   r4   r   s              r7   r   zHost.matches  s    =11E*G+GKK,?@K"zz2~%##DOO))$/E!&!2"0"6"6"8 TJC*.*?*?*D*L*LU*SN3'T"599]B#?@"">2.9txxPzz;..zz2~r8   c                  | j                   W|| j                   k(  rHd|v rD|j                  d      }t        | j                  | j                  |      \  }}|st        ||      S | j                   |j                  | j                   dz         r| j                   |}n|t        | j                         dz   d  }t        | j                  | j                  |      \  }}| j                  xs g D ]8  }	  |j                  |fi |}t        t        |      |j                  |      c S  t        ||      # t        $ r Y Rw xY w)Nri   )ri   r  rs   rC   )ri   r   r  )r3   rh   rn   r!  rj   r   r{   r   r   r   r9   r   r*   )	r2   r3   r4   ri   r  r   r  r  r  s	            r7   r   zHost.url_path_for  s5   99 TTYY%66[;P??6*D%3D4D4DdF[F[]h%i"D"#Dt44YY$//$))c/"Byy !% "&c$))nq&8&:!;%3D4D4DdF[F[]h%i"D"* ,%,,^P?OPC"C3<<dSS 4-- $ s   03D33	D?>D?c                F   K   | j                  |||       d {    y 7 wrL   r   r   s       r7   r   zHost.handle
  r   r   c                    t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rL   )r   r  r  rS   r   s     r7   r   zHost.__eq__  s6    %&\499

+B\txxSXS\S\G\\r8   c                    | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrr   z(host=r   r  rv   )r6   r<   r3   r  rS   r  s      r7   r   zHost.__repr__  r  r8   rL   r  r9   rS   r"   r3   r   r:   r;   r  r   r   rT   r   r   r  rH   r8   r7   r  r    s7    V / /&..-]Tr8   r  _Tc                  4    e Zd ZddZddZ	 	 	 	 	 	 	 	 ddZy)_AsyncLiftContextManagerc                    || _         y rL   )_cm)r2   cms     r7   r1   z!_AsyncLiftContextManager.__init__  s	    r8   c                >   K   | j                   j                         S wrL   )r/  	__enter__r   s    r7   
__aenter__z#_AsyncLiftContextManager.__aenter__  s     xx!!##s   c                D   K   | j                   j                  |||      S wrL   )r/  __exit__)r2   exc_type	exc_value	tracebacks       r7   	__aexit__z"_AsyncLiftContextManager.__aexit__   s!      xx  9i@@s    N)r0  zAbstractContextManager[_T])r:   r+  )r6  ztype[BaseException] | Noner7  zBaseException | Noner8  ztypes.TracebackType | Noner:   zbool | None)r<   r=   r>   r1   r3  r9  rH   r8   r7   r-  r-    s<    $A,A (A .	A
 
Ar8   r-  c                n    t        j                  |       t        j                        dfd       }|S )Nc                &    t         |             S rL   )r-  )rS   cmgrs    r7   wrapperz+_wrap_gen_lifespan_context.<locals>.wrapper.  s    'S	22r8   )rS   r   r:   z_AsyncLiftContextManager[Any])
contextlibcontextmanagerrU   wraps)lifespan_contextr=  r<  s     @r7   _wrap_gen_lifespan_contextrB  )  s8     $$%56D__T3 3 Nr8   c                  ,    e Zd ZddZddZddZd	dZy)
_DefaultLifespanc                    || _         y rL   )_router)r2   routers     r7   r1   z_DefaultLifespan.__init__6  s	    r8   c                   K   y wrL   rH   r   s    r7   r3  z_DefaultLifespan.__aenter__9  	        c                   K   y wrL   rH   )r2   exc_infos     r7   r9  z_DefaultLifespan.__aexit__<  rI  rJ  c                    | S rL   rH   )r2   rS   s     r7   r   z_DefaultLifespan.__call__?  s    r8   N)rG  r  )r:   r;   )rL  objectr:   r;   )r2   r+  rS   rN  r:   r+  )r<   r=   r>   r1   r3  r9  r   rH   r8   r7   rD  rD  5  s    r8   rD  c                      e Zd Z	 	 	 	 dddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZddZddZdd	Z	ddd
Z
dddZ	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZy)r  Nr   c               Z   |g n
t        |      | _        || _        || j                  n|| _        |t        |       | _        nt        j                  |      r+t        j                  dt               t        |      | _        nGt        j                  |      r+t        j                  dt               t        |      | _        n|| _        | j                  | _        |r/t#        |      D ]!  \  }}}	 || j                   g|i |	| _        # |t%        | j                   |      | _        y y )Nzjasync generator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadzdgenerator function lifespans are deprecated, use an @contextlib.asynccontextmanager function insteadr   )r.   r   redirect_slashes	not_founddefaultrD  rA  r   isasyncgenfunctionwarningswarnr   r   isgeneratorfunctionrB  rS   middleware_stackr   r   )
r2   r   rQ  rS  lifespanr   r   r   r   r   s
             r7   r1   zRouter.__init__D  s    #NbV 0)0t~~g3CD3ID!''1MMJ+
 %8$AD!((2MMv+ %?x$HD!$,D! $%-j%9 T!T6(+D,A,A(SD(SF(S%T$$>t?T?Tdq$rD! %r8   c                   K   |d   dk(  rt               } ||||       d {    y d|v rt        d      t        dd      } ||||       d {    y 7 57 w)Nr   r   rS   r   r   r   )r(   r   r   )r2   rM   rN   rO   r   rP   s         r7   rR  zRouter.not_foundn  sl     =K',.O!%$777
 E>C00(#FHugt,,, 8 	-s!    AA/AAAAc                   | j                   D ]  }	  |j                  |fi |c S  t        ||      # t        $ r Y 1w xY wrL   )r   r   r*   )r2   r3   r4   r  s       r7   r   zRouter.url_path_for}  sU    [[ 	E)u))$>+>>	
 4--   s   3	??c                6  K   d}|j                  d      } |        d{    	 | j                  |      4 d{   }|#d|vrt        d      |d   j                  |        |ddi       d{    d} |        d{    ddd      d{     |dd	i       d{    y7 7 q7 <7 -7 # 1 d{  7  sw Y   /xY w7 $# t        $ rA t        j                         }|r |d
|d       d{  7     |d|d       d{  7    w xY ww)z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        FrS   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   rA  RuntimeErrorr   BaseExceptionr8  
format_exc)r2   rM   rN   rO   startedrS   maybe_stateexc_texts           r7   rY  zRouter.lifespan  s6    
 99U#i	?,,S1    [*e+*+ghh'N))+6F$?@AAAi      <=>>>% 	 
 B         ?  	 ++-H$>8TUUU  $=(STTT	s   DB+DC B-C 3B52B/3B5B1B5C B3C D%C
&D-C /B51B53C 5C;B><CC 
D-D9C<:DDDDc                F   K   | j                  |||       d{    y7 w)z;
        The main entry point to the Router class.
        N)rX  r   s       r7   r   zRouter.__call__  s       ##E7D999r   c                  K   |d   dv sJ d|vr| |d<   |d   dk(  r| j                  |||       d {    y d }| j                  D ]w  }|j                  |      \  }}|t        j                  k(  r3||d<   |j                  |       |j                  |||       d {     y |t        j                  k(  sq|t|}|}y |2||d<   |j                         |j                  |||       d {    y t        |      }	|d   dk(  r| j                  r|	dk7  rt        |      }
|	j                  d      r|
d   j                  d      |
d<   n|
d   dz   |
d<   | j                  D ]^  }|j                  |
      \  }}|t        j                  k7  s+t        |
	      }t        t!        |      
      } ||||       d {     y  | j#                  |||       d {    y 7 7 G7 7 +7 w)Nr   )r   r   rY  rG  rY  r  r   rp   ri   r$  )r  )rY  r   r   rB   rG   r   r   rF   r   rQ  r   r   r   rE   r   r    r9   rS  )r2   rM   rN   rO   rV   r  r   r   partial_scoper   redirect_scoperedirect_urlrP   s                r7   rS   z
Router.app  s    V} AAAA5 "E(O=J&--w555[[ 	,E "'u!5E;

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