
    =h                        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Zd dl mZ d dl	m
Z
 d dlmZ d dlmZmZ d dlmZ d dlmZmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlm Z m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z( d dl)m*Z*m+Z+  G d de,      Z- G d de
      Z.dej^                  de0fdZ1dejd                  egejf                  ejh                  e"   e"f   f   de$fdZ5dejd                  e*gejh                  d   f   de$fdZ6dejd                  dej^                  f   de7fdZ8de7dejr                  e7eej^                     f   dejr                  e7e7f   dejt                  e7ejr                  e7e7f   f   fdZ; ejx                  d       Z=de7dejt                  ej|                  e7   e7ejr                  e7eej^                     f   f   fd!Z? G d" d#      Z@ G d$ d%e@      ZA G d& d'e@      ZB G d( d)e@      ZC G d* d+e@      ZD ej                  d,      ZF G d- d.ej                  eF         ZHd/ejd                  ej^                  gej                  ej^                  ej^                  ej^                  f   f   dejd                  ej^                  gej                  ej^                     f   fd0ZJ G d1 d2      ZK G d3 d4      ZLy)5    N)asynccontextmanager)Enum)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                   b     e Zd ZdZdedej                  eej                  f   ddf 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.
    namepath_paramsreturnNc                     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__)selfr   r   params	__class__s       a/var/www/html/phonemate/phone_mate_backend/venv/lib/python3.12/site-packages/starlette/routing.pyr&   zNoMatchFound.__init__   s=    4 0 0 2345dV>&QSTU    )
__name__
__module____qualname____doc__strtypingDictAnyr&   __classcell__)r)   s   @r*   r   r      s>    
VS Vv{{3

?/K VPT V Vr+   r   c                       e Zd ZdZdZdZy)Matchr         N)r,   r-   r.   NONEPARTIALFULL r+   r*   r6   r6   $   s    DGDr+   r6   objr   c                     t        j                  dt               t        | t        j
                        r'| j                  } t        | t        j
                        r't        j                  |       S )z~
    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)r=   s    r*   iscoroutinefunction_or_partialrH   *   sV    
 MM	3
 S)++
,hh S)++
,&&s++r+   rE   c                 <     dt         dt        dt        ddf fd}|S )zi
    Takes a function or coroutine `func(request) -> response`,
    and returns an ASGI application.
    scopereceivesendr   Nc                    K   t        | ||      dt        dt        dt        dd ffd} t	        |      | ||       d {    y 7 w)NrJ   rK   rL   r   c                    K   t              r        d {   }nt               d {   } || ||       d {    y 7 ,7 7 	wN)r   r   )rJ   rK   rL   responserE   requests       r*   appz*request_response.<locals>.app.<locals>.appF   sI      &!%g.!24!AA5'4000 /A0s1   AAAA	AAA	AA)r   r   r   r   r   )rJ   rK   rL   rR   rQ   rE   s       @r*   rR   zrequest_response.<locals>.appC   sT     %$/	1U 	1W 	1D 	1T 	1 9*38NNNs   A AA
