
    "Ki                     x   % 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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/J0r0J1r1  SS
K2J3r3  SSK4J5r5  SSK6J7r7J8r8  SSK9J:r:J;r;J<r<J=r=J>r>  SSK?J@r@  SSKAJBrB  SSKCJDrDJErE  SSKFJGrG  SrH\(       a  SSKIJJrJ  \\K\K4   rLO\MrL\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\\!\K      \XS'   \
R                  " S5      r[\\!\K      \XS'   \
R                  " S 5      r]\\K   \XS!'   \	R                  " 5       S":H  r_\\`   \XS#'   \\B/\\ \E      4   ra\$\ S$   \"\K   4   rb\R                  " \R                  S%S&9rd " S' S(\&S)S*9re " S+ S,\#\S-   5      rf " S. S-\ R                  5      rh " S/ S$\L\/5      ri " S0 S1\i5      rjS2\BS3S4S4 jrk " S5 S6\f5      rl " S7 S8\l5      rm " S9 S:\l5      rn " S; S<\f5      ro " S= S>\o5      rp " S? S@\o5      rq " SA SB\ R                  5      rr " SC SD\r5      rs " SE SF\s5      rt " SG SH\q5      ru " SI SJ\h5      rv " SK SL\h5      rw " SM SN\15      rx " SO SP\#\\f   \\f   5      ry " SQ SR\#\\h   \\h   5      rz " SS ST\0\\K\f4   5      r{SU\KS3\K4SV jr|SU\KS3\K4SW jr}SU\KS3\K4SX jr~g)Y    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_SEPWindows
IS_WINDOWSr2   T)quotec                       \ rS rSr% \\S'   \\S'   \\   \S'   \\S'   \\S'   \\S4   \S'   S	\S
'   \\S'   S\S'   \	\S'   Sr
g)	_InfoDictj   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@       [/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/aiohttp/web_urldispatcher.pyrL   rL   j   sG    
INS\OKC())	K
  !!r`   rL   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namerf   returnc                    Xl         g N_nameselfrf   s     ra   __init__AbstractResource.__init__~   s    
r`   c                     U R                   $ ri   rj   rm   s    ra   rf   AbstractResource.name       zzr`   c                     g)zGExposes the resource's canonical path.

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

Nr@   rq   s    ra   	canonicalAbstractResource.canonical       r`   kwargsc                     g)z2Construct url for resource with additional params.Nr@   )rm   rx   s     ra   url_forAbstractResource.url_for   rw   r`   requestc                    #    g7f)zGResolve resource.

Return (UrlMappingMatchInfo, allowed_methods) pair.
Nr@   rm   r|   s     ra   resolveAbstractResource.resolve           rR   c                     g)zGAdd a prefix to processed URLs.

Required for subapplications support.
Nr@   rm   rR   s     ra   
add_prefixAbstractResource.add_prefix   rw   r`   c                     gz;Return a dict with additional info useful for introspectionNr@   rq   s    ra   get_infoAbstractResource.get_info   rw   r`   c                     g ri   r@   rq   s    ra   freezeAbstractResource.freeze   s    r`   rN   c                     g)z Perform a raw match against pathNr@   rm   rN   s     ra   	raw_matchAbstractResource.raw_match   rw   r`   rj   rg   N)rY   rZ   r[   r\   r   r]   rn   propertyrf   abcabstractmethodru   r   rz   r-   _Resolver   r   rL   r   r   boolr   r_   r@   r`   ra   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   rg   c                  ^ 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)  [        (       a   e[        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 onesr|   rg   c                    >#    T" U 5      n[         R                  " U5      (       a
  UI S h  vN n[        U[        5      (       d   eU$  N7fri   )asyncioiscoroutine
isinstancer/   )r|   resultold_handlers     ra   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isgeneratorfunctionr   warningswarnDeprecationWarningr   type
issubclassr"   r   r-   r/   _method_handler_expect_handler	_resource)rm   r   r   r   r   r   r   s         @ra   rn   AbstractRoute.__init__   sv    !4N**>::w&7+F+F~+V+V	<((:;	< 
 ##F++x'BCDD  )') &&w//w&7+F+Fw+O+O((11}uMMH" &&:g|+L+LMM?AS 7^w >   "K%G-!r`   c                     U R                   $ ri   )r   rq   s    ra   r   AbstractRoute.method       ||r`   c                     U R                   $ ri   )r   rq   s    ra   r   AbstractRoute.handler   s    }}r`   c                     g)z8Optional route's name, always equals to resource's name.Nr@   rq   s    ra   rf   AbstractRoute.name   rw   r`   c                     U R                   $ ri   )r   rq   s    ra   r   AbstractRoute.resource   s    ~~r`   c                     gr   r@   rq   s    ra   r   AbstractRoute.get_info   rw   r`   argsrx   c                     g)/Construct url for route with additional params.Nr@   rm   r   rx   s      ra   rz   AbstractRoute.url_for   rw   r`   r|   c                 @   #    U R                  U5      I S h  vN $  N7fri   )r   r~   s     ra   handle_expect_header"AbstractRoute.handle_expect_header   s     ))'2222s   )r   r   r   r   )rY   rZ   r[   r\   r]   r   r%   r   r"   r   _ExpectHandlerr3   rn   r   r   r   r   r   rf   r   rL   r   r   rz   r-   r/   r   r_   r@   r`   ra   r7   r7      sL    48/35"5" w\ 2235"
 !05" +,5" 
5"n       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   i  )_route_apps_current_app_frozen
match_dictrouterg   Nc                 Z   > [         TU ]  U5        X l        / U l        S U l        SU l        g NF)superrn   r   r   r   r   )rm   r   r   	__class__s      ra   rn   UrlMappingMatchInfo.__init__  s+    $(*
37r`   c                 .    U R                   R                  $ ri   )r   r   rq   s    ra   r   UrlMappingMatchInfo.handler  s    {{"""r`   c                     U R                   $ ri   )r   rq   s    ra   r   UrlMappingMatchInfo.route  s    {{r`   c                 .    U R                   R                  $ ri   )r   r   rq   s    ra   r   "UrlMappingMatchInfo.expect_handler  s    {{///r`   c                     g ri   r@   rq   s    ra   rX   "UrlMappingMatchInfo.http_exception      r`   c                 6    U R                   R                  5       $ ri   )r   r   rq   s    ra   r   UrlMappingMatchInfo.get_info  s    {{##%%r`   )r;   .c                 ,    [        U R                  5      $ ri   )tupler   rq   s    ra   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rm   rT   s     ra   add_appUrlMappingMatchInfo.add_app#  s;    <<NOO$ #

!S!r`   c                 (    U R                   nUc   eU$ ri   )r   r   s     ra   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     ra   r   r   0  s=    5**$"GNN

C 
  r`   c                     SU l         g )NT)r   rq   s    ra   r   UrlMappingMatchInfo.freeze;  s	    r`   c                 B   > S[         TU ]  5        SU R                   S3$ )Nz<MatchInfo z: >)r   __repr__r   rm   r   s    ra   r   UrlMappingMatchInfo.__repr__>  s%    UW-/04;;-qAAr`   )r   r   r   r   )rT   r;   rg   N)rg   r;   r   )rY   rZ   r[   r\   	__slots__r   r]   r7   rn   r   r%   r   r   r   r   r   r'   rX   rL   r   r   r   r   r   setterr   r   r_   __classcell__r   s   @ra   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$ )	MatchInfoErroriB  
