
    *Gju                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlmZmZmZmZmZmZmZmZ d dlmZ d dlmZ d dl
mZ d dlmZ d dlmZmZmZm Z m!Z!m"Z"m#Z# d dl$m%Z%m&Z' d	d
l(m)Z) d	dl m*Z*m+Z+m,Z, d	dl-m.Z.m/Z/ d	dl0m1Z1 d	dl2m3Z3m4Z4 d	dl5m6Z6m7Z7m8Z8m9Z9m:Z: d	dl;m<Z< d	dl=m>Z> d	dl?m@Z@mAZA d	dlBmCZC dZDerd	dlEmFZF eGeHeHf         ZIneGZIejJ        dk     reKfndZL eM eNeO e'jP        d          dd                             ZQeeMeOdf                  eRd<    e
jS        d          ZTeeeH                  eRd<    e
jS        d          ZUeeeH                  eRd<    e
jV        d           ZWeeH         eRd!<    e	jX                    d"k    ZYeeZ         eRd#<   ee>geeAdz           f         Z[eMe!d$         e\eH         f         Z] ej^        ejV        d%&          Z_ G d' d(e"d)*          Z` G d+ d,eed-                   Za G d. d-e jb                  Zc G d/ d$eIe*          Zd G d0 d1ed          Zed2e>d3dfd4Zf G d5 d6ea          Zg G d7 d8eg          Zh G d9 d:eg          Zi G d; d<ea          Zj G d= d>ej          Zk G d? d@ej          Zl G dA dBe jb                  Zm G dC dDem          Zn G dE dFen          Zo G dG dHel          Zp G dI dJec          Zq G dK dLec          Zr G dM dNe,          Zs G dO dPeeea         eea                   Zt G dQ dReeec         eec                   Zu G dS dTe+eeHeaf                   ZvdUeHd3eHfdVZwdUeHd3eHfdWZxdUeHd3eHfdXZydS )Y    N)	AwaitableCallable	Container	GeneratorIterableIteratorMappingSized)wraps)Path)Pattern)MappingProxyType)TYPE_CHECKINGAnyFinalNoReturnOptional	TypedDictcast)URL__version__   )hdrs)AbstractMatchInfoAbstractRouterAbstractView)DEBUGDEFAULT_CHUNK_SIZE)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_SEPWindows
IS_WINDOWSr-   T)quotec                       e Zd ZU eed<   eed<   ee         ed<   eed<   eed<   eedf         ed<   ded	<   eed
<   ded<   eed<   dS )	_InfoDictpath	formatterpattern	directoryprefixr2   routesr6   appdomainAbstractRuleMatchingrulehttp_exceptionN)	__name__
__module____qualname__str__annotations__r   r   r	   r"   r9       a/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/aiohttp/web_urldispatcher.pyrE   rE   Z   s         
IIINNNS\OOOKKKC())))	KKK
    !!!!!!rV   rE   F)totalc                   X   e Zd Zdddedz  ddfdZededz  fd            Zeej        defd                        Z	ej        dede
fd	            Zej        d
edefd            Zej        deddfd            Zej        defd            ZddZej        dedefd            ZdS )r.   Nnamer[   returnc                    || _         d S N_nameselfr[   s     rW   __init__zAbstractResource.__init__n   s    


rV   c                     | j         S r^   r_   rb   s    rW   r[   zAbstractResource.nameq   
    zrV   c                     dS )zWExposes the resource's canonical path.

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

        Nr9   re   s    rW   	canonicalzAbstractResource.canonicalu         rV   kwargsc                     dS )z2Construct url for resource with additional params.Nr9   )rb   rj   s     rW   url_forzAbstractResource.url_for~   ri   rV   requestc                 
   K   dS )zWResolve resource.

        Return (UrlMappingMatchInfo, allowed_methods) pair.
        Nr9   rb   rm   s     rW   resolvezAbstractResource.resolve   
        rV   rJ   c                     dS )zWAdd a prefix to processed URLs.

        Required for subapplications support.
        Nr9   rb   rJ   s     rW   
add_prefixzAbstractResource.add_prefix   ri   rV   c                     dS z;Return a dict with additional info useful for introspectionNr9   re   s    rW   get_infozAbstractResource.get_info   ri   rV   c                     d S r^   r9   re   s    rW   freezezAbstractResource.freeze   s    rV   rF   c                     dS )z Perform a raw match against pathNr9   rb   rF   s     rW   	raw_matchzAbstractResource.raw_match   ri   rV   r\   N)rQ   rR   rS   rT   rc   propertyr[   abcabstractmethodrh   r   rl   r(   _Resolverp   rt   rE   rw   ry   boolr|   r9   rV   rW   r.   r.   m   s       -1   d
 d     cDj    X 3     X 	A A A A A A 	W      	      	J) J J J J    	/c /d / / / / / /rV   r.   r2   c                   P   e Zd Zddddedeee         z  dedz  dedz  ddf
dZ	e
defd	            Ze
defd
            Ze
ej        dedz  fd                        Ze
dedz  fd            Zej        defd            Zej        dededefd            Zdededz  fdZdS )r2   Nexpect_handlerresourcemethodhandlerr   r   r\   c                T   |t           }t          j        |          s1t          j        dk     rt          j        |          sJ d|            |                                }t                              |          st          | d          t          |          s
J |            t          j        |          s$t          j        dk     rt          j        |          rnt          j        |          r$t          rJ t          j        dt                     nrt!          |t"                    rt%          |t&                    rnGt          j        dt                     t)          |          dt*          dt,          ffd	            }||}|| _        || _        || _        || _        d S )
N)r7      zCoroutine is expected, got z is not allowed HTTP methodFz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesrm   r\   c                    K    |           }t          j        |          r| d {V }t          |t                    sJ |S r^   )asyncioiscoroutine
isinstancer*   )rm   resultold_handlers     rW   handler_wrapperz/AbstractRoute.__init__.<locals>.handler_wrapper   sU      $W--&v.. *#)\\\\\\F!&.99999rV   )_default_expect_handlerinspectiscoroutinefunctionsysversion_infor   upperr=   match
ValueErrorcallableisgeneratorfunctionr   warningswarnDeprecationWarningr   type
issubclassr   r   r(   r*   _method_handler_expect_handler	_resource)rb   r   r   r   r   r   r   s         @rW   rc   zAbstractRoute.__init__   s    !4N*>:: 	<w&&7+F~+V+V&&;;; '&
 ##F++ 	ECCCDDD  ))')) &w// 	&w&&7+Fw+O+O&(11 	& uMH"    && 	&:g|+L+L 	&M?AS   7^^w >      ^ "K%G-!rV   c                     | j         S r^   )r   re   s    rW   r   zAbstractRoute.method   
    |rV   c                     | j         S r^   )r   re   s    rW   r   zAbstractRoute.handler   s
    }rV   c                     dS )z8Optional route's name, always equals to resource's name.Nr9   re   s    rW   r[   zAbstractRoute.name   ri   rV   c                     | j         S r^   )r   re   s    rW   r   zAbstractRoute.resource   s
    ~rV   c                     dS rv   r9   re   s    rW   rw   zAbstractRoute.get_info   ri   rV   argsrj   c                     dS )/Construct url for route with additional params.Nr9   rb   r   rj   s      rW   rl   zAbstractRoute.url_for   ri   rV   rm   c                 <   K   |                      |           d {V S r^   )r   ro   s     rW   handle_expect_headerz"AbstractRoute.handle_expect_header   s,      ))'222222222rV   )rQ   rR   rS   rT   r    r   r   _ExpectHandlerr.   rc   r~   r   r   r   r   r[   r   rE   rw   r   rl   r(   r*   r   r9   rV   rW   r2   r2      s        15,05" 5" 5"5" 4--5"
 '-5" #T)5" 
5" 5" 5" 5"n     X     X GcDj G G G  XG *T1    X 	J) J J J J 	>S >C >C > > > >3' 3nt>S 3 3 3 3 3 3rV   c                   D    e Zd ZdZdeeef         deddf fdZede	fd            Z
edefd            Zedefd	            Zededz  fd
            ZdefdZeded         fd            ZddZedd            Zej        dd            ZddZdef fdZ xZS )r-   )_route_apps_current_app_frozen
match_dictrouter\   Nc                     t                                          |           || _        g | _        d | _        d| _        d S NF)superrc   r   r   r   r   )rb   r   r   	__class__s      rW   rc   zUrlMappingMatchInfo.__init__   s<    $$$(*
04rV   c                     | j         j        S r^   )r   r   re   s    rW   r   zUrlMappingMatchInfo.handler   s    {""rV   c                     | j         S r^   )r   re   s    rW   r   zUrlMappingMatchInfo.route   s
    {rV   c                     | j         j        S r^   )r   r   re   s    rW   r   z"UrlMappingMatchInfo.expect_handler  s    {//rV   c                     d S r^   r9   re   s    rW   rP   z"UrlMappingMatchInfo.http_exception      trV   c                 4    | j                                         S r^   )r   rw   re   s    rW   rw   zUrlMappingMatchInfo.get_info  s    {##%%%rV   )r6   .c                 *    t          | j                  S r^   )tupler   re   s    rW   appszUrlMappingMatchInfo.apps  s    TZ   rV   rL   r6   c                     | j         rt          d          | j        || _        | j                            d|           d S )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrb   rL   s     rW   add_appzUrlMappingMatchInfo.add_app  sK    < 	PNOOO$ #D
!S!!!!!rV   c                     | j         }|J |S r^   )r   r   s     rW   current_appzUrlMappingMatchInfo.current_app  s    
rV   c                 h    t           r#|| j        vrt          d| j        d|          || _        d S )Nz#Expected one of the following apps z, got )r   r   r   r   r   s     rW   r   zUrlMappingMatchInfo.current_app   sN     	$*$$"U$*UUcUU    rV   c                     d| _         d S )NT)r   re   s    rW   ry   zUrlMappingMatchInfo.freeze)  s    rV   c                 \    dt                                                       d| j         dS )Nz<MatchInfo : >)r   __repr__r   rb   r   s    rW   r   zUrlMappingMatchInfo.__repr__,  s.    AUWW--//AA4;AAAArV   )rL   r6   r\   N)r\   r6   r}   )rQ   rR   rS   	__slots__dictrT   r2   rc   r~   r    r   r   r   r   r"   rP   rE   rw   r   r   r   r   setterry   r   __classcell__r   s   @rW   r-   r-      s       >I4S> - D       # # # # X# }    X 0 0 0 0 X0  4    X&) & & & & !e./ ! ! ! X!" " " "    X
           B# B B B B B B B B B BrV   c                   T     e Zd ZdZdeddf fdZedefd            ZdefdZ	 xZ
S )MatchInfoError
_exceptionrP   r\   Nc                 ~    || _         t                                          i t          | j                              d S r^   )r   r   rc   SystemRouterb   rP   r   s     rW   rc   zMatchInfoError.__init__4  s4    ([99:::::rV   c                     | j         S r^   r   re   s    rW   rP   zMatchInfoError.http_exception8  
    rV   c                 <    d| j         j         d| j         j         dS )Nz<MatchInfoError r   r   )r   statusreasonre   s    rW   r   zMatchInfoError.__repr__<  s%    U$/"8UUDO<RUUUUrV   )rQ   rR   rS   r   r"   rc   r~   rP   rT   r   r   r   s   @rW   r   r   0  s        I;} ; ; ; ; ; ; ;     XV# V V V V V V V VrV   r   rm   r\   c                 &  K   | j                             t          j        d          }| j        t
          k    rY|                                dk    r.| j                            d           d{V  d| j        _	        dS t          d|z            dS )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#   )rm   expects     rW   r   r   @  s       _  b11F-''<<>>^++.&&'GHHHHHHHHH)*GN&&&'-AF-JKKKK ('rV   c            	            e Zd Zdddedz  ddf fdZdddedee         ez  d	edz  dd
fdZ	ddZ
dedefdZej        dedeeef         dz  fd            ZdefdZded
         fdZ xZS )r/   NrZ   r[   r\   c                    t                                          |           i | _        d | _        t	                      | _        d S )NrZ   )r   rc   _routes
_any_routeset_allowed_methods)rb   r[   r   s     rW   rc   zResource.__init__Q  s>    d###1304*-%%rV   r   r   r   r   r3   c                    | j                             || j                  x}rt          d|j         d          t          ||| |          }|                     |           |S )Nz+Added route will never be executed, method z is already registeredr   )r   r   r   r   r   r3   register_route)rb   r   r   r   r   	route_objs         rW   	add_routezResource.add_routeW  s     L$$VT_===5 	,     "&'4WWW	I&&&rV   r   c                     t          |t                    sJ d|            |j        t          j        k    r|| _        | j                            |j                   || j        |j        <   d S )Nz)Instance of Route class is required, got )	r   r3   r   r   METH_ANYr   r   addr   rb   r   s     rW   r   zResource.register_routei  s    =
 
 	A 	A@u@@	A 	A 
 <4=((#DO!!%,///%*U\"""rV   rm   c                    K   |                      |j        j                  x}d t                      fS | j                            |j        | j                  x}rt          ||          | j	        fS d | j	        fS r^   )
_matchrel_url	path_safer   r   r   r   r   r-   r   )rb   rm   r   r   s       rW   rp   zResource.resolver  sz      ++go&?@@@JI;L$$W^T_EEE5 	Q&z5994;PPPT***rV   rF   c                     d S r^   r9   r{   s     rW   r  zResource._matchy  s    rV   c                 *    t          | j                  S r^   lenr   re   s    rW   __len__zResource.__len__}      4<   rV   c                 N    t          | j                                                  S r^   iterr   valuesre   s    rW   __iter__zResource.__iter__      DL''))***rV   )r   r3   r\   N)rQ   rR   rS   rT   rc   r   r   r    r   r   r   r(   r   rp   r   r   r   r  intr  r   r  r   r   s   @rW   r/   r/   P  sd       -1 0 0 0d
 0d 0 0 0 0 0 0 15   l#g-
 '- 
   $+ + + ++W + + + + + 	3 4S>D#8    ! ! ! ! !+(?3 + + + + + + + +rV   r/   c                        e Zd Zdddededz  ddf fdZedefd            ZddZd	eddfd
Zdede	eef         dz  fdZ
dedefdZdefdZdefdZdefdZ xZS )r0   NrZ   rF   r[   r\   c                    t                                          |           |r|                    d          sJ || _        d S )NrZ   r?   )r   rc   
startswith_path)rb   rF   r[   r   s      rW   rc   zPlainResource.__init__  sF    d###/4??3/////


rV   c                     | j         S r^   r  re   s    rW   rh   zPlainResource.canonical  rf   rV   c                 &    | j         s	d| _         d S d S )Nr?   r  re   s    rW   ry   zPlainResource.freeze  s!    z 	DJJJ	 	rV   rJ   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        d S Nr?   r   )r  endswithr  r  rs   s     rW   rt   zPlainResource.add_prefix  sY      %%%%%??3'''''6{{Qdj(


rV   c                      | j         |k    ri S d S r^   r  r{   s     rW   r  zPlainResource._match  s    :ItrV   c                     | j         |k    S r^   r  r{   s     rW   r|   zPlainResource.raw_match  s    zT!!rV   c                     d| j         iS )NrF   r  re   s    rW   rw   zPlainResource.get_info  s    
##rV   c                 8    t          j        | j        d          S )NTrF   encoded)r   buildr  re   s    rW   rl   zPlainResource.url_for  s    ydj$7777rV   c                 J    | j         d| j         z   dz   nd}d| d| j         dS )N'' r   z<PlainResource  r   )r[   r  ra   s     rW   r   zPlainResource.__repr__  s9    )-)>sTY%%B555
5555rV   r}   )rQ   rR   rS   rT   rc   r~   rh   ry   rt   r   r  r   r|   rE   rw   r   rl   r   r   r   s   @rW   r0   r0     sb       8<   S 3:       
 3    X   ) ) ) ) ) )3 4S>D#8    "c "d " " " "$) $ $ $ $8 8 8 8 86# 6 6 6 6 6 6 6 6rV   r0   c                       e Zd Z ej        d          Z ej        d          ZdZdddededz  ddf fd	Z	e
defd
            ZdeddfdZdedeeef         dz  fdZdedefdZdefdZdedefdZdefdZ xZS )r1   z#\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*)\}z.\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*):(?P<re>.+)\}z[^{}/]+NrZ   rF   r[   r\   c                   t                                          |           || _        d}d}t                              |          D ]}| j                            |          }|rP|d                    |                    d          | j	                  z  }|d|                    d          z   dz   z  }o| j
                            |          }|rA| dj        di |                                z  }|d|                    d          z   dz   z  }d|v sd|v rt          d| d	| d
          t          |          }||z  }|t          j        |          z  }	 t          j        |          }n-# t          j        $ r}t          d| d|           d d }~ww xY w|j                            t(                    sJ |                    d          sJ || _        || _        d S )NrZ   r   z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': r?   r9   )r   rc   
_orig_pathr>   splitDYN	fullmatchformatgroupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrH   r  r@   _pattern
_formatter)
rb   rF   r[   rH   rG   partr   compiledexcr   s
            rW   rc   zDynamicResource.__init__  s    d###	NN4(( 	' 	'DH&&t,,E <..u{{5/A/A49MMMS5;;u#5#55;;	$..t44E 3,3HHeoo6G6GHHHS5;;u#5#55;;	d{{cTkk !C$!C!C4!C!C!CDDD &&DIry&GG	Jz'**HHx 	J 	J 	J>W>>>>??TI	J**844444##C((((( #s   !E6 6F FF c                     | j         S r^   )r:  re   s    rW   rh   zDynamicResource.canonical  r   rV   rJ   c                    |                     d          sJ |                    d          rJ t          |          dk    sJ t          j        t          j        |          | j        j        z             | _        || j        z   | _        d S r  )	r  r  r  r5  r7  r6  r9  rH   r:  rs   s     rW   rt   zDynamicResource.add_prefix  s~      %%%%%??3'''''6{{Q
29V#4#4t}7L#LMM 4?2rV   c                     | j                             |          }|d S d |                                                                D             S )Nc                 4    i | ]\  }}|t          |          S r9   )_unquote_path_safe).0keyvalues      rW   
<dictcomp>z*DynamicResource._match.<locals>.<dictcomp>  s4     
 
 
/9sEC#E**
 
 
rV   )r9  r.  r3  items)rb   rF   r   s      rW   r  zDynamicResource._match  sX    ''--=4
 
=B__=N=N=T=T=V=V
 
 
 	
rV   c                     | j         |k    S r^   )r+  r{   s     rW   r|   zDynamicResource.raw_match  s    $&&rV   c                      | j         | j        dS )N)rG   rH   )r:  r9  re   s    rW   rw   zDynamicResource.get_info  s    !_GGGrV   partsc                     | j                             d |                                D                       }t          j        |d          S )Nc                 4    i | ]\  }}|t          |          S r9   )_quote_path)rC  kvs      rW   rF  z+DynamicResource.url_for.<locals>.<dictcomp>  s$    )V)V)V1![^^)V)V)VrV   Tr  )r:  
format_maprG  r   r!  )rb   rJ  urls      rW   rl   zDynamicResource.url_for  sC    o(()V)V)V)V)VWWyc40000rV   c                 J    | j         d| j         z   dz   nd}d| d| j         dS )Nr#  r$  r   z<DynamicResource r%  r   )r[   r:  ra   s     rW   r   zDynamicResource.__repr__  s9    )-)>sTY%%B<4<<$/<<<<rV   )rQ   rR   rS   r5  r7  r-  r2  r1  rT   rc   r~   rh   rt   r   r  r   r|   rE   rw   r   rl   r   r   r   s   @rW   r1   r1     s       
"*;
<
<C"*NOOKD8<  $  $  $S  $3:  $  $  $  $  $  $  $D 3    X3 3 3 3 3 3
3 
4S>D#8 
 
 
 
'c 'd ' ' ' 'H) H H H H1s 1s 1 1 1 1=# = = = = = = = =rV   r1   c                   t     e Zd Zdddededz  ddf fdZedefd            ZdeddfdZdedefd	Z	 xZ
S )
PrefixResourceNrZ   rJ   r[   r\   c                   |r|                     d          s
J |            |dv s|                    d          r
J |            t                                          |           t	          |          | _        | j        dz   | _        d S )Nr?   )r   r?   rZ   )r  r  r   rc   r4  _prefix_prefix2)rb   rJ   r[   r   s      rW   rc   zPrefixResource.__init__  s    ;V..s33;;V;;3""&//#*>*>"""">d###$V,,s*rV   c                     | j         S r^   )rV  re   s    rW   rh   zPrefixResource.canonical   r   rV   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        | j        dz   | _        d S r  )r  r  r  rV  rW  rs   s     rW   rt   zPrefixResource.add_prefix  sg      %%%%%??3'''''6{{Q,s*rV   c                     dS r   r9   rs   s     rW   r|   zPrefixResource.raw_match  s    urV   )rQ   rR   rS   rT   rc   r~   rh   rt   r   r|   r   r   s   @rW   rT  rT    s        :> + + +s +S4Z +4 + + + + + + 3    X+ + + + + +         rV   rT  c                   0    e Zd ZdZddedddddedededz  dedz  d	ed
e	de	de	ddf fdZ
dddede	dz  defdZededefd            ZdefdZdeddfdZdedefdZdefdZdee         fdZdedefdZdedefdZdedefdZdefd Z  xZ!S )!r4   rO  NFr[   r   
chunk_size
show_indexfollow_symlinksappend_versionrJ   rI   r[   r   r]  r^  r_  r`  r\   c                H   t                                          ||           	 t          |                                                              d          }n&# t
          $ r}	t          d| d          |	d }	~	ww xY w|                                st          d| d          || _        || _	        || _
        || _        || _        || _        t          d| j        | |          t          d	| j        | |          d
