
    h                     8   % 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rS SKrS SK	r	S SK
r
S SK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JrJrJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'  S SK(J)r)J*r+  SSK,J-r-  SS	K J.r.J/r/J0r0  SS
K1J2r2  SSK3J4r4  SSK5J6r6J7r7  SSK8J9r9J:r:J;r;J<r<J=r=  SSK>J?r?  SSK@JArA  SSKBJCrCJDrD  SSKEJFrF  SrG\(       a  SSKHJIrI  \\J\J4   rKO\LrK\
R                  S:  a#  \
R                  R                  S5      (       a  \P4O\
R                  S:  a  \Q4OSrR\S" \T" \U\+R                  " S5      SS 5      5      rW\\#\US4      \XS'   \	R                  " S5      rZ\\ \J      \XS'   \	R                  " S5      r[\\ \J      \XS'   \	R                  " S 5      r]\\J   \XS!'   \\A/\\\D      4   r^\#\S"   \!\J   4   r_\R                  " \R                  S#S$9ra " S% S&\%S'S(9rb " S) S*\"\S+   5      rc " S, S+\ R                  5      re " S- S"\K\.5      rf " S. S/\f5      rgS0\AS1S4S2 jrh " S3 S4\c5      ri " S5 S6\i5      rj " S7 S8\i5      rk " S9 S:\c5      rl " S; S<\l5      rm " S= S>\l5      rn " S? S@\ R                  5      ro " SA SB\o5      rp " SC SD\p5      rq " SE SF\n5      rr " SG SH\e5      rs " SI SJ\e5      rt " SK SL\05      ru " SM SN\"\\c   \\c   5      rv " SO SP\"\\e   \\e   5      rw " SQ SR\/\\J\c4   5      rxSS\JS1\J4ST jrySS\JS1\J4SU jrzSS\JS1\J4SV jr{g)W    N)wraps)Path)MappingProxyType)TYPE_CHECKINGAny	AwaitableCallable	ContainerDictFinal	GeneratorIterableIteratorListMappingNoReturnOptionalPatternSetSizedTupleType	TypedDictUnioncast)URL__version__   )hdrs)AbstractMatchInfoAbstractRouterAbstractView)DEBUG)HttpVersion11)HandlerPathLike)HTTPExceptionHTTPExpectationFailedHTTPForbiddenHTTPMethodNotAllowedHTTPNotFound)FileResponse)Request)ResponseStreamResponse)AbstractRouteDef)
UrlDispatcherUrlMappingMatchInfoAbstractResourceResourcePlainResourceDynamicResourceAbstractRouteResourceRouteStaticResourceView)Application)   
   win32)r<       .   .YARL_VERSIONz$^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$HTTP_METHOD_REz*(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})ROUTE_RE/PATH_SEPr2   T)quotec                       \ rS rSr% \\S'   \\S'   \\   \S'   \\S'   \\S'   \\S4   \S'   S	\S
'   \\S'   S\S'   \	\S'   Sr
g)	_InfoDicth   path	formatterpattern	directoryprefixr7   routesr;   appdomainAbstractRuleMatchingrulehttp_exceptionr@   N)__name__
__module____qualname____firstlineno__str__annotations__r   r   r   r'   __static_attributes__r@       K/var/www/html/env/lib/python3.13/site-packages/aiohttp/web_urldispatcher.pyrJ   rJ   h   sG    
INS\OKC())	K
  !!r^   rJ   F)totalc                   ~   \ rS rSrSS.S\\   SS4S jjr\S\\   4S j5       r\\	R                  S\4S j5       5       r\	R                  S	\S\4S
 j5       r\	R                  S\S\4S j5       r\	R                  S\SS4S j5       r\	R                  S\4S j5       rSS jr\	R                  S\S\4S j5       rSrg)r3   {   Nnamerd   returnc                    Xl         g N_nameselfrd   s     r_   __init__AbstractResource.__init__|   s    
r^   c                     U R                   $ rg   rh   rk   s    r_   rd   AbstractResource.name       zzr^   c                     g)zGExposes the resource's canonical path.

For example '/foo/bar/{name}'

Nr@   ro   s    r_   	canonicalAbstractResource.canonical       r^   kwargsc                     g)z2Construct url for resource with additional params.Nr@   )rk   rv   s     r_   url_forAbstractResource.url_for   ru   r^   requestc                    #    g7f)zGResolve resource.

Return (UrlMappingMatchInfo, allowed_methods) pair.
Nr@   rk   rz   s     r_   resolveAbstractResource.resolve           rP   c                     g)zGAdd a prefix to processed URLs.

Required for subapplications support.
Nr@   rk   rP   s     r_   
add_prefixAbstractResource.add_prefix   ru   r^   c                     gz;Return a dict with additional info useful for introspectionNr@   ro   s    r_   get_infoAbstractResource.get_info   ru   r^   c                     g rg   r@   ro   s    r_   freezeAbstractResource.freeze   s    r^   rL   c                     g)z Perform a raw match against pathNr@   rk   rL   s     r_   	raw_matchAbstractResource.raw_match   ru   r^   rh   re   N)rW   rX   rY   rZ   r   r[   rl   propertyrd   abcabstractmethodrs   r   rx   r-   _Resolver}   r   rJ   r   r   boolr   r]   r@   r^   r_   r3   r3   {   s1   04    hsm   3    	A A A A 	W    	    	J) J J 	/c /d / /r^   r3   r7   c                   Z   \ rS rSrSSS.S\S\\\\   4   S\	\
   S\	\   SS4