_exceptionrX   rg   Nc                 X   > Xl         [        TU ]	  0 [        U R                   5      5        g ri   )r  r   rn   SystemRouterm   rX   r   s     ra   rn   MatchInfoError.__init__F  s     ([9:r`   c                     U R                   $ ri   r  rq   s    ra   rX   MatchInfoError.http_exceptionJ      r`   c                 v    SR                  U R                  R                  U R                  R                  5      $ )Nz<MatchInfoError {}: {}>)r   r  statusreasonrq   s    ra   r   MatchInfoError.__repr__N  s.    (//OO""DOO$:$:
 	
r`   )rY   rZ   r[   r\   r   r'   rn   r   rX   r]   r   r_   r   r  s   @ra   r  r  B  sG    I;} ; ;   
# 
 
r`   r  r|   rg   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(   )r|   expects     ra   r   r   T  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   id  Nre   rf   rg   c                Z   > [         TU ]  US9  0 U l        S U l        [	        5       U l        g )Nre   )r   rn   _routes
_any_routeset_allowed_methods)rm   rf   r   s     ra   rn   Resource.__init__e  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)rm   r   r   r   r   	route_objs         ra   	add_routeResource.add_routek  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  rm   r   s     ra   r&  Resource.register_route}  sn    =
 
 	A6ui@	A 
 <<4==(#O!!%,,/%*U\\"r`   r|   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ri   )
_matchrel_url	path_safer!  r  r  r   r   r2   r"  )rm   r|   r   r   s       ra   r   Resource.resolve  sz     ++goo&?&?@@JI;LL$$W^^T__EE5E&z94;P;PPPT****s   BBrN   c                     g ri   r@   r   s     ra   r0  Resource._match  s    r`   c                 ,    [        U R                  5      $ ri   lenr  rq   s    ra   __len__Resource.__len__      4<<  r`   c                 H    [        U R                  R                  5       5      $ ri   iterr  valuesrq   s    ra   __iter__Resource.__iter__      DLL'')**r`   )r"  r   r  )r   r8   rg   N)rY   rZ   r[   r\   r   r]   rn   r   r   r"   r%   r   r(  r&  r-   r   r   r   r   r   r0  intr9  r   r@  r_   r   r  s   @ra   r4   r4   d  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  Nre   rN   rf   rg   c                j   > [         TU ]  US9  U(       a  UR                  S5      (       d   eXl        g )Nre   rF   )r   rn   
startswith_path)rm   rN   rf   r   s      ra   rn   PlainResource.__init__  s/    d#4??3////
r`   c                     U R                   $ ri   rG  rq   s    ra   ru   PlainResource.canonical  rs   r`   c                 6    U R                   (       d  SU l         g g )NrF   rJ  rq   s    ra   r   PlainResource.freeze  s    zzDJ r`   rR   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   )rF  endswithr8  rG  r   s     ra   r   PlainResource.add_prefix  sL      %%%%??3''''6{Qjj(
r`   c                 (    U R                   U:X  a  0 $ g ri   rJ  r   s     ra   r0  PlainResource._match  s    ::Ir`   c                      U R                   U:H  $ ri   rJ  r   s     ra   r   PlainResource.raw_match  s    zzT!!r`   c                     SU R                   0$ )NrN   rJ  rq   s    ra   r   PlainResource.get_info  s    