Ar   r   r   rE   rR   s   ` r*   request_responserU   9   s0    
O 
O 
O 
O 
O Jr+   c                 <     dt         dt        dt        ddf fd}|S )zM
    Takes a coroutine `func(session)`, and returns an ASGI application.
    rJ   rK   rL   r   Nc                    K   t        | ||      dt        dt        dt        dd ffd} t	        |      | ||       d {    y 7 w)N)rK   rL   rJ   rK   rL   r   c                 2   K           d {    y 7 wrO   r<   )rJ   rK   rL   rE   sessions      r*   rR   z+websocket_session.<locals>.app.<locals>.app]   s     w-s   )r   r   r   r   r   )rJ   rK   rL   rR   rY   rE   s       @r*   rR   zwebsocket_session.<locals>.appZ   sT     E7>	 U 	 W 	 D 	 T 	  9*38NNNs   AAAArS   rT   s   ` r*   websocket_sessionrZ   R   s0    O O O O O Jr+   endpoint.c                     t        j                  |       st        j                  |       r| j                  S | j                  j                  S rO   )rF   	isroutineisclassr,   r)   )r[   s    r*   get_namer_   e   s9    "gooh&?   &&&r+   pathparam_convertorsr   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)r`   ra   r   keyvalue	convertors         r*   replace_paramsrl   k   s{    
 ;,,./
U9s?d"(-I''.E<<c	C7DOOC  0 r+   z4{([a-zA-Z_][a-zA-Z0-9_]*)(:[a-zA-Z_][a-zA-Z0-9_]*)?}c                 x   | j                  d       }d}d}t               }d}i }t        j                  |       D ]  }|j	                  d      \  }}	|	j                  d      }	|	t        v sJ d|	 d       t        |	   }
|t        j                  | ||j                                z  }|d	| d
|
j                   dz  }|| ||j                          z  }|d|z  z  }||v r|j                  |       |
||<   |j                         } |r@dj                  t        |            }t        |      dkD  rdnd}t!        d| d| d|        |r3| |d j#                  d      d   }|t        j                  |      dz   z  }n|t        j                  | |d       dz   z  }|| |d z  }t        j$                  |      ||fS )a*  
    Given a path string, like: "/{username:str}",
    or a host string, like: "{subdomain}.mydomain.org", return a three-tuple
    of (regex, format, {param_name:convertor}).

    regex:      "/(?P<username>[^/]+)"
    format:     "/{username}"
    convertors: {"username": StringConvertor()}
    /^ r   r0   :zUnknown path convertor ''z(?P<>)z{%s}r!   r7   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)r`   is_host
path_regexpath_formatduplicated_paramsidxra   match
param_nameconvertor_typerk   namesendinghostnames                 r*   compile_pathr   }   s    //#&&GJK
C%%d+%*\\%%8"
N'..s3o-	8%n%5Q7	8-#N3	biiS5;;= 9::
ZL)//):!<<
tC%++-00v
**))!!*-'0$iik' ,* 		&!234-.20%	$PQQ:##C(+bii)C//
biiST
+c11
4:K::j!;0@@@r+   c                       e Zd Zdedej
                  eef   fdZdedej                  de
fdZdedededd	fd
Zdedededd	fdZy	)	BaseRouterJ   r   c                     t               rO   NotImplementedError)r'   rJ   s     r*   matcheszBaseRoute.matches       !##r+   r   r   c                    t               rO   r   )r'   r   r   s      r*   url_path_forzBaseRoute.url_path_for   r   r+   rK   rL   Nc                    K   t               wrO   r   r'   rJ   rK   rL   s       r*   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   r6   r9   r   r   updater   )r'   rJ   rK   rL   r   child_scoperP   websocket_closes           r*   __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*)r,   r-   r.   r   r1   Tupler6   r   r0   r3   r   r   r   r   r   r   r<   r+   r*   r   r      s    $U $v||E5L'A $$ $

 $w $$% $' $ $$ $0E 0G 04 0D 0r+   r   c                      e Zd Zddddddedej
                  dej                  f   dej                  ej                  e      dej                  e   d	e	d
ej                  ej                  e      ddfdZdedej                  eef   fdZdedej                  defdZdedededdfdZdej                  de	fdZdefdZy)RouteNT)methodsr   include_in_schema
middlewarer`   r[   .r   r   r   r   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        |      | _        |dg}n|| _        |-t        |      D ]  \  }}	}
 ||	d| j                  i|