S	 jjr\S\4S
 j5       r\S\4S j5       r\\R"                  S\	\   4S j5       5       r\S\	\   4S j5       r\R"                  S\4S j5       r\R"                  S\S\S\4S j5       rS\S\	\   4S jrSrg)r7      Nexpect_handlerresourcemethodhandlerr   r   re   c                l  ^ Uc  [         n[        R                  " U5      (       d:  [        R                  S:  a  [
        R                  " U5      (       d   SU< 35       eUR                  5       n[        R                  U5      (       d  [        U S35      e[        U5      (       d   U5       e[        R                  " U5      (       d/  [        R                  S:  a  [
        R                  " U5      (       a  O[        R                  " U5      (       a  [        R                  " S[        5        Ol[        U[         5      (       a  [#        U[$        5      (       a  OA[        R                  " S[        5        ['        U5      S[(        S[*        4U4S jj5       nUmUnXl        X l        X0l        X@l        g )	N)r<      zCoroutine is expected, got z is not allowed HTTP methodz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesrz   re   c                    >#    T" U 5      n[         R                  " U5      (       a
  UI S h  vN n[        U[        5      (       d   eU$  N7frg   )asyncioiscoroutine
isinstancer/   )rz   resultold_handlers     r_   handler_wrapper/AbstractRoute.__init__.<locals>.handler_wrapper   sE     $W-&&v..#)\F!&.9999 *s   )AA
A)_default_expect_handlerinspectiscoroutinefunctionsysversion_infor   upperrD   match
ValueErrorcallableisgeneratorfunctionwarningswarnDeprecationWarningr   type
issubclassr"   r   r-   r/   _method_handler_expect_handler	_resource)rk   r   r   r   r   r   r   s         @r_   rl   AbstractRoute.__init__   sl    !4N**>::w&7+F+F~+V+V	<((:;	< 
 ##F++x'BCDD  )') &&w//w&7+F+Fw+O+O((11MMH" &&:g|+L+LMM?AS 7^w >   "K%G-!r^   c                     U R                   $ rg   )r   ro   s    r_   r   AbstractRoute.method       ||r^   c                     U R                   $ rg   )r   ro   s    r_   r   AbstractRoute.handler   s    }}r^   c                     g)z8Optional route's name, always equals to resource's name.Nr@   ro   s    r_   rd   AbstractRoute.name   ru   r^   c                     U R                   $ rg   )r   ro   s    r_   r   AbstractRoute.resource   s    ~~r^   c                     gr   r@   ro   s    r_   r   AbstractRoute.get_info   ru   r^   argsrv   c                     g)/Construct url for route with additional params.Nr@   rk   r   rv   s      r_   rx   AbstractRoute.url_for   ru   r^   rz   c                 @   #    U R                  U5      I S h  vN $  N7frg   )r   r|   s     r_   handle_expect_header"AbstractRoute.handle_expect_header   s     ))'2222s   )r   r   r   r   )rW   rX   rY   rZ   r[   r   r%   r   r"   r   _ExpectHandlerr3   rl   r   r   r   r   r   rd   r   rJ   r   r   rx   r-   r/   r   r]   r@   r^   r_   r7   r7      sL    48/33"3" w\ 2233"
 !03" +,3" 
3"j       Ghsm G  G (#34   	J) J J 	>S >C >C > >3' 3h~>V 3r^   c                   <  ^  \ rS rSrSrS\\\4   S\SS4U 4S jjr\	S\
4S j5       r\	S\4S	 j5       r\	S\4S
 j5       r\	S\\   4S j5       rS\4S jr\	S\S   4S j5       rSS jr\	SS j5       r\R0                  SS j5       rSS jrS\4U 4S jjrSrU =r$ )r2      )_route_apps_current_app_frozen
match_dictroutere   Nc                 Z   > [         TU ]  U5        X l        / U l        S U l        SU l        g NF)superrl   r   r   r   r   )rk   r   r   	__class__s      r_   rl   UrlMappingMatchInfo.__init__  s+    $(*
37r^   c                 .    U R                   R                  $ rg   )r   r   ro   s    r_   r   UrlMappingMatchInfo.handler  s    {{"""r^   c                     U R                   $ rg   )r   ro   s    r_   r   UrlMappingMatchInfo.route  s    {{r^   c                 .    U R                   R                  $ rg   )r   r   ro   s    r_   r   "UrlMappingMatchInfo.expect_handler  s    {{///r^   c                     g rg   r@   ro   s    r_   rV   "UrlMappingMatchInfo.http_exception      r^   c                 6    U R                   R                  5       $ rg   )r   r   ro   s    r_   r   UrlMappingMatchInfo.get_info  s    {{##%%r^   )r;   .c                 ,    [        U R                  5      $ rg   )tupler   ro   s    r_   appsUrlMappingMatchInfo.apps  s    TZZ  r^   c                     U R                   (       a  [        S5      eU R                  c  Xl        U R                  R	                  SU5        g )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrk   rR   s     r_   add_appUrlMappingMatchInfo.add_app  s;    <<NOO$ #

!S!r^   c                 (    U R                   nUc   eU$ rg   )r   r   s     r_   current_appUrlMappingMatchInfo.current_app&  s    
r^   c                     [         (       a4  XR                  ;  a%  [        SR                  U R                  U5      5      eXl        g )Nz1Expected one of the following apps {!r}, got {!r})r#   r   r   formatr   r   s     r_   r   r   ,  s=    5**$"GNN

C 
  r^   c                     SU l         g )NT)r   ro   s    r_   r   UrlMappingMatchInfo.freeze7  s	    r^   c                 B   > S[         TU ]  5        SU R                   S3$ )Nz<MatchInfo z: >)r   __repr__r   rk   r   s    r_   r   UrlMappingMatchInfo.__repr__:  s%    UW-/04;;-qAAr^   )r   r   r   r   )rR   r;   re   N)re   r;   r   )rW   rX   rY   rZ   	__slots__r   r[   r7   rl   r   r%   r   r   r   r   r   r'   rV   rJ   r   r   r   r   r   setterr   r   r]   __classcell__r   s   @r_   r2   r2      s   >I4S> - D  # # # }   0 0 0  7  &) & !e./ ! !"  
    B# B Br^   c                   ^   ^  \ rS rSrSrS\SS4U 4S jjr\S\4S j5       rS\	4S jr
SrU =r$ )	MatchInfoErrori>  
_exceptionrV   re   Nc                 X   > Xl         [        TU ]	  0 [        U R                   5      5        g rg   )r  r   rl   SystemRouterk   rV   r   s     r_   rl   MatchInfoError.__init__B  s     ([9:r^   c                     U R                   $ rg   r  ro   s    r_   rV   MatchInfoError.http_exceptionF      r^   c                 v    SR                  U R                  R                  U R                  R                  5      $ )Nz<MatchInfoError {}: {}>)r   r  statusreasonro   s    r_   r   MatchInfoError.__repr__J  s.    (//OO""DOO$:$:
 	
r^   )rW   rX   rY   rZ   r   r'   rl   r   rV   r[   r   r]   r   r   s   @r_   r  r  >  sG    I;} ; ;   
# 
 
r^   r  rz   re   c                 6  #    U R                   R                  [        R                  S5      nU R                  [
        :X  aU  UR                  5       S:X  a5  U R                  R                  S5      I Sh  vN   SU R                  l	        g[        SU-  S9eg N#7f)zDefault handler for Expect header.

Just send "100 Continue" to client.
raise HTTPExpectationFailed if value of header is not "100-continue"
 z100-continues   HTTP/1.1 100 Continue

Nr   zUnknown Expect: %s)text)headersgetr   EXPECTversionr$   lowerwriterwriteoutput_sizer(   )rz   expects     r_   r   r   P  sy      __  b1F-'<<>^+..&&'GHHH)*GNN&'-AF-JKK (Hs   A1B3B4$Bc            	          ^  \ rS rSrSS.S\\   SS4U 4S jjjrSS.S\S	\\\	   \
4   S
\\   SS4S jjrSS jrS\S\4S jr\R$                  S\S\\\\4      4S j5       rS\4S jrS\S   4S jrSrU =r$ )r4   i`  Nrc   rd   re   c                Z   > [         TU ]  US9  0 U l        S U l        [	        5       U l        g )Nrc   )r   rl   _routes
_any_routeset_allowed_methods)rk   rd   r   s     r_   rl   Resource.__init__a  s+    d#1337*-%r^   r   r   r   r   r8   c                    U R                   R                  XR                  5      =n(       a  [        SUR                   S35      e[        XXS9nU R                  U5        U$ )Nz+Added route will never be executed, method z is already registeredr#  )r  r  r  r   r   r8   register_route)rk   r   r   r   r   	route_objs         r_   	add_routeResource.add_routeg  si     LL$$V__==5=,, (  "&4W	I&r^   c                    [        U[        5      (       d   SU< 35       eUR                  [        R                  :X  a  Xl        U R                  R                  UR                  5        XR                  UR                  '   g )Nz)Instance of Route class is required, got )	r   r8   r   r   METH_ANYr  r!  addr  rk   r   s     r_   r%  Resource.register_routey  sn    =
 
 	A6ui@	A 
 <<4==(#O!!%,,/%*U\\"r^   rz   c                 *  #    U R                  UR                  R                  5      =nc  S [        5       4$ U R                  R                  UR                  U R                  5      =n(       a  [        X#5      U R                  4$ S U R                  4$ 7frg   )
_matchrel_url	path_safer   r  r  r   r  r2   r!  )rk   rz   r   r   s       r_   r}   Resource.resolve  sz     ++goo&?&?@@JI;LL$$W^^T__EE5E&z94;P;PPPT****s   BBrL   c                     g rg   r@   r   s     r_   r/  Resource._match  s    r^   c                 ,    [        U R                  5      $ rg   lenr  ro   s    r_   __len__Resource.__len__      4<<  r^   c                 H    [        U R                  R                  5       5      $ rg   iterr  valuesro   s    r_   __iter__Resource.__iter__      DLL'')**r^   )r!  r  r  )r   r8   re   N)rW   rX   rY   rZ   r   r[   rl   r   r   r"   r%   r   r'  r%  r-   r   r}   r   r   r   r/  intr8  r   r?  r]   r   r   s   @r_   r4   r4   `  s    04 0 0 0 0 48 tL)723
 !0 
$++W + + 	3 8DcN#;  ! !+(?3 + +r^   r4   c                      ^  \ rS rSrSS.S\S\\   SS4U 4S jjjr\S\4S j5       rSS	 jr	S
\SS4S jr
S\S\\\\4      4S jrS\S\4S jrS\4S jrS\4S jrS\4S jrSrU =r$ )r5   i  Nrc   rL   rd   re   c                j   > [         TU ]  US9  U(       a  UR                  S5      (       d   eXl        g )Nrc   rF   )r   rl   
startswith_path)rk   rL   rd   r   s      r_   rl   PlainResource.__init__  s/    d#4??3////
r^   c                     U R                   $ rg   rF  ro   s    r_   rs   PlainResource.canonical  rq   r^   c                 6    U R                   (       d  SU l         g g )NrF   rI  ro   s    r_   r   PlainResource.freeze  s    zzDJ r^   rP   c                     UR                  S5      (       d   eUR                  S5      (       a   e[        U5      S:  d   eXR                  -   U l        g NrF   r   )rE  endswithr7  rF  r   s     r_   r   PlainResource.add_prefix  sL      %%%%??3''''6{Qjj(
r^   c                 (    U R                   U:X  a  0 $ g rg   rI  r   s     r_   r/  PlainResource._match  s    ::Ir^   c                      U R                   U:H  $ rg   rI  r   s     r_   r   PlainResource.raw_match  s    zzT!!r^   c                     SU R                   0$ )NrL   rI  ro   s    r_   r   PlainResource.get_info  s    

##r^   c                 @    [         R                  " U R                  SS9$ NTrL   encoded)r   buildrF  ro   s    r_   rx   PlainResource.url_for  s    yydjj$77r^   c                 j    U R                   b  SU R                   -   S-   OSnSU SU R                   S3$ )N'' r  z<PlainResource  r   )rd   rF  rj   s     r_   r   PlainResource.__repr__  s8    )-)>sTYY%B a

|155r^   rI  r   )rW   rX   rY   rZ   r[   r   rl   r   rs   r   r   r   r/  r   r   rJ   r   r   rx   r   r]   r   r   s   @r_   r5   r5     s    ;? S 8C= D  
 3  ) ) )3 8DcN#; "c "d "$) $8 86# 6 6r^   r5   c                     ^  \ rS rSr\R
                  " S5      r\R
                  " S5      rSrSS.S\	S\
\	   S	S4U 4S
 jjjr\S	\	4S j5       rS\	S	S4S jrS\	S	\
\\	\	4      4S jrS\	S	\4S jrS	\4S jrS\	S	\4S jrS	\	4S jrSrU =r$ )r6   i  z#\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*)\}z.\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*):(?P<re>.+)\}z[^{}/]+Nrc   rL   rd   re   c                  > [         T	U ]  US9  Xl        SnSn[        R	                  U5       GH  nU R
                  R                  U5      nU(       aJ  USR                  UR                  S5      U R                  5      -  nUSUR                  S5      -   S-   -  nMp  U R                  R                  U5      nU(       a?  USR                  " S0 UR                  5       D6-  nUSUR                  S5      -   S-   -  nM  SU;   d  SU;   a  [        SU S	U S
35      e[        U5      nXE-  nU[        R                  " U5      -  nGM      [        R                   " U5      nUR$                  R'                  [(        5      (       d   eUR'                  S5      (       d   eXpl        X@l        g ! [        R"                   a  n[        SU SU 35      S eS nAff = f)Nrc   r  z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rF   r@   )r   rl   
_orig_pathrE   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrN   rE  rG   _pattern
_formatter)
rk   rL   rd   rN   rM   partr   compiledexcr   s
            r_   rl   DynamicResource.__init__  s   d#	NN4(DHH&&t,E<..u{{5/A499MMS5;;u#55;;	$$..t4E,33Heoo6GHHS5;;u#55;;	d{cTk >$s4&!CDD &DIryy&G% )(	Jzz'*H **84444##C(((( # xx 	J}WIS>?TI	Js   F, ,G GGc                     U R                   $ rg   )ru  ro   s    r_   rs   DynamicResource.canonical  r  r^   rP   c                 8   UR                  S5      (       d   eUR                  S5      (       a   e[        U5      S:  d   e[        R                  " [        R
                  " U5      U R                  R                  -   5      U l        XR                  -   U l        g rN  )	rE  rO  r7  rp  rr  rq  rt  rN   ru  r   s     r_   r   DynamicResource.add_prefix  st      %%%%??3''''6{Q

299V#4t}}7L7L#LM ??2r^   c                     U R                   R                  U5      nUc  g UR                  5       R                  5        VVs0 s H  u  p4U[	        U5      _M     snn$ s  snnf rg   )rt  rj  rn  items_unquote_path_safe)rk   rL   r   keyvalues        r_   r/  DynamicResource._match  s]    ''-==B__=N=T=T=V
=VzsC#E**=V
 	
 
s   Ac                      U R                   U:H  $ rg   )rg  r   s     r_   r   DynamicResource.raw_match  s    $&&r^   c                 4    U R                   U R                  S.$ )N)rM   rN   )ru  rt  ro   s    r_   r   DynamicResource.get_info  s    !__GGr^   partsc           
          U R                   R                  UR                  5        VVs0 s H  u  p#U[        U5      _M     snn5      n[        R
                  " USS9$ s  snnf rX  )ru  
format_mapr  _quote_pathr   r[  )rk   r  kvurls        r_   rx   DynamicResource.url_for  sM    oo(()V![^*;)VWyyc400 *Ws   A
c                 v    U R                   b  SU R                   -   S-   OSnSR                  XR                  S9$ )Nr^  r_  r  z$<DynamicResource {name} {formatter}>)rd   rM   )rd   r   ru  rj   s     r_   r   DynamicResource.__repr__  s>    )-)>sTYY%B5<< = 
 	
r^   )ru  rg  rt  )rW   rX   rY   rZ   rp  rr  ri  rm  rl  r[   r   rl   r   rs   r   r   r/  r   r   rJ   r   r   rx   r   r]   r   r   s   @r_   r6   r6     s    
**;
<C**NOKD;?  $S  $8C=  $D  $  $D 3  3 3 3
3 
8DcN#; 
'c 'd 'H) H1s 1s 1
# 
 
r^   r6   c                      ^  \ rS rSrSS.S\S\\   SS4U 4S jjjr\S\4S j5       rS\SS4S	 jr	S\S\
4S
 jrSrU =r$ )PrefixResourcei
  Nrc   rP   rd   re   c                   > U(       a  UR                  S5      (       d   U5       eUS;   d  UR                  S5      (       a   U5       e[        TU ]  US9  [	        U5      U l        U R
                  S-   U l        g )NrF   )r  rF   rc   )rE  rO  r   rl   ro  _prefix_prefix2)rk   rP   rd   r   s      r_   rl   PrefixResource.__init__  sn    V..s33;V;3"&//#*>*>FF>d#$V,s*r^   c                     U R                   $ rg   )r  ro   s    r_   rs   PrefixResource.canonical  r   r^   c                     UR                  S5      (       d   eUR                  S5      (       a   e[        U5      S:  d   eXR                  -   U l        U R                  S-   U l        g rN  )rE  rO  r7  r  r  r   s     r_   r   PrefixResource.add_prefix  s\      %%%%??3''''6{Q,s*r^   c                     gr   r@   r   s     r_   r   PrefixResource.raw_match  s    r^   )r  r  )rW   rX   rY   rZ   r[   r   rl   r   rs   r   r   r   r]   r   r   s   @r_   r  r  
  so    =A +s +Xc] +d + + 3  + + +   r^   r  c                   J  ^  \ rS rSrSrSSSSSSS.S\S\S	\\   S
\\   S\	S\
S\
S\
SS4U 4S jjjrSS.S\S\\
   S\4S jjr\S\S\4S j5       rS\4S jrS\SS4S jrS\S\4S jrS\	4S jrS\\   4S jrS\S\4S jrS\S\4S jrS \S\4S! jr S\4S" jr!S#r"U =r#$ )$r9   i#  r  N   Frd   r   
chunk_size
show_indexfollow_symlinksappend_versionrP   rO   rd   r   r  r  r  r  re   c                  > [         T
U ]  XS9   [        U5      R                  5       R	                  SS9nUR                  5       (       d  [        SU S35      eX l        X`l	        XPl
        Xpl        X@l        Xl        [        SU R                  XS9[        S	U R                  XS9S
.U l        [#        U R                   5      U l        g ! [
         a  n	[        SU S35      U	eS n	A	ff = f)Nrc   T)strictr^  z' does not existz' is not a directoryGETr#  HEAD)r  r  )r   rl   r   
expanduserr}   FileNotFoundErrorr   is_dir
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr8   _handler  r   r!  )rk   rP   rO   rd   r   r  r  r  r  rs  r   s             r_   rl   StaticResource.__init__&  s     	+	IY224<<D<II !!q+?@AA#%% /-- !t||T "d	
 !$DLL 1' ! 	Iq+;<=5H	Is   &C	 	
C(C##C()r  filenamec                v   Uc  U R                   n[        U5      R                  S5      n[        R                  " U R
                  SS9n[        S:  a  X1R                  SS5      -  nOX1-  nU(       Ga  U R                  R                  U5      n U R                  (       aT  [        [        R                  R                  U5      5      nUR                  U R                  5        UR!                  5       nO,UR!                  5       nUR                  U R                  5         UR'                  5       (       aZ  UR)                  S5       nUR+                  5       nS S S 5        U R-                  W5      n	UR/                  U R0                  U	05      nU$ U$ ! ["        [$        4 a    Us $ f = f! , (       d  f       NX= f)NrF   TrY  r      %%25rb)r  r[   lstripr   r[  r  rC   replacer  joinpathr  r   osrL   normpathrelative_tor}   r   r  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rk   r  r  r  unresolved_pathnormalized_pathfilepathf
file_byteshs
             r_   rx   StaticResource.url_forJ  sj    !!11Nx='',iiT\\48& ((e44C.C"oo66x@O((&*277+;+;O+L&MO#//@.668H.668H((9
 !! ]]4(A!"J )''
3nnd&6&6%:;

  12  
 )(s%   A$F 5+F F*F'&F'*
F8
byte_arrayc                     [         R                  " 5       nUR                  U 5        [        R                  " UR                  5       5      nUR                  S5      $ )Nascii)hashlibsha256updatebase64urlsafe_b64encodedigestdecode)r  mb64s      r_   r  StaticResource._get_file_hashs  s?    NN	&&qxxz2zz'""r^   c                 J    U R                   U R                  U R                  S.$ )N)rO   rP   rQ   )r  r  r  ro   s    r_   r   StaticResource.get_infoz  s!    llll
 	
r^   r   c                     SU R                   ;   a  [        S5      e[        SXU R                  S9U R                   S'   U R                  R                  S5        g )NOPTIONSzOPTIONS route was set alreadyr#  )r  r   r8   r   r!  r+  )rk   r   s     r_   set_options_route StaticResource.set_options_route  sP    $>??"/wT5I5I#
Y 	!!),r^   rz   c                 n  #    UR                   R                  nUR                  nUR                  U R                  5      (       d  X R
                  :w  a  S [        5       4$ U R                  nX4;  a  S U4$ S[        U[        U R
                  5      S-   S  5      0n[        XPR                  U   5      U4$ 7f)Nr  r   )r0  r1  r   rE  r  r  r   r!  r  r7  r2   r  )rk   rz   rL   r   allowed_methodsr   s         r_   r}   StaticResource.resolve  s     ((t}}--$,,2F;//((( "4T#dll:Ka:O:Q5R"ST
#JV0DEWWs   B3B5c                 ,    [        U R                  5      $ rg   r6  ro   s    r_   r8  StaticResource.__len__  r:  r^   c                 H    [        U R                  R                  5       5      $ rg   r<  ro   s    r_   r?  StaticResource.__iter__  rA  r^   c                 "  #    UR                   S   n[        U5      nUR                  (       a
  [        5       eU R                  R                  U5      n[        R                  " 5       nUR                  S U R                  U5      I S h  vN $  N7f)Nr  )

match_infor   anchorr)   r  r  r   get_running_looprun_in_executor_resolve_path_to_response)rk   rz   r0  r  r  loops         r_   r  StaticResource._handle  s{     $$Z0=??  /!//228<'')))$00/
 
 	
 
s   BBB	Br  c                 f    U R                   (       aT  [        [        R                  R	                  U5      5      nUR                  U R                  5        UR                  5       nO,UR                  5       nUR                  U R                  5          UR                  5       (       a4  U R                  (       a  [        U R                  U5      SS9$ [        5       e [#        X0R$                  S9$ ! [        /[        Q7 a  n[        5       UeSnAff = f! [          a  n[        5       UeSnAff = f)zFTake the unresolved path and query the file system to form a response.Nz	text/html)r  content_type)r  )r  r   r  rL   r  r  r  r}   r   CIRCULAR_SYMLINK_ERRORr+   r  r  r.   _directory_as_htmlr)   PermissionErrorr,   r  )rk   r  r  	file_pathrs  s        r_   r  (StaticResource._resolve_path_to_response  s   
	,$$"&rww'7'7'H"I++DOO<+335	+335	%%doo6
	-!!###!44Y?%0 
 (/) " I2B2BCC) 434 	, .e+	,   	-/u,	-s<   A$C1 '+C1 >D 
D 1DDD
D0 D++D0dir_pathc           	         UR                  5       (       d   eUR                  U R                  5      R                  5       nS[	        U5       3nSU S3n/ nUR                  5       n[        U5       H  nUR                  U R                  5      R                  5       n[        U R                   SU 35      n	UR                  5       (       a  UR                   S3n
OUR                  n
UR                  SU	 S[	        U
5       S35        M     SR                  S	R                  U5      5      nS
U S	U S3nSU S3nSU S	U S3nU$ )z"returns directory's index as html.z
Index of /z<h1>z</h1>rF   z<li><a href="z">z	</a></li>z<ul>
{}
</ul>
z<body>
z
</body>z<head>
<title>z</title>
</head>z<html>
z
</html>)r  r  r  as_posixhtml_escapeiterdirsortedr  r  rd   appendr   join)rk   r  relative_path_to_dirindex_ofh1
index_list	dir_index_filerel_pathquoted_file_url	file_nameulbodyhead_strhtmls                  r_   r  !StaticResource._directory_as_html  sP       '33DOODMMO,@ ABCH:U#
$$&	I&E((9BBDH)T\\N!H:*FGO ||~~$zzl!,	!JJ	0;y3I2J)T ' %%dii
&;<"Rt9-$XJ.?@(2dV95r^   c                     U R                   b  SU R                   -   S-   OSnSR                  XR                  U R                  S9$ )Nr^  r  z/<StaticResource {name} {path} -> {directory!r}>)rd   rL   rO   )rd   r   r  r  rj   s     r_   r   StaticResource.__repr__  sE    (,		(=sTYY$2@GGLLDOO H 
 	
r^   )r!  r  r  r  r   r  r  r  )$rW   rX   rY   rZ   r  r[   r&   r   r   rB  r   rl   r   rx   staticmethodbytesr  rJ   r   r%   r  r-   r   r}   r8  r   r7   r?  r/   r  r   r  r  r   r]   r   r   s   @r_   r9   r9   #  sx   K #37$  %$"2"2 "2
 sm"2 !0"2 "2 "2 "2 "2 
"2 "2P *.	' ' !	'
 
'R #5 #S # #
) 
- -T -XW X X! !+(=1 +
W 
 
!D !D. !DF4 C @
# 
 
r^   r9   c                      ^  \ rS rSrS\SSSS4U 4S jjrS\SS4U 4S jjrS\SS4S	 jrS
\S\S\4S jr	S\
4S jrS\S\4S jrS\4S jrS\\   4S jrS\4S jrSrU =r$ )PrefixedSubAppResourcei  rP   rR   r;   re   Nc                 R   > [         TU ]  U5        X l        U R                  U5        g rg   )r   rl   _app_add_prefix_to_resources)rk   rP   rR   r   s      r_   rl   PrefixedSubAppResource.__init__  s#     	%%f-r^   c                 F   > [         TU ]  U5        U R                  U5        g rg   )r   r   r  )rk   rP   r   s     r_   r   !PrefixedSubAppResource.add_prefix  s    6"%%f-r^   c                     U R                   R                  nUR                  5        H6  nUR                  U5        UR	                  U5        UR                  U5        M8     g rg   )r  router	resourcesunindex_resourcer   index_resource)rk   rP   r  r   s       r_   r  /PrefixedSubAppResource._add_prefix_to_resources  sP    !!((*H ##H-'!!(+ +r^   r   rv   c                     [        S5      e)Nz3.url_for() is not supported by sub-application rootr   r   s      r_   rx   PrefixedSubAppResource.url_for  s    PQQr^   c                 4    U R                   U R                  S.$ )N)rR   rP   )r  r  ro   s    r_   r   PrefixedSubAppResource.get_info  s    yyDLL99r^   rz   c                 (  #    U R                   R                  R                  U5      I S h  vN nUR                  U R                   5        [	        UR
                  [        5      (       a  UR
                  R                  nX#4$ [        5       nX#4$  Nd7frg   )	r  r  r}   r   r   rV   r*   r  r   rk   rz   r  methodss       r_   r}   PrefixedSubAppResource.resolve  s{     99++33G<<
499%j//1EFF //??G "" eG"" =s   )BBA%Bc                 \    [        U R                  R                  R                  5       5      $ rg   )r7  r  r  rQ   ro   s    r_   r8  PrefixedSubAppResource.__len__  s     499##**,--r^   c                 \    [        U R                  R                  R                  5       5      $ rg   )r=  r  r  rQ   ro   s    r_   r?  PrefixedSubAppResource.__iter__  s     DII$$++-..r^   c                 J    SR                  U R                  U R                  S9$ )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rP   rR   )r   r  r  ro   s    r_   r   PrefixedSubAppResource.__repr__  s(    =DD<<TYY E 
 	
r^   r  )rW   rX   rY   rZ   r[   rl   r   r  r   rx   rJ   r   r-   r   r}   rB  r8  r   r7   r?  r   r]   r   r   s   @r_   r  r    s    .s . .4 .
. . .,s ,t ,RS RC RC R:) :#W # #. ./(=1 /
# 
 
r^   r  c                       \ rS rSr\R
                  S\S\4S j5       r\R
                  S\	4S j5       r
\\R
                  S\4S j5       5       rSrg)	rT   i#  rz   re   c                    #    g7f)z1Return bool if the request satisfies the criteriaNr@   r|   s     r_   r   AbstractRuleMatching.match$  r   r   c                     gr   r@   ro   s    r_   r   AbstractRuleMatching.get_info(  ru   r^   c                     g)zReturn a strNr@   ro   s    r_   rs   AbstractRuleMatching.canonical,  ru   r^   r@   N)rW   rX   rY   rZ   r   r   r-   r   r   rJ   r   r   r[   rs   r]   r@   r^   r_   rT   rT   #  sy    @7 @t @ @ 	J) J J 3   r^   rT   c                      ^  \ rS rSr\R
                  " S5      rS\SS4U 4S jjr\	S\4S j5       r
S\S\4S jrS	\S\4S
 jrS\S\4S jrS\4S jrSrU =r$ )Domaini2  z(?!-)[a-z\d-]{1,63}(?<!-)rS   re   Nc                 N   > [         TU ]  5         U R                  U5      U l        g rg   )r   rl   
validation_domain)rk   rS   r   s     r_   rl   Domain.__init__5  s    v.r^   c                     U R                   $ rg   r:  ro   s    r_   rs   Domain.canonical9  r   r^   c                   ^  [        U[        5      (       d  [        S5      eUR                  S5      R	                  5       nU(       d  [        S5      eSU;   a  [        S5      e[        SU-   5      nUR                  c   e[        U 4S jUR                  R                  S5       5       5      (       d  [        S5      eUR                  S	:X  a  UR                  $ UR                   S
UR                   3$ )NzDomain must be strrA   zDomain cannot be emptyz://zScheme not supportedzhttp://c              3   Z   >#    U  H   nTR                   R                  U5      v   M"     g 7frg   )re_partrj  ).0xrk   s     r_   	<genexpr>$Domain.validation.<locals>.<genexpr>G  s%     N6M4<<))!,,6Ms   (+zDomain not validP   :)r   r[   	TypeErrorrstripr  r   r   raw_hostallrh  port)rk   rS   r  s   `  r_   r9  Domain.validation=  s    &#&&011s#))+566f_344)f$%||'''Ncll6H6H6MNNN/0088r><<,,q
++r^   rz   c                    #    UR                   R                  [        R                  5      nU(       d  gU R	                  U5      $ 7fr   )r  r  r   HOSTmatch_domain)rk   rz   hosts      r_   r   Domain.matchM  s4     ""499-  &&s   AArQ  c                 <    UR                  5       U R                  :H  $ rg   )r  r:  rk   rQ  s     r_   rP  Domain.match_domainS  s    zz|t||++r^   c                     SU R                   0$ )NrS   r=  ro   s    r_   r   Domain.get_infoV  s    $,,''r^   r=  )rW   rX   rY   rZ   rp  rr  rA  r[   rl   r   rs   r9  r-   r   r   rP  rJ   r   r]   r   r   s   @r_   r7  r7  2  s    jj56G/s /t / 3  , , , '7 't ', , ,() ( (r^   r7  c                      ^  \ rS rSr\R
                  " S5      rS\SS4U 4S jjr\	S\4S j5       r
S\S\4S	 jrS
rU =r$ )
MaskDomainiZ  z(?!-)[a-z\d\*-]{1,63}(?<!-)rS   re   Nc                    > [         TU ]  U5        U R                  R                  SS5      R                  SS5      n[        R
                  " U5      U l        g )NrA   z\.*z.*)r   rl   r:  r  rp  rr  _mask)rk   rS   maskr   s      r_   rl   MaskDomain.__init__]  sC     ||##C/77TBZZ%
r^   c                 .    U R                   R                  $ rg   )r\  rN   ro   s    r_   rs   MaskDomain.canonicalb  s    zz!!!r^   rQ  c                 <    U R                   R                  U5      S L$ rg   )r\  rj  rT  s     r_   rP  MaskDomain.match_domainf  s    zz##D)55r^   )r\  )rW   rX   rY   rZ   rp  rr  rA  r[   rl   r   rs   r   rP  r]   r   r   s   @r_   rY  rY  Z  sX    jj78G&s &t &
 "3 " "6 6 6 6r^   rY  c                   p    \ rS rSrS\SSSS4S jr\S\4S j5       rS\	4S	 jr
S
\S\4S jrS\4S jrSrg)MatchedSubAppResourceij  rU   rR   r;   re   Nc                 T    [         R                  U 5        SU l        X l        Xl        g )Nr  )r3   rl   r  r  _rule)rk   rU   rR   s      r_   rl   MatchedSubAppResource.__init__k  s!    !!$'	
r^   c                 .    U R                   R                  $ rg   )rf  rs   ro   s    r_   rs   MatchedSubAppResource.canonicalq  s    zz###r^   c                 4    U R                   U R                  S.$ )N)rR   rU   )r  rf  ro   s    r_   r   MatchedSubAppResource.get_infou  s    yy$**55r^   rz   c                   #    U R                   R                  U5      I S h  vN (       d  S [        5       4$ U R                  R                  R                  U5      I S h  vN nUR                  U R                  5        [        UR                  [        5      (       a  UR                  R                  nX#4$ [        5       nX#4$  N Nf7frg   )rf  r   r   r  r  r}   r   r   rV   r*   r  r%  s       r_   r}   MatchedSubAppResource.resolvex  s     ZZ%%g...;99++33G<<
499%j//1EFF //??G "" eG"" /<s"   CC=CC A%CCc                 $    SU R                   < S3$ )Nz<MatchedSubAppResource -> r   r.  ro   s    r_   r   MatchedSubAppResource.__repr__  s    +DII=::r^   )r  r  rf  )rW   rX   rY   rZ   rT   rl   r   r[   rs   rJ   r   r-   r   r}   r   r]   r@   r^   r_   rd  rd  j  sc    1  $  $3 $ $6) 6	#W 	# 	#;# ;r^   rd  c                      ^  \ rS rSrSrSS.S\S\\\\	   4   S\
S\\   S	S4
U 4S
 jjjrS	\4S jr\S	\\   4S j5       rS\S\S	\4S jrS	\4S jrSrU =r$ )r8   i  zA route with resourceNr#  r   r   r   r   re   c                "   > [         TU ]  XXCS9  g )Nr   )r   rl   )rk   r   r   r   r   r   s        r_   rl   ResourceRoute.__init__  s     	N 	 	
r^   c                 `    SR                  U R                  U R                  U R                  S9$ )Nz3<ResourceRoute [{method}] {resource} -> {handler!r})r   r   r   )r   r   r   r   ro   s    r_   r   ResourceRoute.__repr__  s.    DKK;; L 
 	
r^   c                 J    U R                   c  g U R                   R                  $ rg   )r   rd   ro   s    r_   rd   ResourceRoute.name  s    >>!~~"""r^   r   rv   c                 X    U R                   c   eU R                   R                  " U0 UD6$ )r   )r   rx   r   s      r_   rx   ResourceRoute.url_for  s,    ~~)))~~%%t6v66r^   c                 T    U R                   c   eU R                   R                  5       $ rg   )r   r   ro   s    r_   r   ResourceRoute.get_info  s%    ~~)))~~&&((r^   r@   )rW   rX   rY   rZ   __doc__r[   r   r%   r   r"   r3   r   r   rl   r   r   rd   r   rx   rJ   r   r]   r   r   s   @r_   r8   r8     s     48



 w\ 223

 #	

 !0

 


 


# 

 #hsm # #
7S 7C 7C 7
)) ) )r^   r8   c                      ^  \ rS rSrS\SS4U 4S jjrS\S\S\4S jr\	S\
\   4S	 j5       rS\4S
 jrS\S\4S jr\	S\4S j5       r\	S\4S j5       rS\4S jrSrU =r$ )r  i  rV   re   Nc                 b   > [         TU ]  [        R                  U R                  5        Xl        g rg   )r   rl   r   r*  r  _http_exceptionr  s     r_   rl   SystemRoute.__init__  s     5-r^   r   rv   c                     [        S5      e)Nz).url_for() is not allowed for SystemRouter   r   s      r_   rx   SystemRoute.url_for  s    FGGr^   c                     g rg   r@   ro   s    r_   rd   SystemRoute.name  r   r^   c                     SU R                   0$ )NrV   r~  ro   s    r_   r   SystemRoute.get_info  s     $"6"677r^   rz   c                 "   #    U R                   e7frg   r  r|   s     r_   r  SystemRoute._handle  s     """s   c                 .    U R                   R                  $ rg   )r~  r  ro   s    r_   r  SystemRoute.status      ##***r^   c                 .    U R                   R                  $ rg   )r~  r  ro   s    r_   r  SystemRoute.reason  r  r^   c                      SR                  U S9$ )Nz*<SystemRoute {self.status}: {self.reason}>ro   )r   ro   s    r_   r   SystemRoute.__repr__  s    ;BBBMMr^   r  )rW   rX   rY   rZ   r'   rl   r[   r   rx   r   r   rd   rJ   r   r-   r/   r  rB  r  r  r   r]   r   r   s   @r_   r  r    s    .} . .HS HC HC H hsm  8) 8#W # # + + + + + +N# N Nr^   r  c                   J    \ rS rSrS\4S jrS\\S\4   4S jrS\	4S jr