##r`   c                 @    [         R                  " U R                  SS9$ NTrN   encoded)r   buildrG  rq   s    ra   rz   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   )rf   rG  rl   s     ra   r   PlainResource.__repr__  s8    )-)>sTYY%B a

|155r`   rJ  r   )rY   rZ   r[   r\   r]   r   rn   r   ru   r   r   r   r0  r   r   rL   r   r   rz   r   r_   r   r  s   @ra   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[^{}/]+Nre   rN   rf   rg   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)Nre   r  z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rF   r@   )r   rn   
_orig_pathrE   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrP   rF  rG   _pattern
_formatter)
rm   rN   rf   rP   rO   partr   compiledexcr   s
            ra   rn   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                   $ ri   )rv  rq   s    ra   ru   DynamicResource.canonical  r  r`   rR   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 rO  )	rF  rP  r8  rq  rs  rr  ru  rP   rv  r   s     ra   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 ri   )ru  rk  ro  items_unquote_path_safe)rm   rN   r   keyvalues        ra   r0  DynamicResource._match  s]    ''-==B__=N=T=T=V
=VzsC#E**=V
 	
 
s   Ac                      U R                   U:H  $ ri   )rh  r   s     ra   r   DynamicResource.raw_match  s    $&&r`   c                 4    U R                   U R                  S.$ )N)rO   rP   )rv  ru  rq   s    ra   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 rY  )rv  
format_mapr  _quote_pathr   r\  )rm   r  kvurls        ra   rz   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}>)rf   rO   )rf   r   rv  rl   s     ra   r   DynamicResource.__repr__  s>    )-)>sTYY%B5<< = 
 	
r`   )rv  rh  ru  )rY   rZ   r[   r\   rq  rs  rj  rn  rm  r]   r   rn   r   ru   r   r   r0  r   r   rL   r   r   rz   r   r_   r   r  s   @ra   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  Nre   rR   rf   rg   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   re   )rF  rP  r   rn   rp  _prefix_prefix2)rm   rR   rf   r   s      ra   rn   PrefixResource.__init__  sn    V..s33;V;3"&//#*>*>FF>d#$V,s*r`   c                     U R                   $ ri   )r  rq   s    ra   ru   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 rO  )rF  rP  r8  r  r  r   s     ra   r   PrefixResource.add_prefix  s\      %%%%??3''''6{Q,s*r`   c                     gr   r@   r   s     ra   r   PrefixResource.raw_match!  s    r`   )r  r  )rY   rZ   r[   r\   r]   r   rn   r   ru   r   r   r   r_   r   r  s   @ra   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rf   r   
chunk_size
show_indexfollow_symlinksappend_versionrR   rQ   rf   r   r  r  r  r  rg   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)Nre   T)strictr_  z' does not existz' is not a directoryGETr$  HEAD)r  r  )r   rn   r   
expanduserr   FileNotFoundErrorr   is_dir
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr8   _handler  r!  r"  )rm   rR   rQ   rf   r   r  r  r  r  rt  r   s             ra   rn   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   TrZ  r      %%25rb)r  r]   lstripr   r\  r  rC   replacer  joinpathr  r   osrN   normpathrelative_tor   r   r  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rm   r  r  r  unresolved_pathnormalized_pathfilepathf
file_byteshs
             ra   rz   StaticResource.url_forN  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      ra   r  StaticResource._get_file_hashw  s?    NN	&&qxxz2zz'""r`   c                 J    U R                   U R                  U R                  S.$ )N)rQ   rR   rS   )r  r  r  rq   s    ra   r   StaticResource.get_info~  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,  )rm   r   s     ra   set_options_route StaticResource.set_options_route  sP    $>??"/wT5I5I#