| _        ! |d | _        nL|D ch c]  }|j#                          c}| _        d| j                   v r| j                   j%                  d       t'        |      \  | _        | _        | _        y c c}w )Nrn    Routed paths must start with '/'GETrR   HEAD)rx   r`   r[   r_   r   r   rB   rC   rD   rE   rF   
isfunctionismethodrU   rR   reversedr   upperr   r   r   r   ra   )r'   r`   r[   r   r   r   r   endpoint_handlerclsargskwargsmethods               r*   r&   zRoute.__init__   sV    s#G%GG#	 *.,HX&D	!2#)9+<+<=/44 )9+<+<=./73C3CDT3U'1DH '  DH!%-j%9!T6d=488=f= &: ?DL9@AvFLLNADL$  (COPTCU@)4+@	 Bs   	E0rJ   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   r   r[   r   r   )r   r   r   	groupdictre   ra   convertdictgetr   r[   r   r6   r:   r;   r9   	r'   rJ   
route_pathr   matched_paramsri   rj   r   r   s	            r*   r   zRoute.matches   s    =F"'.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN3' #9"599]B#?@"">2+/==U<<E(O4<<$G ==+55 ::{22zz2~r+   r   c                $   t        |j                               }t        | j                  j                               }|| j                  k7  s||k7  rt	        ||      t        | j                  | j                  |      \  }}|rJ t        |d      S )Nr   r`   protocolry   r$   ra   r   r   rl   r   r   r'   r   r   seen_paramsexpected_paramsr`   remaining_paramss          r*   r   zRoute.url_path_for  s    +**,-d3388:;499 >t[11!/d33["
 $##D622r+   rK   rL   c                 "  K   | j                   r`|d   | j                   vrOddj                  | j                         i}d|v rt        d|      t        dd|      } ||||       d {    y | j	                  |||       d {    y 7 !7 w)Nr   Allowr!   rR   i  )r   headerszMethod Not Allowed)r   r"   r   r   rR   )r'   rJ   rK   rL   r   rP   s         r*   r   zRoute.handle  s     <<E(O4<<?		$,, 78G~#WEE,(c7 5'4000((5'4000 10s$   A'B)B*BBBBotherc                     t        |t              xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rO   )rB   r   r`   r[   r   r'   r   s     r*   __eq__zRoute.__eq__+  sR    ue$ .		UZZ'./. -		
r+   c                     | j                   j                  }t        | j                  xs g       }| j                  | j
                  }}| d|d|d|dS )N(path=, name=z
, methods=rt   )r)   r,   r   r   r`   r   )r'   
class_namer   r`   r   s        r*   __repr__zRoute.__repr__3  sT    ^^,,
+,YY		dVD874(*WKqQQr+   )r,   r-   r.   r0   r1   Callabler3   OptionalListboolSequencer   r&   r   r   r6   r   r   r   r   r   r   r   r   r<   r+   r*   r   r      s$    6:%)"&CG'V'V //#vzz/2'V
 S!12'V ooc"'V  'V OOFOOJ$?@'V 
'VRU v||E5L'A $3 3

 3w 31% 1' 1 1$ 1
FJJ 
4 
R# Rr+   r   c                   N   e Zd Zddddedej
                  dej                  f   dej                  e   dej                  ej                  e	      ddf
d	Z
d
edej                  eef   fdZdedej                  defdZd
edededdfdZdej                  defdZdefdZy)WebSocketRouteN)r   r   r`   r[   .r   r   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 ]  \  }}} ||d| j                  i|| _        ! t        |      \  | _        | _        | _        y )Nrn   r   rR   )rx   r`   r[   r_   r   rB   rC   rD   rE   rF   r   r   rZ   rR   r   r   r   r   ra   )	r'   r`   r[   r   r   r   r   r   r   s	            r*   r&   zWebSocketRoute.__init__;  s     s#G%GG#	 *.,HX&D	#)9+<+<=/44 )9+<+<=./73C3CDT3U(2DH  DH!%-j%9!T6d=488=f= &: DPPTCU@)4+@r+   rJ   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   r   r   )r   r   r   r   re   ra   r   r   r   r   r[   r6   r;   r9   r   s	            r*   r   zWebSocketRoute.matchesX  s    =K''.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN3' #9"599]B#?@"">2+/==Uzz;..zz2~r+   r   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          r*   r   zWebSocketRoute.url_path_forg  s    +**,-d3388:;499 >t[11!/d33["
 $##D;77r+   rK   rL   c                 F   K   | j                  |||       d {    y 7 wrO   rR   r   s       r*   r   zWebSocketRoute.handlet       hhugt,,,   !!r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rO   )rB   r   r`   r[   r   s     r*   r   zWebSocketRoute.__eq__w  s;    un- 0		UZZ'0/	