| _        t#          | j                  | _        d S )NrZ   T)strictr#  z' does not existz' is not a directoryGETr   HEAD)rc  rd  )r   rc   r   
expanduserrp   FileNotFoundErrorr   is_dir
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr3   _handler   r   r   )rb   rJ   rI   r[   r   r]  r^  r_  r`  r8  r   s             rW   rc   zStaticResource.__init__  sU    	d+++	IY2244<<D<IIII  	I 	I 	I<<<<==5H	I!! 	B@@@@AAA#%% /-- !t|T.   "d>  	
 
 !$DL 1 1s   5A 
A?&A::A?)r`  filenamec                   || j         }t          |                              d          }t          j        | j        d          }t          dk     r||                    dd          z  }n||z  }|rM| j        	                    |          }	 | j
        r[t          t          j                            |                    }|                    | j                   |                                }n.|                                }|                    | j                   n# t"          t$          f$ r |cY S w xY w|                                rt|                    d          5 }|                                }d d d            n# 1 swxY w Y   |                     |          }	|                    | j        |	i          }|S |S )Nr?   Tr  r      %%25rb)rl  rT   lstripr   r!  rV  r<   replacerh  joinpathrk  r   osrF   normpathrelative_torp   r   rf  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rb   rn  r`  rQ  unresolved_pathnormalized_pathfilepathf