Srg)r:   i  re   c                 P  #    U R                   R                  [        R                  ;  a  U R	                  5         [        X R                   R                  R                  5       S 5      nUc  U R	                  5         U" 5       I S h  vN n[        U[        5      (       d   eU$  N7frg   )	rz   r   r   METH_ALL_raise_allowed_methodsgetattrr  r   r/   )rk   r   rets      r_   _iter
View._iter  s}     <<dmm3'')||2288:DA>'')Hn#~....
 s   BB&B$B&Nc                 >    U R                  5       R                  5       $ rg   )r  	__await__ro   s    r_   r  View.__await__  s    zz|%%''r^   c                     [         R                   Vs1 s H%  n[        XR                  5       5      (       d  M#  UiM'     nn[	        U R
                  R                  U5      es  snf rg   )r   r  hasattrr  r*   rz   r   )rk   r  r  s      r_   r  View._raise_allowed_methods  sD    &*mmPmwtWWY7O1mP"4<<#6#6HH Qs
   "A!A!r@   )rW   rX   rY   rZ   r/   r  r   r   r  r   r  r]   r@   r^   r_   r:   r:     s4    	^ 	(9S$%>? (I Ir^   r:   c                   `    \ rS rSrS\\   SS4S jrS\4S jrS\	\   4S jr
S\S\4S	 jrS
rg)ResourcesViewi  r  re   Nc                     Xl         g rg   
_resources)rk   r  s     r_   rl   ResourcesView.__init__  s    #r^   c                 ,    [        U R                  5      $ rg   )r7  r  ro   s    r_   r8  ResourcesView.__len__  s    4??##r^   c              #   8   #    U R                    S h  vN   g  N7frg   r  ro   s    r_   r?  ResourcesView.__iter__  s     ??""   r   c                     XR                   ;   $ rg   r  rk   r   s     r_   __contains__ResourcesView.__contains__  s    ??**r^   r  )rW   rX   rY   rZ   r   r3   rl   rB  r8  r   r?  objectr   r  r]   r@   r^   r_   r  r    sL    $$'7"8 $T $$ $#(#34 #+V + +r^   r  c                   \    \ rS rSrS\\   4S jrS\4S jrS\	\
   4S jrS\S\4S jrS	rg
)
RoutesViewi  r  c                 l    / U l         U H'  nU H  nU R                   R                  U5        M      M)     g rg   )r  r  )rk   r  r   r   s       r_   rl   RoutesView.__init__  s/    ,.!H!##E* " "r^   re   c                 ,    [        U R                  5      $ rg   r6  ro   s    r_   r8  RoutesView.__len__  r:  r^   c              #   8   #    U R                    S h  vN   g  N7frg   r  ro   s    r_   r?  RoutesView.__iter__  s     <<r  r   c                     XR                   ;   $ rg   r  r,  s     r_   r  RoutesView.__contains__  s    $$r^   r  N)rW   rX   rY   rZ   r   r3   rl   rB  r8  r   r7   r?  r  r   r  r]   r@   r^   r_   r  r    sD    +$'7"8 +! ! (=1  %& %T %r^   r  c                     ^  \ rS rSr\R
                  " S5      rS6U 4S jjrS\S\	4S jr