r+   c                 h    | j                   j                   d| j                  d| j                  dS )Nr   r   rt   )r)   r,   r`   r   r'   s    r*   r   zWebSocketRoute.__repr__~  s/    ..))*&WTYYMQRSSr+   )r,   r-   r.   r0   r1   r   r3   r   r   r   r&   r   r   r6   r   r   r   r   r   r   r   r   r   r<   r+   r*   r   r   :  s     &*CGVV //#vzz/2V
 ooc"V OOFOOJ$?@V 
V:U v||E5L'A 8 8

 8w 8-% -' - -$ -
FJJ 
4 
T# Tr+   r   c                      e Zd Z	 	 	 ddddedej
                  e   dej
                  ej                  e      dej
                  e   dej
                  ej                  e	      ddfd	Z
edej                  e   fd
       Zdedej                  eef   fdZdedej$                  defdZdedededdfdZdej$                  defdZdefdZy)MountNr   r`   rR   routesr   r   r   c                   |dk(  s|j                  d      sJ d       |	|J d       |j                  d      | _        ||| _        nt	        |      | _        | j                  | _        |-t        |      D ]  \  }}} ||d| j
                  i|| _        ! || _        t        | j                  dz         \  | _	        | _
        | _        y )Nrp   rn   r   z0Either 'app=...', or 'routes=' must be specified)r   rR   z/{path:path})rx   rstripr`   	_base_appRouterrR   r   r   r   r   r   ra   )	r'   r`   rR   r   r   r   r   r   r   s	            r*   r&   zMount.__init__  s     rzT__S1U3UU1Ov1	>=	>1KK$	?&)DN#62DN>>!%-j%9!T6d=488=f= &:	COII&D
@)4+@r+   c                 0    t        | j                  dg       S Nr   )getattrr   r   s    r*   r   zMount.routes  s    t~~x44r+   rJ   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_pathrp   rn   r`   r   app_root_path)r   r   r   r[   )r   r   r   r   r   re   ra   r   rh   r   r   r   rR   r6   r;   r9   )r'   rJ   r   r   r   r   ri   rj   remaining_pathmatched_pathr   r   s               r*   r   zMount.matches  s   =11		+r2I'.JOO))*5E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN3' #9!$~'9'9&'A!A)*@S-@,@A"599]B#?@"">2#. &+YY	%J!*\!9 $  zz;..zz2~r+   r   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)Nr`   rn   )r`   rq   r7   rp   r   )r   r}   rl   r   ra   r   rx   r   r   r   r   r   r0   r   r   )
r'   r   r   r`   r   remaining_name
path_kwargpath_prefixrouteurls
             r*   r   zMount.url_path_for  s   99 TTYY%66[;P"-f"5"<"<S"AK%3  $"7"7&"D" $D))YY$//$))c/"Byy !% "&c$))nq&8&:!;$0J"$K,:  $"7"7-)K) %+5 (**,%,,^P?OPC"(//4s3x?#,,  + 4-- $ s   AE&&	E21E2rK   rL   c                 F   K   | j                  |||       d {    y 7 wrO   r   r   s       r*   r   zMount.handle  r   r   r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rO   )rB   r   r`   rR   r   s     r*   r   zMount.__eq__  s;    ue$ &		UZZ'&EII%	
r+   c                     | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrp   r   r   , app=rt   )r)   r,   r   r`   rR   r'   r   r   s      r*   r   zMount.__repr__  F    ^^,,
yyBVDII=xvdhh\QRSSr+   )NNN)r,   r-   r.   r0   r1   r   r   r   r   r   r&   propertyr   r   r   r   r6   r   r3   r   r   r   r   r   r   r   r   r<   r+   r*   r   r     s8    )->B%)
 DH

 __W%
 	 :;	

 ooc"
 OOFOOJ$?@
 

6 5I. 5 5U v||E5L'A B. .

 .w .B-% -' - -$ -
FJJ 
4 
T# Tr+   r   c            	          e Zd Z	 ddededej                  e   ddfdZedej                  e
   fd       Zdedej                  eef   fd	Zded
ej                   defdZdedededdfdZdej                   defdZdefdZy)HostNhostrR   r   r   c                     |j                  d      rJ d       || _        || _        || _        t	        |      \  | _        | _        | _        y )Nrn   zHost must not start with '/')rx   r  rR   r   r   
host_regexhost_formatra   )r'   r  rR   r   s       r*   r&   zHost.__init__  sK     ??3'G)GG'		COPTCU@)4+@r+   c                 0    t        | j                  dg       S r   )r   rR   r   s    r*   r   zHost.routes  s    txx2..r+   rJ   c                    |d   dv rt        |      }|j                  dd      j                  d      d   }| j                  j	                  |      }|r|j                         }|j                         D ]&  \  }}| j                  |   j                  |      ||<   ( t        |j                  di             }|j                  |       || j                  d	}	t        j                  |	fS t        j                  i fS )
Nr   r   rJ   r  rp   rq   r   r   )r   r[   )r   r   r   r  r   r   re   ra   r   r   r   rR   r6   r;   r9   )
r'   rJ   r   r  r   r   ri   rj   r   r   s
             r*   r   zHost.matches  s    =11E*G;;vr*005a8DOO))$/E!&!2"0"6"6"8JC*.*?*?*D*L*LU*SN3' #9"599]B#?@"">2.9txxPzz;..zz2~r+   r   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)Nr`   )r`   r  rq   r7   )r`   r   r  )r   rh   rl   r  ra   r   rx   r   r   r   r0   r   r   )	r'   r   r   r`   r  r   r   r  r  s	            r*   r   zHost.url_path_for  s;   99 TTYY%66[;P??6*D%3  $"7"7&"D" $Dt44YY$//$))c/"Byy !% "&c$))nq&8&:!;%3  $"7"7&"D" **,%,,^P?OPC"C3<<dSS + 4-- $ s   03D33	D?>D?rK   rL   c                 F   K   | j                  |||       d {    y 7 wrO   r   r   s       r*   r   zHost.handle,  r   r   r   c                     t        |t              xr4 | j                  |j                  k(  xr | j                  |j                  k(  S rO   )rB   r  r  rR   r   s     r*   r   zHost.__eq__/  s;    ud# &		UZZ'&EII%	
