
    bCiĜ                        % 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  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\N" \O" \P\,R                  " S5      SS 5      5      rR\\$\PS4      \SS'   \	R                  " S5      rU\\!\K      \SS'   \	R                  " S5      rV\\!\K      \SS'   \	R                  " S5      rX\\K   \SS'   \\B/\\ \E      4   rY\$\ S   \"\K   4   rZ\R                  " \R                  S S!9r\ " S" S#\&S$S%9r] " S& S'\#\S(   5      r^ " S) S(\ R                  5      r` " S* S\L\/5      ra " S+ S,\a5      rbS-\BS.S4S/ jrc " S0 S1\^5      rd " S2 S3\d5      re " S4 S5\d5      rf " S6 S7\^5      rg " S8 S9\g5      rh " S: S;\g5      ri " S< S=\ R                  5      rj " S> S?\j5      rk " S@ SA\k5      rl " SB SC\i5      rm " SD SE\`5      rn " SF SG\`5      ro " SH SI\15      rp " SJ SK\#\\^   \\^   5      rq " SL SM\#\\`   \\`   5      rr " SN SO\0\\K\^4   5      rsSP\KS.\K4SQ jrtSP\KS.\K4SR jruSP\KS.\K4SS jrvg)T    N)contextmanager)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.   .YARL_VERSIONz$^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$HTTP_METHOD_REz*(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})ROUTE_RE/PATH_SEPr3   T)quotec                       \ rS rSr% \\S'   \\S'   \\   \S'   \\S'   \\S'   \\S4   \S'   S	\S
'   \\S'   S\S'   \	\S'   Sr
g)	_InfoDictb   path	formatterpattern	directoryprefixr8   routesr<   appdomainAbstractRuleMatchingrulehttp_exception N)__name__
__module____qualname____firstlineno__str__annotations__r   r   r   r(   __static_attributes__rS       S/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/web_urldispatcher.pyrF   rF   b   sG    
INS\OKC())	K
  !!r[   rF   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)r4   u   Nnamera   returnc                    Xl         g N_nameselfra   s     r\   __init__AbstractResource.__init__v   s    
r[   c                     U R                   $ rd   re   rh   s    r\   ra   AbstractResource.namey       zzr[   c                     g)zGExposes the resource's canonical path.

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

NrS   rl   s    r\   	canonicalAbstractResource.canonical}       r[   kwargsc                     g)z2Construct url for resource with additional params.NrS   )rh   rs   s     r\   url_forAbstractResource.url_for   rr   r[   requestc                    #    g7f)zGResolve resource.

Return (UrlMappingMatchInfo, allowed_methods) pair.
NrS   rh   rw   s     r\   resolveAbstractResource.resolve           rL   c                     g)zGAdd a prefix to processed URLs.