S\\   4S jrS\4S	 jrS
\S\4S jrS\S\4S jrS\4S jrS\4S jrS\\\4   4S jrS
\SS4S jrS
\S\4S jrS
\SS4S jrS
\SS4S jrSS.S\S\\   S\ 4S jjr!SSS.S\S\S\"\#\$\%   4   S\\   S\\&   S\'4S jjr(SSSSSSS.S \S\)S\\   S\\&   S!\S"\S#\S$\S\4S% jjr*S\S\#S&\+S\'4S' jr,S\S\#S&\+S\'4S( jr-SS)S*.S\S\#S\\   S+\S&\+S\'4S, jjr.S\S\#S&\+S\'4S- jr/S\S\#S&\+S\'4S. jr0S\S\#S&\+S\'4S/ jr1S\S\#S&\+S\'4S0 jr2S\S\$\%   S&\+S\'4S1 jr3S6U 4S2 jjr4S3\5\6   S\7\'   4S4 jr8S5r9U =r:$ )7r1   i  z[.:-]re   Nc                 Z   > [         TU ]  5         / U l        0 U l        0 U l        / U l        g rg   )r   rl   r  _named_resources_resource_index_matched_sub_app_resourcesr   s    r_   rl   UrlDispatcher.__init__   s-    24=?BDGI'r^   rz   c                 4  #    U R                   n[        5       nUR                  R                  nU(       al  UR	                  US5       H)  nUR                  U5      I S h  vN u  pgUb  Us  $ X7-  nM+     US:X  a  O&UR                  S5      S   =(       d    SnU(       a  Ml  U R                   H)  nUR                  U5      I S h  vN u  pgUb  Us  $ X7-  nM+     U(       a  [        [        UR                  U5      5      $ [        [        5       5      $  N NP7f)Nr@   rF   r   )r  r   r0  r1  r  r}   
rpartitionr  r  r*   r   r+   )	rk   rz   resource_indexr  url_part	candidater   allowedr   s	            r_   r}   UrlDispatcher.resolve  s
    --$'E ??,,+//"=	,5,=,=g,F&F#
)%%#.O > 3**3/29cH h& 77H(0(8(8(A"AJ%!!* 8 !"6w~~"WXXln--7 'G$ #Bs,   ADD A D"#DDADDc                 ,    [        U R                  5      $ rg   )r=  r  ro   s    r_   r?  UrlDispatcher.__iter__0  s    D))**r^   c                 ,    [        U R                  5      $ rg   )r7  r  ro   s    r_   r8  UrlDispatcher.__len__3  s    4(())r^   r   c                     XR                   ;   $ rg   r  r  s     r_   r  UrlDispatcher.__contains__6  s    0000r^   rd   c                      U R                   U   $ rg   r  rj   s     r_   __getitem__UrlDispatcher.__getitem__9  s    $$T**r^   c                 ,    [        U R                  5      $ rg   )r  r  ro   s    r_   r  UrlDispatcher.resources<  s    T__--r^   c                 ,    [        U R                  5      $ rg   )r  r  ro   s    r_   rQ   UrlDispatcher.routes?  s    $//**r^   c                 ,    [        U R                  5      $ rg   )r   r  ro   s    r_   named_resourcesUrlDispatcher.named_resourcesB  s     5 566r^   c                    [        U[        5      (       d   SU< 35       eU R                  (       a  [        S5      eUR                  nUb  U R
                  R                  U5      nU H]  n[        R                  " U5      (       a  [        SU< S35      eUR                  5       (       a  ME  [        SR                  U5      5      e   X R                  ;   a'  [        SR                  X R                  U   5      5      eXR                  U'   U R                  R                  U5        [        U[        5      (       a  U R                   R                  U5        g U R#                  U5        g )Nz4Instance of AbstractResource class is required, got z.Cannot register a resource into frozen router.zIncorrect route name z/, python keywords cannot be used for route namezoIncorrect route name {!r}, the name should be a sequence of python identifiers separated by dash, dot or columnz'Duplicate {!r}, already handled by {!r})r   r3   frozenr   rd   NAME_SPLIT_RErh  keyword	iskeywordr   isidentifierr   r  r  r  rd  r  r  )rk   r   rd   r  rv  s        r_   register_resourceUrlDispatcher.register_resourceE  sY   &
 
 	OA(N	O 
 ;;OPP}}&&,,T2E$$T**$/x 8) ) 
 ((**$1 28	   ,,, ..4fT;P;PQU;V.W  +3!!$'x(h 566++228<)r^   c                     SUR                   =n;   a&  UR                  S5      S   R                  S5      S   nUR                  S5      =(       d    S$ )z9Return a key to index the resource in the resource index.re  r   rF   )rs   	partitionr  rI  )rk   r   	index_keys      r_   _get_resource_index_key%UrlDispatcher._get_resource_index_keyl  sR     2 2293 "++C03>>sCAFI$++r^   c                 |    U R                  U5      nU R                  R                  U/ 5      R                  U5        g)z%Add a resource to the resource index.N)r  r  
setdefaultr  rk   r   resource_keys      r_   r  UrlDispatcher.index_resourcew  s5    33H= 	''b9@@Jr^   c                 b    U R                  U5      nU R                  U   R                  U5        g)z*Remove a resource from the resource index.N)r  r  remover  s      r_   r  UrlDispatcher.unindex_resource  s+    33H=\*11(;r^   rc   rL   c                   U(       a!  UR                  S5      (       d  [        S5      eU R                  (       aE  U R                  S   nUR                  U:X  a&  UR	                  U5      (       a  [        [        U5      $ SU;   d<  SU;   d6  [        R                  U5      (       d  [        XS9nU R                  U5        U$ [        XS9nU R                  U5        U$ )NrF   z)path should be started with / or be emptyre  rf  rc   )rE  r   r  rd   r   r   r4   rE   searchr5   r  r6   )rk   rL   rd   r   s       r_   add_resourceUrlDispatcher.add_resource  s    ,,HII??r*H}}$););D)A)AHh//tsd{hood.C.C$T5H""8,O"43x(r^   )rd   r   r   r   r   c                @    U R                  X$S9nUR                  XUS9$ )Nrc   r#  )r  r'  )rk   r   rL   r   rd   r   r   s          r_   r'  UrlDispatcher.add_route  s-     $$T$5!!&.!QQr^   r  Fr  rP   r  r  r  r  c                    UR                  S5      (       d   eUR                  S5      (       a  USS n[        UUUUUUUUS9n	U R                  U	5        U	$ )zFAdd static files view.

prefix - url prefix
path - folder with files

rF   Nr  r  )rE  rO  r9   r  )
rk   rP   rL   rd   r   r  r  r  r  r   s
             r_   