file_byteshs
             rW   rl   zStaticResource.url_for8  s    !!1Nx=='',,iT\4888&  ((e444CC.C 	"o66x@@O( :&*27+;+;O+L+L&M&MO#//@@@.6688HH.6688H((999 12    


 !!  ]]4(( *A!"J* * * * * * * * * * * * * * *''
33nnd&6%:;;

s%   BD   D65D6"FF
F
byte_arrayc                     t          j                    }|                    |            t          j        |                                          }|                    d          S )Nascii)hashlibsha256updatebase64urlsafe_b64encodedigestdecode)r  mb64s      rW   r~  zStaticResource._get_file_hasha  sK    N	&qxxzz22zz'"""rV   c                 ,    | j         | j        | j        dS )N)rI   rJ   rK   )rh  rV  r   re   s    rW   rw   zStaticResource.get_infoh  s     ll
 
 	
rV   r   c                     d| j         v rt          d          t          d|| | j                  | j         d<   | j                            d           d S )NOPTIONSzOPTIONS route was set alreadyr   )r   r   r3   r   r   r   )rb   r   s     rW   set_options_routez StaticResource.set_options_routeo  sd    $$>???"/wT5I#
 #
 #
Y 	!!),,,,,rV   rm   c                   K   |j         j        }|j        }t          j                            |          }t          r|                    dd          }|                    | j	                  s|| j
        k    rd t                      fS | j        }||vrd |fS dt          |t          | j
                  dz   d                    i}t          || j        |                   |fS )N\r?   rn  r   )r  r  r   rx  rF   ry  rB   rv  r  rW  rV  r   r   rB  r  r-   r   )rb   rm   rF   r   	norm_pathallowed_methodsr   s          rW   rp   zStaticResource.resolvew  s      ( G$$T**	 	5!))$44I##DM22 	yDL7P7P;/(((( "4T#dl:K:Ka:O:Q:Q5R"S"ST