r+   c                     | j                   j                  }| j                  xs d}| d| j                  d|d| j                  dS )Nrp   z(host=r   r  rt   )r)   r,   r   r  rR   r	  s      r*   r   zHost.__repr__6  r
  r+   rO   )r,   r-   r.   r0   r   r1   r   r&   r  r   r   r   r   r   r6   r   r3   r   r   r   r   r   r   r   r   r<   r+   r*   r  r    s    DHVV%V-3__S-AV	V /I. / /U v||E5L'A . .

 .w .6-% -' - -$ -
FJJ 
4 
T# Tr+   r  _Tc            	           e Zd Zdej                  e   fdZdefdZdej                  ej                  e
      dej                  e
   dej                  ej                     dej                  e   fdZy	)
_AsyncLiftContextManagercmc                     || _         y rO   )_cm)r'   r  s     r*   r&   z!_AsyncLiftContextManager.__init__@  s	    r+   r   c                 >   K   | j                   j                         S wrO   )r  	__enter__r   s    r*   
__aenter__z#_AsyncLiftContextManager.__aenter__C  s     xx!!##s   exc_type	exc_value	tracebackc                 D   K   | j                   j                  |||      S wrO   )r  __exit__)r'   r"  r#  r$  s       r*   	__aexit__z"_AsyncLiftContextManager.__aexit__F  s!      xx  9i@@s    N)r,   r-   r.   r1   ContextManagerr  r&   r!  r   TypeBaseExceptiontypesTracebackTyper   r'  r<   r+   r*   r  r  ?  s    6004 $" $A//&++m"<=A ??=1A ??5#6#67	A
 
	Ar+   r  lifespan_contextc                     t        j                  |       t        j                        dt        j
                  dt        t        j
                     ffd       }|S )NrR   r   c                 &    t         |             S rO   )r  )rR   cmgrs    r*   wrapperz+_wrap_gen_lifespan_context.<locals>.wrapperV  s    'S	22r+   )