add_staticUrlDispatcher.add_static  sl    $   %%%%??3CR[F!)!!+)	
 	x(r^   rv   c                 F    U R                   " [        R                  X40 UD6$ )z(Shortcut for add_route with method HEAD.)r'  r   	METH_HEADrk   rL   r   rv   s       r_   add_headUrlDispatcher.add_head      ~~dnndFvFFr^   c                 F    U R                   " [        R                  X40 UD6$ )z+Shortcut for add_route with method OPTIONS.)r'  r   METH_OPTIONSr  s       r_   add_optionsUrlDispatcher.add_options  s    ~~d//I&IIr^   T)rd   
allow_headr   c                    U R                  XS9nU(       a"  UR                  " [        R                  U40 UD6  UR                  " [        R                  U40 UD6$ )zShortcut for add_route with method GET.

If allow_head is true, another
route is added allowing head requests to the same endpoint.
rc   )r  r'  r   r  METH_GET)rk   rL   r   rd   r   rv   r   s          r_   add_getUrlDispatcher.add_get  sO     $$T$5t~~wA&A!!$--CFCCr^   c                 F    U R                   " [        R                  X40 UD6$ )z(Shortcut for add_route with method POST.)r'  r   	METH_POSTr  s       r_   add_postUrlDispatcher.add_post  r  r^   c                 F    U R                   " [        R                  X40 UD6$ )z'Shortcut for add_route with method PUT.)r'  r   METH_PUTr  s       r_   add_putUrlDispatcher.add_put  s    ~~dmmTEfEEr^   c                 F    U R                   " [        R                  X40 UD6$ )z)Shortcut for add_route with method PATCH.)r'  r   
METH_PATCHr  s       r_   	add_patchUrlDispatcher.add_patch  s    ~~dootGGGr^   c                 F    U R                   " [        R                  X40 UD6$ )z*Shortcut for add_route with method DELETE.)r'  r   METH_DELETEr  s       r_   
add_deleteUrlDispatcher.add_delete  s    ~~d..HHHr^   c                 F    U R                   " [        R                  X40 UD6$ )z?Shortcut for add_route with ANY methods for a class-based view.)r'  r   r*  r  s       r_   add_viewUrlDispatcher.add_view  s     ~~dmmTEfEEr^   c                 h   > [         TU ]  5         U R                   H  nUR                  5         M     g rg   )r   r   r  )rk   r   r   s     r_   r   UrlDispatcher.freeze  s%    HOO (r^   rQ   c                 \    / nU H#  nUR                  UR                  U 5      5        M%     U$ )zAppend routes to route table.