#JV0DEEWWrV   c                 *    t          | j                  S r^   r  re   s    rW   r  zStaticResource.__len__  r	  rV   c                 N    t          | j                                                  S r^   r  re   s    rW   r  zStaticResource.__iter__  r  rV   c                   K   |j         d         }t          |                                          rt                      | j                            |          }t          j                    }|                    d | j	        |           d {V S )Nrn  )

match_infor   is_absoluter&   rh  rw  r   get_running_looprun_in_executor_resolve_path_to_response)rb   rm   rn  r  loops        rW   rm  zStaticResource._handle  s      %j1>>%%'' 	! .. /228<<'))))$0/
 
 
 
 
 
 
 
 	
rV   r  c                    	 | j         r[t          t          j                            |                    }|                    | j                   |                                }n.|                                }|                    | j                   n*# t          gt          R $ r}t                      |d}~ww xY w	 |                                r9| j        r$t          |                     |          d          S t                      n!# t           $ r}t                      |d}~ww xY wt#          || j                  S )zFTake the unresolved path and query the file system to form a response.Nz	text/html)r   content_type)r]  )rk  r   rx  rF   ry  rz  rh  rp   r   CIRCULAR_SYMLINK_ERRORr&   rg  ri  r)   _directory_as_htmlr$   PermissionErrorr'   rj  )rb   r  r  	file_pathr8  s        rW   r  z(StaticResource._resolve_path_to_response  s^   
	,$ 7"&rw'7'7'H'H"I"I++DO<<<+3355		+3355	%%do6664344 	, 	, 	, ..e+	,
	-!! *# *#!44Y??%0   
 (//)*  	- 	- 	-//u,	- I$2BCCCCs6   BB B:&B55B:>>D =D 
D*D%%D*dir_pathc           	         |                                 sJ |                    | j                                                  }dt	          |           }d| d}g }|                                }t          |          D ]}|                    | j                                                  }t          | j         d|           }	|                                 r|j	         d}
n|j	        }
|
                    d|	 dt	          |
           d           d                    d	                    |                    }d