Y 	!!),r`   r|   c                   #    UR                   R                  nUR                  n[        R                  R                  U5      n[        (       a  UR                  SS5      nUR                  U R                  5      (       d  X@R                  :w  a  S [        5       4$ U R                  nX5;  a  S U4$ S[        U[        U R                  5      S-   S  5      0n[        X`R                   U   5      U4$ 7f)N\rF   r  r   )r1  r2  r   r  rN   r  rI   r  rF  r  r  r!  r"  r  r8  r2   r  )rm   r|   rN   r   	norm_pathallowed_methodsr   s          ra   r   StaticResource.resolve  s     (( GG$$T*	:!))$4I##DMM22yLL7P;//((( "4T#dll:Ka:O:Q5R"ST
#JV0DEWWs   C/C1c                 ,    [        U R                  5      $ ri   r7  rq   s    ra   r9  StaticResource.__len__  r;  r`   c                 H    [        U R                  R                  5       5      $ ri   r=  rq   s    ra   r@  StaticResource.__iter__  rB  r`   c                    #    UR                   S   n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  r  r   get_running_looprun_in_executor_resolve_path_to_response)rm   r|   r  r  loops        ra   r  StaticResource._handle  sa     %%j1//228<'')))$00/
 
 	
 
s   A A)"A'#A)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  rN   r  r  r  r   r   CIRCULAR_SYMLINK_ERRORr+   r  r  r.   _directory_as_htmlr)   PermissionErrorr,   r  )rm   r  r  	file_pathrt  s        ra   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  rf   appendr   join)rm   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                  ra   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}>)rf   rN   rQ   )rf   r   r  r  rl   s     ra   r   StaticResource.__repr__  sE    (,		(=sTYY$2@GGLLDOO H 
 	