contextlibcontextmanagerrC   wrapsr1   r3   r  )r-  r1  r0  s     @r*   _wrap_gen_lifespan_contextr5  O  sT    
 $$%56D__T3VZZ 3$<VZZ$H 3 3 Nr+   c                   @    e Zd Zd
dZddZdeddfdZdededefd	Zy)_DefaultLifespanc                     || _         y rO   )_router)r'   routers     r*   r&   z_DefaultLifespan.__init__^  s	    r+   r   Nc                 T   K   | j                   j                          d {    y 7 wrO   )r9  startupr   s    r*   r!  z_DefaultLifespan.__aenter__a  s     ll""$$$   (&(exc_infoc                 T   K   | j                   j                          d {    y 7 wrO   )r9  shutdown)r'   r>  s     r*   r'  z_DefaultLifespan.__aexit__d  s     ll##%%%r=  r'   rR   c                     | S rO   r<   )r'   rR   s     r*   r   z_DefaultLifespan.__call__g  s    r+   )r:  r   r   N)	r,   r-   r.   r&   r!  objectr'  r  r   r<   r+   r*   r7  r7  ]  s9    %& &D &r  2 r+   r7  c                   f   e Zd Z	 	 	 	 	 	 d*dddej                  ej
                  e      dedej                  e   dej                  ej
                  ej                  g ej                  f         dej                  ej
                  ej                  g ej                  f         dej                  eej                        d	ej                  ej
                  e      d
dfdZdededed
dfdZdedej                  d
efdZd+dZd+dZdededed
dfdZdededed
dfdZdededed
dfdZdej                  d
efdZ	 d,dededej                  e   d
dfdZ	 d,dededej                  e   d
dfdZ	 	 	 d-dedej                  egej<                  ej>                  e    e f   f   d ej                  ejB                  e      dej                  e   d!ed
dfd"Z"	 d,dedej                  e#gej>                  d   f   dej                  e   d
dfd#Z$	 	 	 d-ded ej                  ejB                  e      dej                  e   d!ed
ej                  f
d$Z%	 d,dedej                  e   d
ej                  fd%Z&d&ed'ej                  g ej                  f   d
dfd(Z'd&ed
ej                  fd)Z(y).r   Nr   r   redirect_slashesdefault
on_startupon_shutdownlifespanr   r   c                   |g n
t        |      | _        || _        || j                  n|| _        |g n
t        |      | _        |g n
t        |      | _        |s|r1t        j                  dt               |rt        j                  d       |t        |       | _        nt        j                  |      r+t        j                  dt               t        |      | _        nGt        j                  |      r+t        j                  dt               t!        |      | _        n|| _        | j"                  | _        |r0t'        |      D ]!  \  }}	}
 || j$                  g|	i |