| d	| d}d| d}d| d	| d}|S )z"returns directory's index as html.z
Index of /z<h1>z</h1>r?   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>)rg  rz  rh  as_posixhtml_escapeiterdirsortedrM  rV  r[   appendr/  join)rb   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                  rW   r  z!StaticResource._directory_as_html  s        '33DODDMMOOC,@ A ACC#H###
$$&&	I&& 	 	E((99BBDDH)T\*F*FH*F*FGGO ||~~ '$z,,,		!J	TTT;y3I3ITTT    %%dii
&;&;<<-"-----@X@@@5(55d555rV   c                 Z    | j         d| j         z   dz   nd}d| d| j         d| j        dS )Nr#  r   z<StaticResource r%   -> r   )r[   rV  rh  ra   s     rW   r   zStaticResource.__repr__  sC    (,	(=sTY$$2O$OOOO4?OOOOrV   )"rQ   rR   rS   r  r   rT   r!   r   r  r   rc   r   rl   staticmethodbytesr~  rE   rw   r    r  r(   r   rp   r  r   r2   r  r*   rm  r   r  r  r   r   r   s   @rW   r4   r4     sh       K  04,  %$"2 "2 "2"2 "2
 Dj"2 '-"2 "2 "2 "2 "2 
"2 "2 "2 "2 "2 "2P '+	' ' ' ' t	'
 
' ' ' 'R #5 #S # # # \#
) 
 
 
 
- -T - - - -XW X X X X X$! ! ! ! !+(=1 + + + +

W 

 

 

 

 

!D !D. !D !D !D !DF4 C    @P# P P P P P P P PrV   r4   c                        e Zd Zdeddddf fdZdeddf fdZdeddfdZd	ed
edefdZde	fdZ
dedefdZdefdZdee         fdZdefdZ xZS )PrefixedSubAppResourcerJ   rL   r6   r\   Nc                     t                                          |           || _        |                     |           d S r^   )r   rc   _app_add_prefix_to_resources)rb   rJ   rL   r   s      rW   rc   zPrefixedSubAppResource.__init__  s<       	%%f-----rV   c                 t    t                                          |           |                     |           d S r^   )r   rt   r  )rb   rJ   r   s     rW   rt   z!PrefixedSubAppResource.add_prefix  s5    6"""%%f-----rV   c                     | j         j        }|                                D ]A}|                    |           |                    |           |                    |           Bd S r^   )r  router	resourcesunindex_resourcert   index_resource)rb   rJ   r  r   s       rW   r  z/PrefixedSubAppResource._add_prefix_to_resources  sr    !((** 	, 	,H ##H---'''!!(++++	, 	,rV   r   rj   c                      t          d          )Nz3.url_for() is not supported by sub-application rootr   r   s      rW   rl   zPrefixedSubAppResource.url_for  s    PQQQrV   c                      | j         | j        dS )N)rL   rJ   )r  rV  re   s    rW   rw   zPrefixedSubAppResource.get_info  s    yDL999rV   rm   c                    K   | j         j                            |           d {V }|                    | j                    t	          |j        t                    r|j        j        }nt                      }||fS r^   )	r  r  rp   r   r   rP   r%   r  r   rb   rm   r  methodss       rW   rp   zPrefixedSubAppResource.resolve  s}      9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rV   c                 X    t          | j        j                                                  S r^   )r  r  r  rK   re   s    rW   r  zPrefixedSubAppResource.__len__  s!    49#**,,---rV   c                 X    t          | j        j                                                  S r^   )r  r  r  rK   re   s    rW   r  zPrefixedSubAppResource.__iter__  s!    DI$++--...rV   c                 (    d| j          d| j        dS )Nz<PrefixedSubAppResource r  r   )rV  r  re   s    rW   r   zPrefixedSubAppResource.__repr__  s    J$,JJDIJJJJrV   )rQ   rR   rS   rT   rc   rt   r  r   rl   rE   rw   r(   r   rp   r  r  r   r2   r  r   r   r   s   @rW   r  r    sl       .s . .4 . . . . . .
. . . . . . . .,s ,t , , , ,RS RC RC R R R R:) : : : :#W # # # # #. . . . ./(=1 / / / /K# K K K K K K K KrV   r  c                       e Zd Zej        dedefd            Zej        defd            Z	e
ej        defd                        ZdS )rN   rm   r\   c                 
   K   dS )z1Return bool if the request satisfies the criteriaNr9   ro   s     rW   r   zAbstractRuleMatching.match  rq   rV   c                     dS rv   r9   re   s    rW   rw   zAbstractRuleMatching.get_info  ri   rV   c                     dS )zReturn a strNr9   re   s    rW   rh   zAbstractRuleMatching.canonical  ri   rV   N)rQ   rR   rS   r   r   r(   r   r   rE   rw   r~   rT   rh   r9   rV   rW   rN   rN     s        @7 @t @ @ @ @ 	J) J J J J 3     X  rV   rN   c                        e Zd Z ej        d          Zdeddf fdZedefd            Z	dedefdZ
dedefd	Zd
edefdZdefdZ xZS )Domainz(?!-)[a-z\d-]{1,63}(?<!-)rM   r\   Nc                 |    t                                                       |                     |          | _        d S r^   )r   rc   
validation_domain)rb   rM   r   s     rW   rc   zDomain.__init__!  s0    v..rV   c                     | j         S r^   r  re   s    rW   rh   zDomain.canonical%  r   rV   c                     t          |t                    st          d          |                    d                                          }|st          d          d|v rt          d          t          d|z             }|j        J t           fd|j        	                    d          D                       st          d          |j
        d	k    r|j        S |j         d
|j
         S )NzDomain must be strr:   zDomain cannot be emptyz://zScheme not supportedzhttp://c              3   L   K   | ]}j                             |          V  d S r^   )re_partr.  )rC  xrb   s     rW   	<genexpr>z$Domain.validation.<locals>.<genexpr>3  s3      NN4<))!,,NNNNNNrV   zDomain not validP   :)r   rT   	TypeErrorrstripr   r   r   raw_hostallr,  port)rb   rM   rQ  s   `  rW   r  zDomain.validation)  s    &#&& 	20111s##))++ 	55666f__3444)f$%%|'''NNNNcl6H6H6M6MNNNNN 	1/0008r>><,+++++rV   rm   c                    K   |j                             t          j                  }|sdS |                     |          S r   )r   r   r   HOSTmatch_domain)rb   rm   hosts      rW   r   zDomain.match9  s>      ""49-- 	5  &&&rV   r  c                 <    |                                 | j        k    S r^   )r   r  rb   r  s     rW   r  zDomain.match_domain?  s    zz||t|++rV   c                     d| j         iS )NrM   r  re   s    rW   rw   zDomain.get_infoB  s    $,''rV   )rQ   rR   rS   r5  r7  r  rT   rc   r~   rh   r  r(   r   r   r  rE   rw   r   r   s   @rW   r  r    s       bj566G/s /t / / / / / / 3    X, , , , , , '7 't ' ' ' ', , , , , ,() ( ( ( ( ( ( ( (rV   r  c                   t     e Zd Z ej        d          Zdeddf fdZedefd            Z	dede
fdZ xZS )	
MaskDomainz(?!-)[a-z\d\*-]{1,63}(?<!-)rM   r\   Nc                     t                                          |           | j                            dd                              dd          }t	          j        |          | _        d S )Nr:   z\.*z.*)r   rc   r  rv  r5  r7  _mask)rb   rM   maskr   s      rW   rc   zMaskDomain.__init__I  sW       |##C//77TBBZ%%


rV   c                     | j         j        S r^   )r  rH   re   s    rW   rh   zMaskDomain.canonicalN  s    z!!rV   r  c                 :    | j                             |          d uS r^   )r  r.  r  s     rW   r  zMaskDomain.match_domainR  s    z##D))55rV   )rQ   rR   rS   r5  r7  r  rT   rc   r~   rh   r   r  r   r   s   @rW   r  r  F  s        bj788G&s &t & & & & & &
 "3 " " " X"6 6 6 6 6 6 6 6 6 6rV   r  c                   f    e Zd ZdeddddfdZedefd            ZdefdZ	d	e
defd
ZdefdZdS )MatchedSubAppResourcerO   rL   r6   r\   Nc                 d    t                               |            d| _        || _        || _        d S )Nr   )r.   rc   rV  r  _rule)rb   rO   rL   s      rW   rc   zMatchedSubAppResource.__init__W  s/    !!$'''	


rV   c                     | j         j        S r^   )r  rh   re   s    rW   rh   zMatchedSubAppResource.canonical]  s    z##rV   c                      | j         | j        dS )N)rL   rO   )r  r  re   s    rW   rw   zMatchedSubAppResource.get_infoa  s    y$*555rV   rm   c                 V  K   | j                             |           d {V sd t                      fS | j        j                            |           d {V }|                    | j                   t          |j        t                    r|j        j
        }nt                      }||fS r^   )r  r   r   r  r  rp   r   r   rP   r%   r  r  s       rW   rp   zMatchedSubAppResource.resolved  s      Z%%g........ 	;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rV   c                     d| j         dS )Nz<MatchedSubAppResource -> r   )r  re   s    rW   r   zMatchedSubAppResource.__repr__o  s    :DI::::rV   )rQ   rR   rS   rN   rc   r~   rT   rh   rE   rw   r(   r   rp   r   r9   rV   rW   r  r  V  s        1  $     $3 $ $ $ X$6) 6 6 6 6	#W 	# 	# 	# 	# 	#;# ; ; ; ; ; ;rV   r  c                        e Zd ZdZdddedeee         z  dede	dz  ddf
 fd	Z
defd
Zededz  fd            ZdededefdZdefdZ xZS )r3   zA route with resourceNr   r   r   r   r   r\   c                R    t                                          ||||           d S )Nr   )r   rc   )rb   r   r   r   r   r   s        rW   rc   zResourceRoute.__init__v  s9     	GNX 	 	
 	
 	
 	
 	
rV   c                 6    d| j          d| j         d| j        S )Nz<ResourceRoute [z] r  )r   r   r   re   s    rW   r   zResourceRoute.__repr__  s&    U$+UUUUT\UUUrV   c                 ,    | j         d S | j         j        S r^   )r   r[   re   s    rW   r[   zResourceRoute.name  s    >!4~""rV   r   rj   c                 8    | j         J  | j         j        |i |S )r   )r   rl   r   s      rW   rl   zResourceRoute.url_for  s*    ~)))%t~%t6v666rV   c                 F    | j         J | j                                         S r^   )r   rw   re   s    rW   rw   zResourceRoute.get_info  s$    ~)))~&&(((rV   )rQ   rR   rS   __doc__rT   r    r   r   r.   r   rc   r   r~   r[   r   rl   rE   rw   r   r   s   @rW   r3   r3   s  s         15

 

 



 4--

 #	

 '-

 


 

 

 

 

 

V# V V V V #cDj # # # X#
7S 7C 7C 7 7 7 7
)) ) ) ) ) ) ) ) )rV   r3   c                        e Zd Zdeddf fdZdededefdZededz  fd            Z	de
fd	Zd
edefdZedefd            Zedefd            ZdefdZ xZS )r   rP   r\   Nc                 x    t                                          t          j        | j                   || _        d S r^   )r   rc   r   r   rm  _http_exceptionr   s     rW   rc   zSystemRoute.__init__  s/    555-rV   r   rj   c                      t          d          )Nz).url_for() is not allowed for SystemRouter  r   s      rW   rl   zSystemRoute.url_for  s    FGGGrV   c                     d S r^   r9   re   s    rW   r[   zSystemRoute.name  r   rV   c                     d| j         iS )NrP   r  re   s    rW   rw   zSystemRoute.get_info  s     $"677rV   rm   c                    K   | j         r^   r  ro   s     rW   rm  zSystemRoute._handle  s      ""rV   c                     | j         j        S r^   )r  r   re   s    rW   r   zSystemRoute.status      #**rV   c                     | j         j        S r^   )r  r   re   s    rW   r   zSystemRoute.reason  r  rV   c                 (    d| j          d| j         dS )Nz<SystemRoute r   r   )r   r   re   s    rW   r   zSystemRoute.__repr__  s    <t{<<dk<<<<rV   )rQ   rR   rS   r"   rc   rT   r   rl   r~   r[   rE   rw   r(   r*   rm  r  r   r   r   r   r   s   @rW   r   r     sL       .} . . . . . . .HS HC HC H H H H cDj    X8) 8 8 8 8#W # # # # # + + + + X+ + + + + X+=# = = = = = = = =rV   r   c                   D    e Zd ZdefdZdeddef         fdZdefdZdS )r5   r\   c                 6  K   | j         j        t          j        vr|                                  t          | | j         j                                        d           }||                                   |             d {V }t          |t                    sJ |S r^   )	rm   r   r   METH_ALL_raise_allowed_methodsgetattrr   r   r*   )rb   r   rets      rW   _iterz
View._iter  s      <dm33'')))t|288::DAA>'')))FHHnnnnnn#~.....
rV   Nc                 N    |                                                                  S r^   )r  	__await__re   s    rW   r!  zView.__await__  s    zz||%%'''rV   c                 h      fdt           j        D             }t           j        j        |          )Nc                 X    h | ]&}t          |                                          $|'S r9   )hasattrr   )rC  r  rb   s     rW   	<setcomp>z.View._raise_allowed_methods.<locals>.<setcomp>  s0    PPPwtQWWYY7O7OP1PPPrV   )r   r  r%   rm   r   )rb   r  s   ` rW   r  zView._raise_allowed_methods  s3    PPPPdmPPP"4<#6HHHrV   )	rQ   rR   rS   r*   r  r   r!  r   r  r9   rV   rW   r5   r5     sx        	^ 	 	 	 	(9T4%?@ ( ( ( (I I I I I I IrV   r5   c                   ^    e Zd Zdee         ddfdZdefdZdee         fdZ	de
defdZdS )	ResourcesViewr  r\   Nc                     || _         d S r^   
_resources)rb   r  s     rW   rc   zResourcesView.__init__  s    #rV   c                 *    t          | j                  S r^   )r  r*  re   s    rW   r  zResourcesView.__len__  s    4?###rV   c              #   $   K   | j         E d {V  d S r^   r)  re   s    rW   r  zResourcesView.__iter__  s&      ?"""""""""rV   r   c                     || j         v S r^   r)  rb   r   s     rW   __contains__zResourcesView.__contains__  s    4?**rV   )rQ   rR   rS   listr.   rc   r  r  r   r  objectr   r/  r9   rV   rW   r'  r'    s        $$'7"8 $T $ $ $ $$ $ $ $ $#(#34 # # # #+V + + + + + + +rV   r'  c                   Z    e Zd Zdee         fdZdefdZdee	         fdZ
dedefdZdS )	
RoutesViewr  c                 \    g | _         |D ]!}|D ]}| j                             |           "d S r^   )r   r  )rb   r  r   r   s       rW   rc   zRoutesView.__init__  sO    ,.! 	+ 	+H! + +##E****+	+ 	+rV   r\   c                 *    t          | j                  S r^   r  re   s    rW   r  zRoutesView.__len__  r	  rV   c              #   $   K   | j         E d {V  d S r^   r   re   s    rW   r  zRoutesView.__iter__  s&      <rV   r   c                     || j         v S r^   r7  r   s     rW   r/  zRoutesView.__contains__  s    $$rV   N)rQ   rR   rS   r0  r.   rc   r  r  r   r2   r  r1  r   r/  r9   rV   rW   r3  r3    s        +$'7"8 + + + +! ! ! ! ! (=1        %& %T % % % % % %rV   r3  c                       e Zd Z ej        d          Zd3 fdZdedefdZ	de
e         fdZdefdZd	edefd
ZdedefdZdefdZdefdZdeeef         fdZd	eddfdZd	edefdZd	eddfdZd	eddfdZdddededz  defdZddddedede e!e"         z  dedz  de#dz  de$fdZ%dde&dddddede'dedz  de#dz  ded ed!ed"edefd#Z(dede d$e)de$fd%Z*dede d$e)de$fd&Z+dd'd(dede dedz  d)ed$e)de$fd*Z,dede d$e)de$fd+Z-dede d$e)de$fd,Z.dede d$e)de$fd-Z/dede d$e)de$fd.Z0dede!e"         d$e)de$fd/Z1d3 fd0Z2d1e3e4         de5e$         fd2Z6 xZ7S )4r,   z[.:-]r\   Nc                     t                                                       g | _        i | _        i | _        g | _        d S r^   )r   rc   r*  _named_resources_resource_index_matched_sub_app_resourcesr   s    rW   rc   zUrlDispatcher.__init__  s>    24=?BDGI'''rV   rm   c                    K   | j         }t                      }| j        D ]+}|                    |           d {V \  }}||c S ||z  },|j        j        }|rh|                    |d          D ]+}|                    |           d {V \  }}||c S ||z  },|dk    rn|                    d          d         pd}|h|r"t          t          |j
        |                    S t          t                                S )Nr9   r?   r   )r<  r   r=  rp   r  r  r   