r`   )r"  r  r  r  r   r  r  r  )$rY   rZ   r[   r\   r  r]   r&   r   r   rC  r   rn   r   rz   staticmethodbytesr  rL   r   r%   r  r-   r   r   r9  r   r7   r@  r/   r  r   r  r  r   r_   r   r  s   @ra   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  rR   rT   r;   rg   Nc                 R   > [         TU ]  U5        X l        U R                  U5        g ri   )r   rn   _app_add_prefix_to_resources)rm   rR   rT   r   s      ra   rn   PrefixedSubAppResource.__init__  s#     	%%f-r`   c                 F   > [         TU ]  U5        U R                  U5        g ri   )r   r   r  )rm   rR   r   s     ra   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 ri   )r  router	resourcesunindex_resourcer   index_resource)rm   rR   r  r   s       ra   r  /PrefixedSubAppResource._add_prefix_to_resources  sP    !!((*H ##H-'!!(+ +r`   r   rx   c                     [        S5      e)Nz3.url_for() is not supported by sub-application rootr   r   s      ra   rz   PrefixedSubAppResource.url_for
  s    PQQr`   c                 4    U R                   U R                  S.$ )N)rT   rR   )r  r  rq   s    ra   r   PrefixedSubAppResource.get_info  s    yyDLL99r`   r|   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ri   )	r  r  r   r   r   rX   r*   r  r!  rm   r|   r  methodss       ra   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      $ ri   )r8  r  r  rS   rq   s    ra   r9  PrefixedSubAppResource.__len__  s     499##**,--r`   c                 \    [        U R                  R                  R                  5       5      $ ri   )r>  r  r  rS   rq   s    ra   r@  PrefixedSubAppResource.__iter__  s     DII$$++-..r`   c                 J    SR                  U R                  U R                  S9$ )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rR   rT   )r   r  r  rq   s    ra   r   PrefixedSubAppResource.__repr__  s(    =DD<<TYY E 
 	
r`   r  )rY   rZ   r[   r\   r]   rn   r   r  r   rz   rL   r   r-   r   r   rC  r9  r   r7   r@  r   r_   r   r  s   @ra   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)	rV   i%  r|   rg   c                    #    g7f)z1Return bool if the request satisfies the criteriaNr@   r~   s     ra   r   AbstractRuleMatching.match&  r   r   c                     gr   r@   rq   s    ra   r   AbstractRuleMatching.get_info*  rw   r`   c                     g)zReturn a strNr@   rq   s    ra   ru   AbstractRuleMatching.canonical.  rw   r`   r@   N)rY   rZ   r[   r\   r   r   r-   r   r   rL   r   r   r]   ru   r_   r@   r`   ra   rV   rV   %  sy    @7 @t @ @ 	J) J J 3   r`   rV   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$ )Domaini4  z(?!-)[a-z\d-]{1,63}(?<!-)rU   rg   Nc                 N   > [         TU ]  5         U R                  U5      U l        g ri   )r   rn   
validation_domain)rm   rU   r   s     ra   rn   Domain.__init__7  s    v.r`   c                     U R                   $ ri   r<  rq   s    ra   ru   Domain.canonical;  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ri   )re_partrk  ).0xrm   s     ra   	<genexpr>$Domain.validation.<locals>.<genexpr>I  s%     N6M4<<))!,,6Ms   (+zDomain not validP   :)r   r]   	TypeErrorrstripr  r   r   raw_hostallri  port)rm   rU   r  s   `  ra   r;  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`   r|   c                    #    UR                   R                  [        R                  5      nU(       d  gU R	                  U5      $ 7fr   )r  r  r   HOSTmatch_domain)rm   r|   hosts      ra   r   Domain.matchO  s4     ""499-  &&s   AArS  c                 <    UR                  5       U R                  :H  $ ri   )r  r<  rm   rS  s     ra   rR  Domain.match_domainU  s    zz|t||++r`   c                     SU R                   0$ )NrU   r?  rq   s    ra   r   Domain.get_infoX  s    $,,''r`   r?  )rY   rZ   r[   r\   rq  rs  rC  r]   rn   r   ru   r;  r-   r   r   rR  rL   r   r_   r   r  s   @ra   r9  r9  4  s    jj56G/s /t / 3  , , , '7 't ', , ,() ( (r`   r9  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$ )
MaskDomaini\  z(?!-)[a-z\d\*-]{1,63}(?<!-)rU   rg   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   rn   r<  r  rq  rs  _mask)rm   rU   maskr   s      ra   rn   MaskDomain.__init___  sC     ||##C/77TBZZ%
r`   c                 .    U R                   R                  $ ri   )r^  rP   rq   s    ra   ru   MaskDomain.canonicald  s    zz!!!r`   rS  c                 <    U R                   R                  U5      S L$ ri   )r^  rk  rV  s     ra   rR  MaskDomain.match_domainh  s    zz##D)55r`   )r^  )rY   rZ   r[   r\   rq  rs  rC  r]   rn   r   ru   r   rR  r_   r   r  s   @ra   r[  r[  \  sX    jj78G&s &t &
 "3 " "6 6 6 6r`   r[  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)MatchedSubAppResourceil  rW   rT   r;   rg   Nc                 T    [         R                  U 5        SU l        X l        Xl        g )Nr  )r3   rn   r  r  _rule)rm   rW   rT   s      ra   rn   MatchedSubAppResource.__init__m  s!    !!$'	