| _        # y y )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://www.starlette.io/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   rE  	not_foundrF  rG  rH  r?   r@   rA   r7  r-  rF   isasyncgenfunctionr   isgeneratorfunctionr5  rR   middleware_stackr   )r'   r   rE  rF  rG  rH  rI  r   r   r   r   s              r*   r&   zRouter.__init__l  sY   " #NbV 0)0t~~g * 2"Z8H!,!42${:KMMK #	  :J4:PD!''1MMJ"
 %8%D! ((2MMJ"
 %?%D! %-D! $%-j%9!T6(+D,A,A(SD(SF(S% &: r+   rJ   rK   rL   c                    K   |d   dk(  rt               } ||||       d {    y d|v rt        d      t        dd      } ||||       d {    y 7 57 w)Nr   r   rR   r   r   r   )r   r   r   )r'   rJ   rK   rL   r   rP   s         r*   rK  zRouter.not_found  sl     =K',.O!%$777
 E>C00(#FHugt,,, 8 	-s!    AA/AAAAr   r   c                    | j                   D ]  }	  |j                  |fi |c S  t        ||      # t        $ r Y 1w xY wrO   )r   r   r   )r'   r   r   r  s       r*   r   zRouter.url_path_for  sP    [[E)u))$>+>> !
 4--   s   3	??c                 v   K   | j                   D ]$  }t        |      r |        d{     |        & y7 w)z7
        Run any `.on_startup` event handlers.
        N)rG  r   r'   handlers     r*   r<  zRouter.startup  s/      G )i		 '   %979c                 v   K   | j                   D ]$  }t        |      r |        d{     |        & y7 w)z8
        Run any `.on_shutdown` event handlers.
        N)rH  r   rR  s     r*   r@  zRouter.shutdown  s1      ''G )i		 (rT  c                 6  K   d}|j                  d      } |        d{    	 | j                  |      4 d{   }|#d|vrt        d      |d   j                  |        |ddi       d{    d} |        d{    ddd      d{     |dd	i       d{    y7 7 q7 <7 -7 # 1 d{  7  sw Y   /xY w7 $# t        $ rA t        j                         }|r |d
|d       d{  7     |d|d       d{  7    w xY ww)z{
        Handle ASGI lifespan messages, which allows us to manage application
        startup and shutdown events.
        FrR   Nstatez:The server does not support "state" in the lifespan scope.r   zlifespan.startup.completeTzlifespan.shutdown.completezlifespan.shutdown.failed)r   messagezlifespan.startup.failed)r   r-  RuntimeErrorr   r*  r$  
format_exc)r'   rJ   rK   rL   startedrR   maybe_stateexc_texts           r*   rI  zRouter.lifespan  s+    
 ))E*i	?,,S11[*e+*X  '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 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)rN  r   s       r*   r   zRouter.__call__  s       ##E7D999r   c                   K   |d   dv sJ d|vr| |d<   |d   dk(  r| j                  |||       d {    y d }| j                  D ]r  }|j                  |      \  }}|t        j                  k(  r.|j                  |       |j                  |||       d {     y |t        j                  k(  sl|o|}|}t |-|j                         |j                  |||       d {    y t        |      }	|d   dk(  r| j                  r|	dk7  rt        |      }
|	j                  d      r|
d   j                  d      |
d<   n|
d   dz   |
d<   | j                  D ]^  }|j                  |
      \  }}|t        j                  k7  s+t        |
      }t        t!        |      	      } ||||       d {     y  | j#                  |||       d {    y 7 7 B7 7 +7 w)
Nr   )r   r   rI  r:  rI  r   rn   r`   r  )r  )rI  r   r   r6   r;   r   r   r:   r   rE  r   endswithr   r9   r   r   r0   rF  )r'   rJ   rK   rL   rD   r  r   r   partial_scoper   redirect_scoperedirect_urlrP   s                r*   rR   z
Router.app  s    V} AAAA5 "E(O=J&--w555[[E "'u!5E;

"[)ll5'4888%--'GO + !  LL'..666#E*
=F"t'<'<sAR!%[N""3')7)?)F)Fs)Kv&)7)?#)Ev&%*]]>%B"{EJJ&#&^#<L/C4EFH"5'4888 % ll5'4000S 6 9 7  9 	1sk   1G#GA$G#GG#3G#6/G#%G&BG#.G#3G4G#G!G#G#G#G#!G#r   c                 X    t        |t              xr | j                  |j                  k(  S rO   )rB   r   r   r   s     r*   r   zRouter.__eq__.  s!    %(HT[[ELL-HHr+   r`   rR   c                 V    t        |||      }| j                  j                  |       y N)rR   r   )r   r   append)r'   r`   rR   r   r  s        r*   mountzRouter.mount1  s$     d$/5!r+   r  c                 V    t        |||      }| j                  j                  |       y rf  )r  r   rg  )r'   r  rR   r   r  s        r*   r  zRouter.host7  s$     Ts.5!r+   r[   r   r   c                 Z    t        |||||      }| j                  j                  |       y )N)r[   r   r   r   )r   r   rg  )r'   r`   r[   r   r   r   r  s          r*   	add_routezRouter.add_route=  s1     /
 	5!r+   c                 V    t        |||      }| j                  j                  |       y )N)r[   r   )r   r   rg  )r'   r`   r[   r   r  s        r*   add_websocket_routezRouter.add_websocket_routeP  s$     thTB5!r+   c                      t        j                  dt               dt        j                  dt        j                  f fd}|S )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://www.starlette.io/routing/#http-routing for the recommended approach.rE   r   c                 4    j                  |        | S )N)r   r   r   )rk  )rE   r   r   r   r`   r'   s    r*   	decoratorzRouter.route.<locals>.decoratorm  s*    NN"3   Kr+   r?   r@   rA   r1   r   )r'   r`   r   r   r   rp  s   ````` r*   r  zRouter.routeY  sB     	d	
	FOO 	 	 	 r+   c                      t        j                  dt               dt        j                  dt        j                  f fd}|S )a  
        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://www.starlette.io/routing/#websocket-routing for the recommended approach.rE   r   c                 0    j                  |        | S )N)r   )rm  )rE   r   r`   r'   s    r*   rp  z)Router.websocket_route.<locals>.decorator  s    $$T4d$;Kr+   rq  )r'   r`   r   rp  s   ``` r*   websocket_routezRouter.websocket_routey  s=     	`	
	FOO 	 	 r+   