rpartitionr   r%   r   r&   )	rb   rm   resource_indexr  r   r   allowedurl_part	candidates	            rW   rp   zUrlDispatcher.resolve  sY     -$'EE 7 	+ 	+H(0(8(8(A(A"A"A"A"A"A"AJ%!!!!7* ?, 		:+//"== / /	,5,=,=g,F,F&F&F&F&F&F&F#
G)%%%%#w.OO3**3//29cH  		:  	Y!"6w~"W"WXXXlnn---rV   c                 *    t          | j                  S r^   )r  r;  re   s    rW   r  zUrlDispatcher.__iter__  s    D)***rV   c                 *    t          | j                  S r^   )r  r;  re   s    rW   r  zUrlDispatcher.__len__  s    4()))rV   r   c                     || j         v S r^   r;  r.  s     rW   r/  zUrlDispatcher.__contains__   s    4000rV   r[   c                     | j         |         S r^   rG  ra   s     rW   __getitem__zUrlDispatcher.__getitem__#  s    $T**rV   c                 *    t          | j                  S r^   )r'  r*  re   s    rW   r  zUrlDispatcher.resources&  s    T_---rV   c                 *    t          | j                  S r^   )r3  r*  re   s    rW   rK   zUrlDispatcher.routes)  s    $/***rV   c                 *    t          | j                  S r^   )r   r;  re   s    rW   named_resourceszUrlDispatcher.named_resources,  s     5666rV   c                    t          |t                    sJ d|            | j        rt          d          |j        }|| j                            |          }|D ]P}t          j        |          rt          d|d          |
                                st          d|d          Q|| j        v r t          d|d| j        |                   || j        |<   | j                            |           t          |t                    r| j                            |           d S |                     |           d S )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 namezV, the name should be a sequence of python identifiers separated by dash, dot or columnz