r`   c                 .    U R                   R                  $ ri   )rh  ru   rq   s    ra   ru   MatchedSubAppResource.canonicals  s    zz###r`   c                 4    U R                   U R                  S.$ )N)rT   rW   )r  rh  rq   s    ra   r   MatchedSubAppResource.get_infow  s    yy$**55r`   r|   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ri   )rh  r   r!  r  r  r   r   r   rX   r*   r  r'  s       ra   r   MatchedSubAppResource.resolvez  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   r0  rq   s    ra   r   MatchedSubAppResource.__repr__  s    +DII=::r`   )r  r  rh  )rY   rZ   r[   r\   rV   rn   r   r]   ru   rL   r   r-   r   r   r   r_   r@   r`   ra   rf  rf  l  sc    1  $  $3 $ $6) 6	#W 	# 	#;# ;r`   rf  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   rg   c                "   > [         TU ]  XXCS9  g )Nr   )r   rn   )rm   r   r   r   r   r   s        ra   rn   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   rq   s    ra   r   ResourceRoute.__repr__  s.    DKK;; L 
 	
r`   c                 J    U R                   c  g U R                   R                  $ ri   )r   rf   rq   s    ra   rf   ResourceRoute.name  s    >>!~~"""r`   r   rx   c                 X    U R                   c   eU R                   R                  " U0 UD6$ )r   )r   rz   r   s      ra   rz   ResourceRoute.url_for  s,    ~~)))~~%%t6v66r`   c                 T    U R                   c   eU R                   R                  5       $ ri   )r   r   rq   s    ra   r   ResourceRoute.get_info  s%    ~~)))~~&&((r`   r@   )rY   rZ   r[   r\   __doc__r]   r   r%   r   r"   r3   r   r   rn   r   r   rf   r   rz   rL   r   r_   r   r  s   @ra   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  rX   rg   Nc                 b   > [         TU ]  [        R                  U R                  5        Xl        g ri   )r   rn   r   r+  r  _http_exceptionr  s     ra   rn   SystemRoute.__init__  s     5-r`   r   rx   c                     [        S5      e)Nz).url_for() is not allowed for SystemRouter"  r   s      ra   rz   SystemRoute.url_for  s    FGGr`   c                     g ri   r@   rq   s    ra   rf   SystemRoute.name  r   r`   c                     SU R                   0$ )NrX   r  rq   s    ra   r   SystemRoute.get_info  s     $"6"677r`   r|   c                 "   #    U R                   e7fri   r  r~   s     ra   r  SystemRoute._handle  s     """s   c                 .    U R                   R                  $ ri   )r  r  rq   s    ra   r  SystemRoute.status      ##***r`   c                 .    U R                   R                  $ ri   )r  r  rq   s    ra   r  SystemRoute.reason  r  r`   c                      SR                  U S9$ )Nz*<SystemRoute {self.status}: {self.reason}>rq   )r   rq   s    ra   r   SystemRoute.__repr__  s    ;BBBMMr`   r  )rY   rZ   r[   r\   r'   rn   r]   r   rz   r   r   rf   rL   r   r-   r/   r  rC  r  r  r   r_   r   r  s   @ra   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S\4   4S jrS\4S jr	Sr
g)r:   i  rg   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ri   )	r|   r   r   METH_ALL_raise_allowed_methodsgetattrr  r   r/   )rm   r   rets      ra   _iter
View._iter  s}     <<dmm3'')||2288:DA>'')Hn#~....
 s   BB&B$B&Nc                 >    U R                  5       R                  5       $ ri   )r  	__await__rq   s    ra   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 ri   )r   r  hasattrr  r*   r|   r   )rm   r  r  s      ra   r  View._raise_allowed_methods  sD    &*mmPmwtWWY7O1mP"4<<#6#6HH Qs
   "A!A!r@   )rY   rZ   r[   r\   r/   r  r   r  r   r  r_   r@   r`   ra   r:   r:     s4    	^ 	(9T4%?@ (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  rg   Nc                     Xl         g ri   