Parameter should be a sequence of RouteDef objects.

Returns a list of registered AbstractRoute instances.
)extendregister)rk   rQ   registered_routes	route_defs       r_   
add_routesUrlDispatcher.add_routes  s3     I$$Y%7%7%=>    r^   )r  r  r  r  r   );rW   rX   rY   rZ   rp  rr  r  rl   r-   r2   r}   r   r[   r?  rB  r8  r  r   r  r3   r  r  r  r  rQ   r   r  r  r  r  r  r   r4   r  r   r%   r   r"   r   r7   r'  r&   r  r   r  r  r  r  r  r  r  r  r   r   r0   r   r  r]   r   r   s   @r_   r1   r1     s   JJx(MJ'.W '.1D '.R+(3- +* *1V 1 1+ +(8 +.= .+
 +7.>)>!? 7%**: %*t %*N	,0@ 	,S 	,K'7 KD K<)9 <d <
 @D  x}  , #37
R
R 
R w\ 223	
R sm
R !0
R 

R" #37$  %$    
 sm  !0          
 DGS G7 Gc Gm GJ Jg J J J #DD D
 smD D D 
D&GS G7 Gc Gm GFC F' FS F] FHc HG Hs H} HIs IW I I IFF"&|"4F@CF	F

!*:!; 
!]@S 
! 
!r^   r1   r  c                 x    [         S:  a  U R                  SS5      n [        R                  " U SS9R                  $ )Nr  r  r  FrY  )rC   r  r   r[  raw_pathr  s    r_   r  r    s1    fc5)99%/888r^   c                 V    SU ;  a  U $ U R                  SS5      R                  SS5      $ )Nr  z%2FrF   r  )r  r#  s    r_   r  r    s-    
%==$,,UC88r^   c                 L    [        U 5      nSU ;   a  UR                  SS5      nU$ )Nr  r  )r  r  )r  r   s     r_   ro  ro    s*     F
e|s+Mr^   )|r   r   r  	functoolsr  r  r   r  r  rp  r   r   r   pathlibr   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   yarlr   r   yarl_versionr  r   r    r!   r"   helpersr#   httpr$   typedefsr%   r&   web_exceptionsr'   r(   r)   r*   r+   web_fileresponser,   web_requestr-   web_responser.   r/   web_routedefr0   __all__web_appr;   r[   BaseDictdictr   platformrE  OSErrorr   r  r   maprB  rh  rC   r\   rr  rD   rE   rq  rG   r   r   partialr  rJ   r3   ABCr7   r2   r  r   r4   r5   r6   r  r9   r  rT   r7  rY  rd  r8   r  r:   r  r  r1   r  r  ro  r@   r^   r_   <module>r=     sk   
        	 	 
    "     2 2  @ @   '  +   2 * $CH~HH '!cll&=&=g&F&F J,,w6,B  (-Sl6H6H6Mbq6Q-R'SeE#s(O$ S&(jj+'gcl#  !#

1!%
  yy~%* % 7)Yx/G%HHI/0#c(:;48"	 "&,/uh7 ,/^P3CGG P3f>B($5 >BB
( 
$L7 Lt L 1+ 1+l%6H %6PI
h I
X% 2O
^ O
d+
^ +
\377 %(! %(P6 6 ;2 ;:!)M !)HN- N<I< I(+E8$45yAQ7R +%/=1I %"F!NGC1A,A$B F!R9s 9s 99c 9c 9  r^   