Duplicate z, already handled by )r   r.   frozenr   r[   NAME_SPLIT_REr,  keyword	iskeywordr   isidentifierr;  r*  r  r  r=  r  )rb   r   r[   rJ  r;  s        rW   register_resourcezUrlDispatcher.register_resource/  s   &
 
 	O 	ON(NN	O 	O 
 ; 	QOPPP}&,,T22E  $T** $) ) ) )  
 ((** $1 1 1 1   t,,, J J J*.*?*EJ J   +3D!$'x(((h 566 	*+228<<<<<)))))rV   c                     d|j         x}v r4|                    d          d                             d          d         }|                    d          pdS )z9Return a key to index the resource in the resource index.r)  r   r?   )rh   	partitionr?  r  )rb   r   	index_keys      rW   _get_resource_index_keyz%UrlDispatcher._get_resource_index_keyV  s[     22933 "++C003>>sCCAFI$$++rV   c                     |                      |          }| j                            |g                               |           dS )z%Add a resource to the resource index.N)rX  r<  
setdefaultr  rb   r   resource_keys      rW   r  zUrlDispatcher.index_resourcea  sD    33H== 	''b99@@JJJJJrV   c                 p    |                      |          }| j        |                             |           dS )z*Remove a resource from the resource index.N)rX  r<  remover[  s      rW   r  zUrlDispatcher.unindex_resourcei  s7    33H==\*11(;;;;;rV   rZ   rF   c                   |r$|                     d          st          d          | j        rB| j        d         }|j        |k    r*|                    |          rt          t          |          S d|v sFd|v sBt                              |          s(t          ||          }| 
                    |           |S t          ||          }| 
                    |           |S )Nr?   z)path should be started with / or be emptyr)  r*  rZ   )r  r   r*  r[   r|   r   r/   r>   searchr0   rT  r1   )rb   rF   r[   r   s       rW   add_resourcezUrlDispatcher.add_resourcen  s     	J,, 	JHIII? 	0r*H}$$););D)A)A$Hh///tsd{{hood.C.C{$T555H""8,,,O"4d333x(((rV   )r[   r   r   r   r   c                `    |                      ||          }|                    |||          S )NrZ   r   )rb  r   )rb   r   rF   r   r[   r   r   s          rW   r   zUrlDispatcher.add_route~  s7     $$T$55!!&'.!QQQrV   Fr\  rJ   r]  r^  r_  r`  c          
          |                     d          sJ |                    d          r
|dd         }t          ||||||||          }	|                     |	           |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        r?   Nr`  r\  )r  r  r4   rT  )
rb   rJ   rF   r[   r   r]  r^  r_  r`  r   s
             rW   