_resources)rm   r  s     ra   rn   ResourcesView.__init__  s    #r`   c                 ,    [        U R                  5      $ ri   )r8  r  rq   s    ra   r9  ResourcesView.__len__  s    4??##r`   c              #   8   #    U R                    S h  vN   g  N7fri   r  rq   s    ra   r@  ResourcesView.__iter__  s     ??""   r   c                     XR                   ;   $ ri   r  rm   r   s     ra   __contains__ResourcesView.__contains__  s    ??**r`   r  )rY   rZ   r[   r\   r   r3   rn   rC  r9  r   r@  objectr   r  r_   r@   r`   ra   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 ri   )r  r  )rm   r  r   r   s       ra   rn   RoutesView.__init__  s/    ,.!H!##E* " "r`   rg   c                 ,    [        U R                  5      $ ri   r7  rq   s    ra   r9  RoutesView.__len__  r;  r`   c              #   8   #    U R                    S h  vN   g  N7fri   r  rq   s    ra   r@  RoutesView.__iter__  s     <<r  r   c                     XR                   ;   $ ri   r  r-  s     ra   r  RoutesView.__contains__  s    $$r`   r  N)rY   rZ   r[   r\   r   r3   rn   rC  r9  r   r7   r@  r  r   r  r_   r@   r`   ra   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[.:-]rg   Nc                 Z   > [         TU ]  5         / U l        0 U l        0 U l        / U l        g ri   )r   rn   r  _named_resources_resource_index_matched_sub_app_resourcesr   s    ra   rn   UrlDispatcher.__init__  s-    24=?BDGI'r`   r|   c                 4  #    U R                   n[        5       nU R                   H)  nUR                  U5      I S h  vN u  pVUb  Us  $ X6-  nM+     UR                  R
                  nU(       al  UR                  US5       H)  nUR                  U5      I S h  vN u  pVUb  Us  $ X6-  nM+     US:X  a  O&UR                  S5      S   =(       d    SnU(       a  Ml  U(       a  [        [        UR                  U5      5      $ [        [        5       5      $  N N}7f)Nr@   rF   r   )r  r!  r  r   r1  r2  r  
rpartitionr  r*   r   r+   )	rm   r|   resource_indexr  r   r   allowedurl_part	candidates	            ra   r   UrlDispatcher.resolve	  s
    --$'E 77H(0(8(8(A"AJ%!!* 8 ??,,+//"=	,5,=,=g,F&F#
)%%#.O > 3**3/29cH h !"6w~~"WXXln--5 #B 'Gs)   :DDADDA D:DDc                 ,    [        U R                  5      $ ri   )r>  r  rq   s    ra   r@  UrlDispatcher.__iter__2  s    D))**r`   c                 ,    [        U R                  5      $ ri   )r8  r  rq   s    ra   r9  UrlDispatcher.__len__5  s    4(())r`   r   c                     XR                   ;   $ ri   r  r  s     ra   r  UrlDispatcher.__contains__8  s    0000r`   rf   c                      U R                   U   $ ri   r  rl   s     ra   __getitem__UrlDispatcher.__getitem__;  s    $$T**r`   c                 ,    [        U R                  5      $ ri   )r  r  rq   s    ra   r  UrlDispatcher.resources>  s    T__--r`   c                 ,    [        U R                  5      $ ri   )r  r  rq   s    ra   rS   UrlDispatcher.routesA  s    $//**r`   c                 ,    [        U R                  5      $ ri   )r   r  rq   s    ra   named_resourcesUrlDispatcher.named_resourcesD  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   rf   NAME_SPLIT_REri  keyword	iskeywordr   isidentifierr   r  r  r  rf  r  r  )rm   r   rf   r  rw  s        ra   register_resourceUrlDispatcher.register_resourceG  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.rf  r   rF   )ru   	partitionr  rK  )rm   r   	index_keys      ra   _get_resource_index_key%UrlDispatcher._get_resource_index_keyn  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  rm   r   resource_keys      ra   r  UrlDispatcher.index_resourcey  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      ra   r  UrlDispatcher.unindex_resource  s+    33H=\*11(;r`   re   rN   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 emptyrf  rg  re   )rF  r   r  rf   r   r   r4   rE   searchr5   r  r6   )rm   rN   rf   r   s       ra   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`   )rf   r   r   r   r   c                @    U R                  X$S9nUR                  XUS9$ )Nre   r$  )r  r(  )rm   r   rN   r   rf   r   r   s          ra   r(  UrlDispatcher.add_route  s-     $$T$5!!&.!QQr`   r  Fr  rR   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  )rF  rP  r9   r  )
rm   rR   rN   rf   r   r  r  r  r  r   s
             ra   
add_staticUrlDispatcher.add_static  sl    $   %%%%??3CR[F!)!!+)	
 	x(r`   rx   c                 F    U R                   " [        R                  X40 UD6$ )z(Shortcut for add_route with method HEAD.)r(  r   	METH_HEADrm   rN   r   rx   s       ra   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       ra   add_optionsUrlDispatcher.add_options  s    ~~d//I&IIr`   T)rf   
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.
re   )r  r(  r   r  METH_GET)rm   rN   r   rf   r  rx   r   s          ra   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       ra   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       ra   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       ra   	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       ra   
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       ra   add_viewUrlDispatcher.add_view  s     ~~dmmTEfEEr`   c                 h   > [         TU ]  5         U R                   H  nUR                  5         M     g ri   )r   r   r  )rm   r   r   s     ra   r   UrlDispatcher.freeze  s%    HOO (r`   rS   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)rm   rS   registered_routes	route_defs       ra   
add_routesUrlDispatcher.add_routes  s3     I$$Y%7%7%=>    r`   )r  r  r  r  r   );rY   rZ   r[   r\   rq  rs  r  rn   r-   r2   r   r   r]   r@  rC  r9  r  r   r  r3   r  r  r  r  rS   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   @ra   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  FrZ  )rC   r  r   r\  raw_pathr  s    ra   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    ra   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     ra   rp  rp    s*     F
e|s+Mr`   )r   r   r  	functoolsr  r  r   r  r  platformrq  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   rF  OSErrorr   r  r   maprC  ri  rC   r^   rs  rD   rE   rr  rG   systemrI   r   r   r   partialr  rL   r3   ABCr7   r2   r  r   r4   r5   r6   r  r9   r  rV   r9  r[  rf  r8   r  r:   r  r  r1   r  r  rp  r@   r`   ra   <module>r@     s   
        	  	 
    "     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~%* %"//+y8
E$K 87)Yx/G%HHI/0#c(:;48"	 "&,/uh7 ,/^R3CGG R3j>B($5 >BB
( 
$L7 Lt L 1+ 1+l%6H %6PI
h I
X% 2M
^ M
`+
^ +
\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`   