Required for subapplications support.
NrS   rh   rL   s     r\   
add_prefixAbstractResource.add_prefix   rr   r[   c                     gz;Return a dict with additional info useful for introspectionNrS   rl   s    r\   get_infoAbstractResource.get_info   rr   r[   c                     g rd   rS   rl   s    r\   freezeAbstractResource.freeze   s    r[   rH   c                     g)z Perform a raw match against pathNrS   rh   rH   s     r\   	raw_matchAbstractResource.raw_match   rr   r[   re   rb   N)rT   rU   rV   rW   r   rX   ri   propertyra   abcabstractmethodrp   r   ru   r.   _Resolverz   r   rF   r   r   boolr   rZ   rS   r[   r\   r4   r4   u   s1   04    hsm   3    	A A A A 	W    	    	J) J J 	/c /d / /r[   r4   r8   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)r8      Nexpect_handlerresourcemethodhandlerr   r   rb   c                  ^ Uc  [         n[        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      (       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 )NzCoroutine is expected, got z is not allowed HTTP methodz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesrw   rb   c                    >#    T" U 5      n[         R                  " U5      (       a
  UI S h  vN n[        U[        5      (       d   eU$  N7frd   )asyncioiscoroutine
isinstancer0   )rw   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_handlerr   iscoroutinefunctionupperr@   match
ValueErrorcallableinspectisgeneratorfunctionwarningswarnDeprecationWarningr   type
issubclassr#   r   r.   r0   _method_handler_expect_handler	_resource)rh   r   r   r   r   r   r   s         @r\   ri   AbstractRoute.__init__   s5    !4N**
 
 	<((:;	< 
 ##F++x'BCDD  )') &&w//((11MMK" &&:g|+L+LMMBDV 7^w >   "K%G-!r[   c                     U R                   $ rd   )r   rl   s    r\   r   AbstractRoute.method       ||r[   c                     U R                   $ rd   )r   rl   s    r\   r   AbstractRoute.handler   s    }}r[   c                     g)z8Optional route's name, always equals to resource's name.NrS   rl   s    r\   ra   AbstractRoute.name   rr   r[   c                     U R                   $ rd   )r   rl   s    r\   r   AbstractRoute.resource   s    ~~r[   c                     gr   rS   rl   s    r\   r   AbstractRoute.get_info   rr   r[   argsrs   c                     g)/Construct url for route with additional params.NrS   rh   r   rs   s      r\   ru   AbstractRoute.url_for   rr   r[   rw   c                 @   #    U R                  U5      I S h  vN $  N7frd   )r   ry   s     r\   handle_expect_header"AbstractRoute.handle_expect_header   s     ))'2222s   )r   r   r   r   )rT   rU   rV   rW   rX   r   r&   r   r#   r   _ExpectHandlerr4   ri   r   r   r   r   r   ra   r   rF   r   r   ru   r.   r0   r   rZ   rS   r[   r\   r8   r8      sL    48/31"1" w\ 2231"
 !01" +,1" 
1"f       Ghsm G  G (#34   	J) J J 	>S >C >C > >3' 3h~>V 3r[   c                   .  ^  \ rS rSrS\\\4   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\SSS\S   4S j5       rSS jrS\4U 4S jjrSrU =r$ )r3      
match_dictroutec                 Z   > [         TU ]  U5        X l        / U l        S U l        SU l        g NF)superri   _route_apps_current_app_frozen)rh   r   r   	__class__s      r\   ri   UrlMappingMatchInfo.__init__   s+    $(*
37r[   rb   c                 .    U R                   R                  $ rd   )r   r   rl   s    r\   r   UrlMappingMatchInfo.handler   s    {{"""r[   c                     U R                   $ rd   )r   rl   s    r\   r   UrlMappingMatchInfo.route  s    {{r[   c                 .    U R                   R                  $ rd   )r   r   rl   s    r\   r   "UrlMappingMatchInfo.expect_handler  s    {{///r[   c                     g rd   rS   rl   s    r\   rR   "UrlMappingMatchInfo.http_exception	      r[   c                 6    U R                   R                  5       $ rd   )r   r   rl   s    r\   r   UrlMappingMatchInfo.get_info  s    {{##%%r[   )r<   .c                 ,    [        U R                  5      $ rd   )tupler   rl   s    r\   appsUrlMappingMatchInfo.apps  s    TZZ  r[   rN   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rh   rN   s     r\   add_appUrlMappingMatchInfo.add_app  s;    <<NOO$ #

!S!r[   c                 (    U R                   nUc   eU$ rd   )r   r   s     r\   current_appUrlMappingMatchInfo.current_app  s    
r[   )NNNc              #      #    [         (       a4  XR                  ;  a%  [        SR                  U R                  U5      5      eU R                  nXl         S v   X l        g ! X l        f = f7f)Nz1Expected one of the following apps {!r}, got {!r})r$   r   r   formatr   )rh   rN   prevs      r\   set_current_app#UrlMappingMatchInfo.set_current_app!  s_     5**$"GNN

C 
   	% $s   AA+A  A+ A((A+c                     SU l         g )NT)r   rl   s    r\   r   UrlMappingMatchInfo.freeze1  s	    r[   c                 B   > S[         TU ]  5        SU R                   S3$ )Nz<MatchInfo z: >)r   __repr__r   rh   r   s    r\   r   UrlMappingMatchInfo.__repr__4  s%    UW-/04;;-qAAr[   )r   r   r   r   )rN   r<   rb   N)rb   r<   r   )rT   rU   rV   rW   r   rX   r8   ri   r   r&   r   r   r   r   r   r(   rR   rF   r   r   r   r   r   r   r   r   r   r   rZ   __classcell__r   s   @r\   r3   r3      s   4S> -  # # # }   0 0 0  7  &) & !e./ ! !"  
 %= %Y?O5P % %B# B Br[   c                   Z   ^  \ 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$ )	MatchInfoErrori8  rR   rb   Nc                 X   > Xl         [        TU ]	  0 [        U R                   5      5        g rd   )
_exceptionr   ri   SystemRouterh   rR   r   s     r\   ri   MatchInfoError.__init__9  s     ([9:r[   c                     U R                   $ rd   r   rl   s    r\   rR   MatchInfoError.http_exception=      r[   c                 v    SR                  U R                  R                  U R                  R                  5      $ )Nz<MatchInfoError {}: {}>)r   r   statusreasonrl   s    r\   r   MatchInfoError.__repr__A  s.    (//OO""DOO$:$:
 	
r[   r  )rT   rU   rV   rW   r(   ri   r   rR   rX   r   rZ   r   r   s   @r\   r   r   8  sB    ;} ; ;   
# 
 
r[   r   rw   rb   c                   #    U R                   R                  [        R                  S5      nU R                  [
        :X  aD  UR                  5       S:X  a$  U R                  R                  S5      I Sh  vN   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

NzUnknown Expect: %s)text)
headersgetr    EXPECTversionr%   lowerwriterwriter)   )rw   expects     r\   r   r   G  sm      __  b1F-'<<>^+..&&'GHHH'-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$ )r5   iU  Nr`   ra   rb   c                .   > [         TU ]  US9  / U l        g )Nr`   )r   ri   _routes)rh   ra   r   s     r\   ri   Resource.__init__V  s    d#,.r[   r   r   r   r   r9   c                    U R                    HI  nUR                  U:X  d   UR                  [        R                  :X  d  M3  [	        SR                  US95      e   [        XXS9nU R                  U5        U$ )NzOAdded route will never be executed, method {route.method} is already registered)r   r  )r  r   r    METH_ANYr   r   r9   register_route)rh   r   r   r   	route_objs        r\   	add_routeResource.add_routeZ  sq     I6)Y-=-=-N"!!'i!8  & "&4W	I&r[   c                 z    [        U[        5      (       d   SU< 35       eU R                  R                  U5        g )Nz)Instance of Route class is required, got )r   r9   r  appendrh   r   s     r\   r  Resource.register_routen  sC    =
 
 	A6ui@	A 
 	E"r[   rw   c                 B  #    [        5       nU R                  UR                  R                  5      nUc  S U4$ U R                   HR  nUR
                  nUR                  U5        XQR
                  :X  d  U[        R                  :X  d  ME  [        X45      U4s  $    S U4$ 7frd   )
set_matchrel_urlraw_pathr  r   addr    r  r3   )rh   rw   allowed_methodsr   r  route_methods         r\   rz   Resource.resolvet  s     $'E[[!9!9:
((I$++L-~~-1N+JBOTT & ((s   BB
BrH   c                     g rd   rS   r   s     r\   r'  Resource._match  s    r[   c                 ,    [        U R                  5      $ rd   lenr  rl   s    r\   __len__Resource.__len__      4<<  r[   c                 ,    [        U R                  5      $ rd   )iterr  rl   s    r\   __iter__Resource.__iter__  s    DLL!!r[   r  )r   r9   rb   N)rT   rU   rV   rW   r   rX   ri   r   r   r#   r&   r   r  r  r.   r   rz   r   r   r   r'  intr3  r   r8  rZ   r   r   s   @r\   r5   r5   U  s    04 / / / / 48 tL)723
 !0 
(#)W ) )  	3 8DcN#;  ! !"(?3 " "r[   r5   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$ )r6   i  Nr`   rH   ra   rb   c                j   > [         TU ]  US9  U(       a  UR                  S5      (       d   eXl        g )Nr`   rB   )r   ri   
startswith_path)rh   rH   ra   r   s      r\   ri   PlainResource.__init__  s/    d#4??3////
r[   c                     U R                   $ rd   r?  rl   s    r\   rp   PlainResource.canonical  rn   r[   c                 6    U R                   (       d  SU l         g g )NrB   rB  rl   s    r\   r   PlainResource.freeze  s    zzDJ r[   rL   c                     UR                  S5      (       d   eUR                  S5      (       a   e[        U5      S:  d   eXR                  -   U l        g NrB   r   )r>  endswithr2  r?  r   s     r\   r   PlainResource.add_prefix  sL      %%%%??3''''6{Qjj(
r[   c                 (    U R                   U:X  a  0 $ g rd   rB  r   s     r\   r'  PlainResource._match  s    ::Ir[   c                      U R                   U:H  $ rd   rB  r   s     r\   r   PlainResource.raw_match  s    zzT!!r[   c                     SU R                   0$ )NrH   rB  rl   s    r\   r   PlainResource.get_info  s    

##r[   c                 @    [         R                  " U R                  SS9$ NTrH   encoded)r   buildr?  rl   s    r\   ru   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   )ra   r?  rg   s     r\   r   PlainResource.__repr__  s8    )-)>sTYY%B a

|155r[   rB  r   )rT   rU   rV   rW   rX   r   ri   r   rp   r   r   r   r'  r   r   rF   r   r   ru   r   rZ   r   r   s   @r\   r6   r6     s    ;? S 8C= D  
 3  ) ) )3 8DcN#; "c "d "$) $8 86# 6 6r[   r6   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$ )r7   i  z#\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*)\}z.\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*):(?P<re>.+)\}z[^{}/]+Nr`   rH   ra   rb   c                  > [         T	U ]  US9  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)Nr`   r  z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rB   rS   )r   ri   rA   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrJ   r>  rC   _pattern
_formatter)
rh   rH   ra   rJ   rI   partr   compiledexcr   s
            r\   ri   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                   $ rd   rm  rl   s    r\   rp   DynamicResource.canonical  r  r[   rL   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 rG  )	r>  rH  r2  rh  rj  ri  rl  rJ   rm  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 rd   )rl  rb  rf  items_unquote_path)rh   rH   r   keyvalues        r\   r'  DynamicResource._match  s_    ''-= =BOO<M<S<S<U<Ujc]5))<U  s   Ac                      U R                   U:H  $ rd   rs  r   s     r\   r   DynamicResource.raw_match  s    $&&r[   c                 4    U R                   U R                  S.$ )N)rI   rJ   rm  rl  rl   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 rQ  )rm  
format_maprx  _quote_pathr   rT  )rh   r  kvurls        r\   ru   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$ )NrW  rX  r  z$<DynamicResource {name} {formatter}>)ra   rI   )ra   r   rm  rg   s     r\   r   DynamicResource.__repr__  s>    )-)>sTYY%B5<< = 
 	
r[   r  )rT   rU   rV   rW   rh  rj  ra  re  rd  rX   r   ri   r   rp   r   r   r'  r   r   rF   r   r   ru   r   rZ   r   r   s   @r\   r7   r7     s    
**;
<C**NOKD;? $S $8C= $D $ $B 3  3 3 33 8DcN#; 'c 'd 'H) H1s 1s 1
# 
 
r[   r7   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  Nr`   rL   ra   rb   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 )NrB   )r  rB   r`   )r>  rH  r   ri   rg  _prefix_prefix2)rh   rL   ra   r   s      r\   ri   PrefixResource.__init__  sn    V..s33;V;3"&//#*>*>FF>d#$V,s*r[   c                     U R                   $ rd   )r  rl   s    r\   rp   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 rG  )r>  rH  r2  r  r  r   s     r\   r   PrefixResource.add_prefix  s\      %%%%??3''''6{Q,s*r[   c                     gr   rS   r   s     r\   r   PrefixResource.raw_match  s    r[   )r  r  )rT   rU   rV   rW   rX   r   ri   r   rp   r   r   r   rZ   r   r   s   @r\   r  r    so    =A +s +Xc] +d + + 3  + + +   r[   r  c                   8  ^  \ 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\4S  jr S!r!U =r"$ )"r:   i  r  N   Fra   r   
chunk_size
show_indexfollow_symlinksappend_versionrL   rK   ra   r   r  r  r  r  rb   c                2  > [         T
U ]  XS9   [        U5      n[        U5      R	                  S5      (       a1  [        [
        R                  R                  [        U5      5      5      nUR                  5       nUR                  5       (       d  [        S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        g ! [        [        4 a  n	[        SU S35      U	eS n	A	ff = f)
Nr`   ~zNot a directoryzNo directory exists at 'rW  GETr  HEAD)r  r  )r   ri   r   rX   r>  osrH   
expanduserrz   is_dirr   FileNotFoundError
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr9   _handler  )rh   rL   rK   ra   r   r  r  r  r  rk  r   s             r\   ri   StaticResource.__init__"  s    	+	QYI9~((-- !3!3C	N!CD	!))+I##%% !233 & $%% /-- !t||T "d	
 ":. 	Q7	{!DE5P	Qs   BC1 1DDD)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)NrB   TrR  r      %%25rb)r  rX   lstripr   rT  r  r?   replacer  joinpathr  r   r  rH   normpathrelative_torz   r   r  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rh   r  r  r  unresolved_pathnormalized_pathfilepathf
file_byteshs
             r\   ru   StaticResource.url_forH  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_hashq  s?    NN	&&qxxz2zz'""r[   c                 J    U R                   U R                  U R                  S.$ )N)rK   rL   rM   )r  r  r  rl   s    r\   r   StaticResource.get_infox  s!    llll
 	
r[   r   c                 ~    SU R                   ;   a  [        S5      e[        SXU R                  S9U R                   S'   g )NOPTIONSzOPTIONS route was set alreadyr  )r  r   r9   r   )rh   r   s     r\   set_options_route StaticResource.set_options_route  s:    $>??"/wT5I5I#
Yr[   rw   c                   #    UR                   R                  nUR                  n[        U R                  5      nUR                  U R                  5      (       d  X R                  :w  a  S [        5       4$ X4;  a  S U4$ S[        U[        U R                  5      S-   S  5      0n[        XPR                  U   5      U4$ 7f)Nr  r   )r(  r)  r   r&  r  r>  r  r  ry  r2  r3   )rh   rw   rH   r   r+  r   s         r\   rz   StaticResource.resolve  s     ''dll+t}}--$,,2F;((( -S5F5J5L0M"NO
#JV0DEWWs   B<B>c                 ,    [        U R                  5      $ rd   r1  rl   s    r\   r3  StaticResource.__len__  r5  r[   c                 H    [        U R                  R                  5       5      $ rd   )r7  r  valuesrl   s    r\   r8  StaticResource.__iter__  s    DLL'')**r[   c                   #    UR                   S   n [        U5      nUR                  (       a
  [        5       e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       (       a5  U R(                  (       a   [+        U R-                  U5      SS9$ [        5       eUR1                  5       (       a  [3        X`R4                  S9$ [        e! [        [        4 a  n[        5       UeS nAf[         a    e [         a5  nUR                   R"                  R%                  U5        [        5       UeS nAff = f! [.         a    [        5       ef = f7f)Nr  z	text/html)r  content_type)r  )
match_infor   anchorr*   r  r  r  r  rH   r  r  rz   r   r  r,   	ExceptionrN   logger	exceptionr  r  r/   _directory_as_htmlPermissionErrorr  r-   r  )rh   rw   r(  r  r  r  r  rk  s           r\   r  StaticResource._handle  s    $$Z0	,G}H $o%"oo66x@O$$"&rww'7'7'H"I++DOO<*224*224$$T__5 ??*#!44X>[  $o%5E5EFF1 -. 	,.e+ 	 	,KK((/.e+	, ' *'/)*sY   GB%E 8G9+E $'GG $9GG-E88G0F??GGGGr  c           	         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$ )Nz
Index of /z<h1>z</h1>rB   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  ra   r"  r   join)rh   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  sR        '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$ )NrW  r  z/<StaticResource {name} {path} -> {directory!r}>)ra   rH   rK   )ra   r   r  r  rg   s     r\   r   StaticResource.__repr__  sE    (,		(=sTYY$2@GGLLDOO H 
 	
r[   )r  r  r  r   r  r  r  )#rT   rU   rV   rW   r  rX   r'   r   r   r;  r   ri   r   ru   staticmethodbytesr  rF   r   r&   r  r.   r   rz   r3  r   r8   r8  r0   r  r   r  r   rZ   r   r   s   @r\   r:   r:     sb   K #37$  %$$
$
 $

 sm$
 !0$
 $
 $
 $
 $
 
$
 $
T *.	' ' !	'
 
'R #5 #S # #
) 

 
T 
XW X X! !+(=1 +)W ) )V 4  C  D
# 
 
r[   r:   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\	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  rL   rN   r<   rb   Nc                    > [         TU ]  U5        X l        UR                  R	                  5        H  nUR                  U5        M     g rd   )r   ri   _approuter	resourcesr   )rh   rL   rN   r   r   s       r\   ri   PrefixedSubAppResource.__init__  s:     	

,,.H' /r[   c                    > [         TU ]  U5        U R                  R                  R	                  5        H  nUR                  U5        M     g rd   )r   r   r  r  r	  )rh   rL   r   r   s      r\   r   !PrefixedSubAppResource.add_prefix  s;    6"		((224H' 5r[   r   rs   c                     [        S5      e)Nz3.url_for() is not supported by sub-application rootr   r   s      r\   ru   PrefixedSubAppResource.url_for  s    STTr[   c                 4    U R                   U R                  S.$ )N)rN   rL   )r  r  rl   s    r\   r   PrefixedSubAppResource.get_info  s    yyDLL99r[   rw   c                   #    UR                   R                  R                  U R                  5      (       d0  UR                   R                  U R                  :w  a  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$  Nd7frd   )r  r)  r>  r  r  r&  r  r  rz   r   r   rR   r+   r+  rh   rw   r  methodss       r\   rz   PrefixedSubAppResource.resolve  s     $$//>>$$4;99++33G<<
499%j//1EFF //??G "" eG"" =s   BC6C4A%C6c                 \    [        U R                  R                  R                  5       5      $ rd   )r2  r  r  rM   rl   s    r\   r3  PrefixedSubAppResource.__len__  s     499##**,--r[   c                 \    [        U R                  R                  R                  5       5      $ rd   )r7  r  r  rM   rl   s    r\   r8  PrefixedSubAppResource.__iter__  s     DII$$++-..r[   c                 J    SR                  U R                  U R                  S9$ )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rL   rN   )r   r  r  rl   s    r\   r   PrefixedSubAppResource.__repr__  s(    =DD<<TYY E 
 	
r[   )r  )rT   rU   rV   rW   rX   ri   r   r   ru   rF   r   r.   r   rz   r;  r3  r   r8   r8  r   rZ   r   r   s   @r\   r  r    s    (s ( (4 (( ( (
US UC UC U:) :#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)	rP   i  rw   rb   c                    #    g7f)z1Return bool if the request satisfies the criteriaNrS   ry   s     r\   r   AbstractRuleMatching.match  r|   r}   c                     gr   rS   rl   s    r\   r   AbstractRuleMatching.get_info  rr   r[   c                     g)zReturn a strNrS   rl   s    r\   rp   AbstractRuleMatching.canonical"  rr   r[   rS   N)rT   rU   rV   rW   r   r   r.   r   r   rF   r   r   rX   rp   rZ   rS   r[   r\   rP   rP     sy    @7 @t @ @ 	J) J J 3   r[   rP   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$ )Domaini(  z(?!-)[a-z\d-]{1,63}(?<!-)rO   rb   Nc                 N   > [         TU ]  5         U R                  U5      U l        g rd   )r   ri   
validation_domain)rh   rO   r   s     r\   ri   Domain.__init__+  s    v.r[   c                     U R                   $ rd   r'  rl   s    r\   rp   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 strr=   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rd   )re_partrb  ).0xrh   s     r\   	<genexpr>$Domain.validation.<locals>.<genexpr>=  s%     N6M4<<))!,,6Ms   (+zDomain not validP   :)r   rX   	TypeErrorrstripr  r   r   raw_hostallr`  port)rh   rO   r  s   `  r\   r&  Domain.validation3  s    &#&&011s#))+566f_344)f$%||'''Ncll6H6H6MNNN/0088r><<,,q
++r[   rw   c                    #    UR                   R                  [        R                  5      nU(       d  gU R	                  U5      $ 7fr   )r  r  r    HOSTmatch_domain)rh   rw   hosts      r\   r   Domain.matchC  s4     ""499-  &&s   AAr>  c                 <    UR                  5       U R                  :H  $ rd   )r  r'  rh   r>  s     r\   r=  Domain.match_domainI  s    zz|t||++r[   c                     SU R                   0$ )NrO   r*  rl   s    r\   r   Domain.get_infoL  s    $,,''r[   r*  )rT   rU   rV   rW   rh  rj  r.  rX   ri   r   rp   r&  r.   r   r   r=  rF   r   rZ   r   r   s   @r\   r$  r$  (  s    jj56G/s /t / 3  , , , '7 't ', , ,() ( (r[   r$  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$ )
MaskDomainiP  z(?!-)[a-z\d\*-]{1,63}(?<!-)rO   rb   Nc                    > [         TU ]  U5        U R                  R                  SS5      R                  SS5      n[        R
                  " U5      U l        g )Nr=   z\.*z.*)r   ri   r'  r  rh  rj  _mask)rh   rO   maskr   s      r\   ri   MaskDomain.__init__S  sC     ||##C/77TBZZ%
r[   c                 .    U R                   R                  $ rd   )rI  rJ   rl   s    r\   rp   MaskDomain.canonicalX  s    zz!!!r[   r>  c                 <    U R                   R                  U5      S L$ rd   )rI  rb  rA  s     r\   r=  MaskDomain.match_domain\  s    zz##D)55r[   )rI  )rT   rU   rV   rW   rh  rj  r.  rX   ri   r   rp   r   r=  rZ   r   r   s   @r\   rF  rF  P  sX    jj78G&s &t &
 "3 " "6 6 6 6r[   rF  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)MatchedSubAppResourcei`  rQ   rN   r<   rb   Nc                 T    [         R                  U 5        SU l        X l        Xl        g )Nr  )r4   ri   r  r  _rule)rh   rQ   rN   s      r\   ri   MatchedSubAppResource.__init__a  s!    !!$'	
r[   c                 .    U R                   R                  $ rd   )rS  rp   rl   s    r\   rp   MatchedSubAppResource.canonicalg  s    zz###r[   c                 4    U R                   U R                  S.$ )N)rN   rQ   )r  rS  rl   s    r\   r   MatchedSubAppResource.get_infok  s    yy$**55r[   rw   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rd   )rS  r   r&  r  r  rz   r   r   rR   r+   r+  r  s       r\   rz   MatchedSubAppResource.resolven  s     ZZ%%g...;99++33G<<
499%j//1EFF //??G "" eG"" /<s"   CC=CC A%CCc                 4    SR                  U R                  S9$ )Nz"<MatchedSubAppResource -> {app!r}>)rN   )r   r  rl   s    r\   r   MatchedSubAppResource.__repr__y  s    6==$))=LLr[   )r  r  rS  )rT   rU   rV   rW   rP   ri   r   rX   rp   rF   r   r.   r   rz   r   rZ   rS   r[   r\   rQ  rQ  `  se    1  $  $3 $ $6) 6	#W 	# 	#M# Mr[   rQ  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$ )r9   i}  zA route with resourceNr  r   r   r   r   rb   c                "   > [         TU ]  XXCS9  g )Nr   )r   ri   )rh   r   r   r   r   r   s        r\   ri   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   rl   s    r\   r   ResourceRoute.__repr__  s.    DKK;; L 
 	
r[   c                 J    U R                   c  g U R                   R                  $ rd   )r   ra   rl   s    r\   ra   ResourceRoute.name  s    >>!~~"""r[   r   rs   c                 X    U R                   c   eU R                   R                  " U0 UD6$ )r   )r   ru   r   s      r\   ru   ResourceRoute.url_for  s,    ~~)))~~%%t6v66r[   c                 T    U R                   c   eU R                   R                  5       $ rd   )r   r   rl   s    r\   r   ResourceRoute.get_info  s%    ~~)))~~&&((r[   rS   )rT   rU   rV   rW   __doc__rX   r   r&   r   r#   r4   r   r   ri   r   r   ra   r   ru   rF   r   rZ   r   r   s   @r\   r9   r9   }  s     48



 w\ 223

 #	

 !0

 


 


# 

 #hsm # #
7S 7C 7C 7
)) ) )r[   r9   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  rR   rb   Nc                 b   > [         TU ]  [        R                  U R                  5        Xl        g rd   )r   ri   r    r  r  _http_exceptionr  s     r\   ri   SystemRoute.__init__  s     5-r[   r   rs   c                     [        S5      e)Nz).url_for() is not allowed for SystemRouter  r   s      r\   ru   SystemRoute.url_for  s    FGGr[   c                     g rd   rS   rl   s    r\   ra   SystemRoute.name  r   r[   c                     SU R                   0$ )NrR   rk  rl   s    r\   r   SystemRoute.get_info  s     $"6"677r[   rw   c                 "   #    U R                   e7frd   rr  ry   s     r\   r  SystemRoute._handle  s     """s   c                 .    U R                   R                  $ rd   )rk  r  rl   s    r\   r  SystemRoute.status      ##***r[   c                 .    U R                   R                  $ rd   )rk  r	  rl   s    r\   r	  SystemRoute.reason  rx  r[   c                      SR                  U S9$ )Nz*<SystemRoute {self.status}: {self.reason}>rl   )r   rl   s    r\   r   SystemRoute.__repr__  s    ;BBBMMr[   rr  )rT   rU   rV   rW   r(   ri   rX   r   ru   r   r   ra   rF   r   r.   r0   r  r;  r  r	  r   rZ   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  rb   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rd   )	rw   r   r    METH_ALL_raise_allowed_methodsgetattrr  r   r0   )rh   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       $ rd   )r  	__await__rl   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 rd   )r    r  hasattrr  r+   rw   r   )rh   r  r+  s      r\   r  View._raise_allowed_methods  sD    &*mmPmwtWWY7O1mP"4<<#6#6HH Qs
   "A!A!rS   )rT   rU   rV   rW   r0   r  r   r   r  r   r  rZ   rS   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	  rb   Nc                     Xl         g rd   
_resources)rh   r	  s     r\   ri   ResourcesView.__init__  s    #r[   c                 ,    [        U R                  5      $ rd   )r2  r  rl   s    r\   r3  ResourcesView.__len__  s    4??##r[   c              #   8   #    U R                    S h  vN   g  N7frd   r  rl   s    r\   r8  ResourcesView.__iter__  s     ??""   r   c                     XR                   ;   $ rd   r  rh   r   s     r\   __contains__ResourcesView.__contains__  s    ??**r[   r  )rT   rU   rV   rW   r   r4   ri   r;  r3  r   r8  objectr   r  rZ   rS   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 rd   )r  r"  )rh   r	  r   r   s       r\   ri   RoutesView.__init__  s/    ,.!H!##E* " "r[   rb   c                 ,    [        U R                  5      $ rd   r1  rl   s    r\   r3  RoutesView.__len__  r5  r[   c              #   8   #    U R                    S h  vN   g  N7frd   r:  rl   s    r\   r8  RoutesView.__iter__  s     <<r  r   c                     XR                   ;   $ rd   r:  r#  s     r\   r  RoutesView.__contains__  s    $$r[   r:  N)rT   rU   rV   rW   r   r4   ri   r;  r3  r   r8   r8  r  r   r  rZ   rS   r[   r\   r  r    sD    +$'7"8 +! ! (=1  %& %T %r[   r  c                     ^  \ rS rSr\R
                  " S5      rS3U 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.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r-S\S\ S#\(S\$4S, jr.S\S\ S#\(S\$4S- jr/S\S\!\"   S#\(S\$4S. jr0S3U 4S/ jjr1S0\2\3   S\4\$   4S1 jr5S2r6U =r7$ )4r2   i  z[.:-]rb   Nc                 >   > [         TU ]  5         / U l        0 U l        g rd   )r   ri   r  _named_resourcesr   s    r\   ri   UrlDispatcher.__init__  s    24=?r[   rw   c                   #    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(       a  [	        [        X#5      5      $ [	        [        5       5      $  NC7frd   )r   r&  r  rz   r   r+   r,   )rh   rw   r   r+  r   r   alloweds          r\   rz   UrlDispatcher.resolve  sv     $'EH(0(8(8(A"AJ%!!* ( !"6v"OPP!,.11 #Bs   :BB ABc                 ,    [        U R                  5      $ rd   )r7  r  rl   s    r\   r8  UrlDispatcher.__iter__  s    D))**r[   c                 ,    [        U R                  5      $ rd   )r2  r  rl   s    r\   r3  UrlDispatcher.__len__  s    4(())r[   r   c                     XR                   ;   $ rd   r  r  s     r\   r  UrlDispatcher.__contains__  s    0000r[   ra   c                      U R                   U   $ rd   r  rg   s     r\   __getitem__UrlDispatcher.__getitem__  s    $$T**r[   c                 ,    [        U R                  5      $ rd   )r  r  rl   s    r\   r	  UrlDispatcher.resources  s    T__--r[   c                 ,    [        U R                  5      $ rd   )r  r  rl   s    r\   rM   UrlDispatcher.routes  s    $//**r[   c                 ,    [        U R                  5      $ rd   )r   r  rl   s    r\   named_resourcesUrlDispatcher.named_resources  s     5 566r[   c                 T   [        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        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   r4   frozenr   ra   NAME_SPLIT_REr`  keyword	iskeywordr   isidentifierr   r  r  r"  )rh   r   ra   r  rn  s        r\   register_resourceUrlDispatcher.register_resource   s)   &
 
 	OA(N	O 
 ;;OPP}}&&,,T2E$$T**$/x 8) ) 
 ((**$1 28	   ,,, ..4fT;P;PQU;V.W  +3!!$'x(r[   r`   rH   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;   dF  SU;   d@  [        R                  U5      (       d&  [        [        U5      US9nU R                  U5        U$ [        XS9nU R                  U5        U$ )NrB   z)path should be started with / or be emptyr^  r_  r`   )r>  r   r  ra   r   r   r5   rA   searchr6   rg  r  r7   )rh   rH   ra   r   s       r\   add_resourceUrlDispatcher.add_resourceA  s    ,,HII??r*H}}$););D)A)AHh//tsd{hood.C.C$]4%8tDH""8,O"43x(r[   )ra   r   r   r   r   c                @    U R                  X$S9nUR                  XUS9$ )Nr`   r  )r  r  )rh   r   rH   r   ra   r   r   s          r\   r  UrlDispatcher.add_routeQ  s-     $$T$5!!&.!QQr[   r  Fr  rL   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

rB   Nr  r  )r>  rH  r:   r  )
rh   rL   rH   ra   r   r  r  r  r  r   s
             r\   
add_staticUrlDispatcher.add_static]  sl    $   %%%%??3CR[F!)!!+)	
 	x(r[   rs   c                 F    U R                   " [        R                  X40 UD6$ )z(Shortcut for add_route with method HEAD.)r  r    	METH_HEADrh   rH   r   rs   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)ra   
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.
r`   )r  r  r    r  METH_GET)rh   rH   r   ra   r  rs   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 rd   )r   r   r  )rh   r   r   s     r\   r   UrlDispatcher.freeze  s%    HOO (r[   rM   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)rh   rM   registered_routes	route_defs       r\   
add_routesUrlDispatcher.add_routes  s3     I$$Y%7%7%=>    r[   )r  r  r   )8rT   rU   rV   rW   rh  rj  r  ri   r.   r3   rz   r   rX   r8  r;  r3  r  r   r  r4   r  r  r	  r  rM   r   r  r  r   r5   r  r   r&   r   r#   r   r8   r  r'   r  r   r  r  r  r  r  r  r  r  r   r   r1   r   r  rZ   r   r   s   @r\   r2   r2     sE   JJx(M@
2W 21D 2 +(3- +* *1V 1 1+ +(8 +.= .+
 +7.>)>!? 7)*: )t )B @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[   r2   r{  c                 x    [         S:  a  U R                  SS5      n [        R                  " U SS9R                  $ )Nr  r  r  FrR  )r?   r  r   rT  r)  r{  s    r\   r  r    s1    fc5)99%/888r[   c                 @    [         R                  " U SS9R                  $ rQ  )r   rT  rH   r  s    r\   ry  ry    s    99%.333r[   c                 L    [        U 5      nSU ;   a  UR                  SS5      nU$ )Nr  r  )r  r  )r{  r   s     r\   rg  rg    s*     F
e|s+Mr[   )wr   r   r  	functoolsr  r  r   r  r  rh  r   
contextlibr   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/   r0   web_routedefr1   __all__web_appr<   rX   BaseDictdictr   mapr;  r`  r?   rY   rj  r@   rA   ri  rC   r   r   partialr  rF   r4   ABCr8   r3   r   r   r5   r6   r7   r  r:   r  rP   r$  rF  rQ  r9   r   r;   r  r  r2   r  ry  rg  rS   r[   r\   <module>r     s)   
        	 	  %   "     2 2  @ @   '  +   2 * $CH~HH',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 ,/^N3CGG N3b@B($5 @BF
( 
L7 Lt L7" 7"x&6H &6RI
h I
X% 2K
^ K
\)
^ )
X377 %(! %(P6 6 M2 M:!)M !)HN- N<I< I(+E8$45yAQ7R +%/=1I %"M!NGC1A,A$B M!`9s 9s 94 4 4  r[   