event_typerE   c                     |dv sJ |dk(  r| j                   j                  |       y | j                  j                  |       y )N)r<  r@  r<  )rG  rg  rH  )r'   ru  rE   s      r*   add_event_handlerzRouter.add_event_handler  sA     4444"OO""4(##D)r+   c                      t        j                  dt               dt        j                  dt        j                  f fd}|S )NzThe `on_event` decorator is deprecated, and will be removed in version 1.0.0. Refer to https://www.starlette.io/lifespan/ for recommended approach.rE   r   c                 ,    j                  |        | S rO   )rw  )rE   ru  r'   s    r*   rp  z"Router.on_event.<locals>.decorator  s    "":t4Kr+   rq  )r'   ru  rp  s   `` r*   on_eventzRouter.on_event  s;    T	
	FOO 	 	 r+   )NTNNNNrB  rO   )NNT))r,   r-   r.   r1   r   r   r   r   r   r   r3   r   r   r&   r   r   r   rK  r0   r   r   r<  r@  rI  r   rR   r   rh  r  r   Union	Awaitabler   r   rk  r   rm  r  rt  rw  rz  r<   r+   r*   r   r   k  s    ?C!%,0   ;?@T DH@T	 :;@T @T )	@T
 OOOOFOOB

N;<
@T __OOFOOB

N;<
@T //(6::"67@T OOFOOJ$?@@T  
!@TD-U -W -D -T -. .

 .w .?E ?G ?4 ?D ?::E :G :4 :D :01u 01w 01d 01t 01dIFJJ I4 I EI""%"-3__S-A"	" EI""%"-3__S-A"	" 6:%)"&"" //Iv||F$4$4X$>$HII
" S!12" ooc""  " 
". &*	"" //9+v/?/?/E"EF" ooc"	"
 
" 6:%)"& S!12 ooc"	
   
B 7;%s3	,**%+__R^%D*	*3 6?? r+   r   )Mr2  rC   rF   r~   r$  r+  r1   r?   r   enumr   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   r6   r3   r   rH   r   r{  r|  rU   rZ   r0   r_   r2   r   rl   r   rz   Patternr   r   r   r   r   r  TypeVarr  AsyncContextManagerr  	Generatorr5  r7  r   r<   r+   r*   <module>r     s      	     *  E > 3 ; : : . + & M M C C :V9 VD ,

 ,t ,
//		6<< 0 0 :H DEE 	2
//9+v'7'7'==
>&'vsFJJ7 'C '
kk#y'<"<= S#X& \\#v{{38,,-	 bjjOP7A
7A\\&..%sFKKYvzz=R8R,SST7At0 0<bRI bRJETY ETPoTI oTdET9 ETP V^^DAv99"= A oo	f&&vzz6::vzz'IJJ __fjj\6#=#=fjj#IIJ	 y yr+   