add_staticzUrlDispatcher.add_static  s    $   %%%%%??3 	!CRC[F!)!!+)	
 	
 	
 	x(((rV   rj   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method HEAD.)r   r   	METH_HEADrb   rF   r   rj   s       rW   add_headzUrlDispatcher.add_head  "    t~dndGFFvFFFrV   c                 6     | j         t          j        ||fi |S )z+Shortcut for add_route with method OPTIONS.)r   r   METH_OPTIONSrh  s       rW   add_optionszUrlDispatcher.add_options  s#    t~d/wII&IIIrV   T)r[   
allow_headrn  c                    |                      ||          }|r |j        t          j        |fi |  |j        t          j        |fi |S )zShortcut for add_route with method GET.

        If allow_head is true, another
        route is added allowing head requests to the same endpoint.
        rZ   )rb  r   r   rg  METH_GET)rb   rF   r   r[   rn  rj   r   s          rW   add_getzUrlDispatcher.add_get  sc     $$T$55 	BHt~wAA&AAA!x!$-CCFCCCrV   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method POST.)r   r   	METH_POSTrh  s       rW   add_postzUrlDispatcher.add_post  rj  rV   c                 6     | j         t          j        ||fi |S )z'Shortcut for add_route with method PUT.)r   r   METH_PUTrh  s       rW   add_putzUrlDispatcher.add_put  s"    t~dmT7EEfEEErV   c                 6     | j         t          j        ||fi |S )z)Shortcut for add_route with method PATCH.)r   r   
METH_PATCHrh  s       rW   	add_patchzUrlDispatcher.add_patch  s"    t~dotWGGGGGrV   c                 6     | j         t          j        ||fi |S )z*Shortcut for add_route with method DELETE.)r   r   METH_DELETErh  s       rW   
add_deletezUrlDispatcher.add_delete  s#    t~d.gHHHHHrV   c                 6     | j         t          j        ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r   r   r   rh  s       rW   add_viewzUrlDispatcher.add_view  s$     t~dmT7EEfEEErV   c                     t                                                       | j        D ]}|                                 d S r^   )r   ry   r*  )rb   r   r   s     rW   ry   zUrlDispatcher.freeze  sE     	 	HOO	 	rV   rK   c                 d    g }|D ]*}|                     |                    |                      +|S )zAppend routes to route table.

        Parameter should be a sequence of RouteDef objects.

        Returns a list of registered AbstractRoute instances.
        )extendregister)rb   rK   registered_routes	route_defs       rW   
add_routeszUrlDispatcher.add_routes  sD      	? 	?I$$Y%7%7%=%=>>>>  rV   r}   )8rQ   rR   rS   r5  r7  rP  rc   r(   r-   rp   r   rT   r  r  r  r1  r   r/  r.   rI  r'  r  r3  rK   r	   rM  rT  rX  r  r  r/   rb  r    r   r   r   r2   r   r   r!   re  r   ri  rm  rq  rt  rw  rz  r}  r  ry   r   r+   r0  r  r   r   s   @rW   r,   r,     s       BJx((MJ J J J J J'.W '.1D '. '. '. '.R+(3- + + + +* * * * *1V 1 1 1 1 1+ +(8 + + + +.= . . . .+
 + + + +7.>)>!? 7 7 7 7%**: %*t %* %* %* %*N	,0@ 	,S 	, 	, 	, 	,K'7 KD K K K K<)9 <d < < < <
 =A    sTz X    ,  04
R 
R 
R
R 
R 4--	
R Dj
R '-
R 

R 
R 
R 
R"  04,  %$        
 Dj  '-          
       DGS G7 Gc Gm G G G GJ Jg J J J J J J  D D DD D
 DjD D D 
D D D D&GS G7 Gc Gm G G G GFC F' FS F] F F F FHc HG Hs H} H H H HIs IW I I I I I IFF"&|"4F@CF	F F F F     

!*:!; 
!]@S 
! 
! 
! 
! 
! 
! 
! 
!rV   r,   rE  c                 z    t           dk     r|                     dd          } t          j        | d          j        S )Nrp  rr  rs  Fr  )r<   rv  r   r!  raw_pathrE  s    rW   rM  rM    s8    fc5))9%///88rV   c                 b    d| vr| S |                      dd                               dd          S )Nrr  z%2Fr?   rs  )rv  r  s    rW   rB  rB    s6    
%==$$,,UC888rV   c                 X    t          |           }d| v r|                    dd          }|S )Nrr  rs  )rM  rv  )rE  r   s     rW   r4  r4    s2     F
e||s++MrV   )zr   r   r  	functoolsr  r  r   rQ  rx  platformr5  r   r   collections.abcr   r   r   r   r   r   r	   r
   r   pathlibr   r   typesr   typingr   r   r   r   r   r   r   yarlr   r   yarl_versionr   r   r   r   r   helpersr   r   httpr   typedefsr    r!   web_exceptionsr"   r#   r$   r%   r&   web_fileresponser'   web_requestr(   web_responser)   r*   web_routedefr+   __all__web_appr6   r   rT   BaseDictr   r   r  r   mapr  r,  r<   rU   r7  r=   r>   r6  r@   systemrB   r   r   r   r   partialr  rE   r.   ABCr2   r-   r   r   r/   r0   r1   rT  r4   r  rN   r  r  r  r3   r   r5   r'  r3  r,   rM  rB  r4  r9   rV   rW   <module>r     s   




           				  				 



 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                   " " " " " " Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q Q 1 1 1 1 1 1 1 1       @ @ @ @ @ @ @ @ @ @ . . . . . . . .       ' ' ' ' ' ' ' '              + * * * * *             2 2 2 2 2 2 2 2 * * * * * *  $$$$$$CH~HHH,/,<w,F,F,B ',uSS6Hl6H6M6Mbqb6Q-R-R'S'SeE#s(O$ S S S&0bj+' 'gcl#    !+
1! !%
    !ry~~%* % % %)(/++y8
E$K 8 8 87)Y~/D%EEF/0#c(:;i4888" " " " "	 " " " "&,/ ,/ ,/ ,/ ,/uh7 ,/ ,/ ,/^R3 R3 R3 R3 R3CG R3 R3 R3j<B <B <B <B <B($5 <B <B <B~V V V V V( V V V L7 Lt L L L L 1+ 1+ 1+ 1+ 1+ 1+ 1+ 1+l%6 %6 %6 %6 %6H %6 %6 %6PG= G= G= G= G=h G= G= G=T    %   2OP OP OP OP OP^ OP OP OPd)K )K )K )K )K^ )K )K )KX    37   %( %( %( %( %(! %( %( %(P6 6 6 6 6 6 6 6 ; ; ; ; ;2 ; ; ;:) ) ) ) )M ) ) )D= = = = =- = = =<I I I I I< I I I(+ + + + +E8$45yAQ7R + + +% % % % %/=1I % % %"F! F! F! F! F!NGC1A,A$B F! F! F!R9s 9s 9 9 9 99c 9c 9 9 9 9       rV   