
    tni                     2   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 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mZmZmZmZmZmZm Z m!Z!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/m0Z0m1Z1 dd
l2m3Z3 ddl4m5Z5 ddl6m7Z7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@ ddlAmBZB ddlCmDZDmEZE ddlFmGZG dZHerddlImJZJ eeKeKf         ZLneMZLejN        dk     rej	        O                    d          rePfnejN        dk     reQfndZR eS eTeU e,jV        d          dd                             ZWee$eUdf                  eXd<    e
jY        d          ZZee!eK                  eXd<    e
jY        d          Z[ee!eK                  eXd<    e
j\        d           Z]eeK         eXd!<    e	j^                    d"k    Z_ee`         eXd#<   eeBgee eE                  f         Zae$e d$         e"eK         f         Zb ejc        ej\        d%&          Zd G d' d(e&d)*          Ze G d+ d,e#ed-                   Zf G d. d-e jg                  Zh G d/ d$eLe/          Zi G d0 d1ei          Zjd2eBd3dfd4Zk G d5 d6ef          Zl G d7 d8el          Zm G d9 d:el          Zn G d; d<ef          Zo G d= d>eo          Zp G d? d@eo          Zq G dA dBe jg                  Zr G dC dDer          Zs G dE dFes          Zt G dG dHeq          Zu G dI dJeh          Zv G dK dLeh          Zw G dM dNe1          Zx G dO dPe#eef         eef                   Zy G dQ dRe#eeh         eeh                   Zz G dS dTe0eeKeff                   Z{dUeKd3eKfdVZ|dUeKd3eKfdWZ}dUeKd3eKfdXZ~dS )Y    N)wraps)Path)MappingProxyType)TYPE_CHECKINGAny	AwaitableCallable	ContainerDictFinal	GeneratorIterableIteratorListMappingNoReturnOptionalPatternSetSizedTupleType	TypedDictUnioncast)URL__version__   )hdrs)AbstractMatchInfoAbstractRouterAbstractView)DEBUG)HttpVersion11)HandlerPathLike)HTTPExceptionHTTPExpectationFailedHTTPForbiddenHTTPMethodNotAllowedHTTPNotFound)FileResponse)Request)ResponseStreamResponse)AbstractRouteDef)
UrlDispatcherUrlMappingMatchInfoAbstractResourceResourcePlainResourceDynamicResourceAbstractRouteResourceRouteStaticResourceView)Application)   
   win32)r<       .   .YARL_VERSIONz$^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$HTTP_METHOD_REz*(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})ROUTE_RE/PATH_SEPWindows
IS_WINDOWSr2   T)quotec                       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prefixr7   routesr;   appdomainAbstractRuleMatchingrulehttp_exceptionN)	__name__
__module____qualname__str__annotations__r   r   r   r'   r@       V/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/aiohttp/web_urldispatcher.pyrL   rL   j   s         
IIINNNS\OOOKKKC())))	KKK
    !!!!!!r]   rL   F)totalc                   d   e Zd Zdddee         ddfdZedee         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 )r3   Nnamerb   returnc                    || _         d S N_nameselfrb   s     r^   __init__zAbstractResource.__init__~   s    


r]   c                     | j         S re   rf   ri   s    r^   rb   zAbstractResource.name   
    zr]   c                     dS )zWExposes the resource's canonical path.

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

        Nr@   rl   s    r^   	canonicalzAbstractResource.canonical         r]   kwargsc                     dS )z2Construct url for resource with additional params.Nr@   )ri   rq   s     r^   url_forzAbstractResource.url_for   rp   r]   requestc                 
   K   dS )zWResolve resource.

        Return (UrlMappingMatchInfo, allowed_methods) pair.
        Nr@   ri   rt   s     r^   resolvezAbstractResource.resolve   
        r]   rQ   c                     dS )zWAdd a prefix to processed URLs.

        Required for subapplications support.
        Nr@   ri   rQ   s     r^   
add_prefixzAbstractResource.add_prefix   rp   r]   c                     dS z;Return a dict with additional info useful for introspectionNr@   rl   s    r^   get_infozAbstractResource.get_info   rp   r]   c                     d S re   r@   rl   s    r^   freezezAbstractResource.freeze   s    r]   rM   c                     dS )z Perform a raw match against pathNr@   ri   rM   s     r^   	raw_matchzAbstractResource.raw_match   rp   r]   rc   N)rX   rY   rZ   r   r[   rj   propertyrb   abcabstractmethodro   r   rs   r-   _Resolverw   r{   rL   r~   r   boolr   r@   r]   r^   r3   r3   }   s       04         hsm    X 3     X 	A A A A A A 	W      	      	J) J J J J    	/c /d / / / / / /r]   r3   r7   c                   x   e Zd Zddddedeeee         f         dee	         dee
         ddf
dZedefd	            Zedefd
            Zeej        dee         fd                        Zedee
         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e         fdZdS )r7   Nexpect_handlerresourcemethodhandlerr   r   rc   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)r<      zCoroutine is expected, got z is not allowed HTTP methodFz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesrt   rc   c                    K    |           }t          j        |          r| d {V }t          |t                    sJ |S re   )asyncioiscoroutine
isinstancer/   )rt   resultold_handlers     r^   handler_wrapperz/AbstractRoute.__init__.<locals>.handler_wrapper   sU      $W--&v.. *#)\\\\\\F!&.99999r]   )_default_expect_handlerinspectiscoroutinefunctionsysversion_infor   upperrD   match
ValueErrorcallableisgeneratorfunctionr   warningswarnDeprecationWarningr   type
issubclassr"   r   r-   r/   _method_handler_expect_handler	_resource)ri   r   r   r   r   r   r   s         @r^   rj   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 	& MH"    && 	&:g|+L+L 	&M?AS   7^^w >      ^ "K%G-!r]   c                     | j         S re   )r   rl   s    r^   r   zAbstractRoute.method   
    |r]   c                     | j         S re   )r   rl   s    r^   r   zAbstractRoute.handler   s
    }r]   c                     dS )z8Optional route's name, always equals to resource's name.Nr@   rl   s    r^   rb   zAbstractRoute.name   rp   r]   c                     | j         S re   )r   rl   s    r^   r   zAbstractRoute.resource   s
    ~r]   c                     dS r}   r@   rl   s    r^   r~   zAbstractRoute.get_info   rp   r]   argsrq   c                     dS )/Construct url for route with additional params.Nr@   ri   r   rq   s      r^   rs   zAbstractRoute.url_for   rp   r]   rt   c                 <   K   |                      |           d {V S re   )r   rv   s     r^   handle_expect_headerz"AbstractRoute.handle_expect_header   s,      ))'222222222r]   )rX   rY   rZ   r[   r   r%   r   r"   r   _ExpectHandlerr3   rj   r   r   r   r   r   rb   r   rL   r~   r   rs   r-   r/   r   r@   r]   r^   r7   r7      s        48/35" 5" 5"5" w\ 2235"
 !05" +,5" 
5" 5" 5" 5"n     X     X Ghsm G G G  XG (#34    X 	J) J J J J 	>S >C >C > > > >3' 3h~>V 3 3 3 3 3 3r]   c                   J    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e         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 )r2   )_route_apps_current_app_frozen
match_dictrouterc   Nc                     t                                          |           || _        g | _        d | _        d| _        d S NF)superrj   r   r   r   r   )ri   r   r   	__class__s      r^   rj   zUrlMappingMatchInfo.__init__  s<    $$$(*
37r]   c                     | j         j        S re   )r   r   rl   s    r^   r   zUrlMappingMatchInfo.handler  s    {""r]   c                     | j         S re   )r   rl   s    r^   r   zUrlMappingMatchInfo.route  s
    {r]   c                     | j         j        S re   )r   r   rl   s    r^   r   z"UrlMappingMatchInfo.expect_handler  s    {//r]   c                     d S re   r@   rl   s    r^   rW   z"UrlMappingMatchInfo.http_exception      tr]   c                 4    | j                                         S re   )r   r~   rl   s    r^   r~   zUrlMappingMatchInfo.get_info  s    {##%%%r]   )r;   .c                 *    t          | j                  S re   )tupler   rl   s    r^   appszUrlMappingMatchInfo.apps  s    TZ   r]   rS   r;   c                     | j         rt          d          | j        || _        | j                            d|           d S )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertri   rS   s     r^   add_appzUrlMappingMatchInfo.add_app#  sK    < 	PNOOO$ #D
!S!!!!!r]   c                     | j         }|J |S re   )r   r   s     r^   current_appzUrlMappingMatchInfo.current_app*  s    
r]   c                     t           r1|| j        vr(t          d                    | j        |                    || _        d S )Nz1Expected one of the following apps {!r}, got {!r})r#   r   r   formatr   r   s     r^   r   zUrlMappingMatchInfo.current_app0  sS     	$*$$"GNN
C   
  r]   c                     d| _         d S )NT)r   rl   s    r^   r   zUrlMappingMatchInfo.freeze;  s    r]   c                 \    dt                                                       d| j         dS )Nz<MatchInfo z: >)r   __repr__r   ri   r   s    r^   r   zUrlMappingMatchInfo.__repr__>  s.    AUWW--//AA4;AAAAr]   )rS   r;   rc   N)rc   r;   r   )rX   rY   rZ   	__slots__r   r[   r7   rj   r   r%   r   r   r   r   r   r'   rW   rL   r~   r   r   r   r   setterr   r   __classcell__r   s   @r^   r2   r2     s       >I4S> - D       # # # # X# }    X 0 0 0 0 X0  7    X&) & & & & !e./ ! ! ! X!" " " "    X
           B# B B B B B B B B B Br]   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
_exceptionrW   rc   Nc                 ~    || _         t                                          i t          | j                              d S re   )r   r   rj   SystemRouteri   rW   r   s     r^   rj   zMatchInfoError.__init__F  s4    ([99:::::r]   c                     | j         S re   r   rl   s    r^   rW   zMatchInfoError.http_exceptionJ  
    r]   c                 V    d                     | j        j        | j        j                  S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrl   s    r^   r   zMatchInfoError.__repr__N  s)    (//O"DO$:
 
 	
r]   )rX   rY   rZ   r   r'   rj   r   rW   r[   r   r   r   s   @r^   r   r   B  s        I;} ; ; ; ; ; ; ;     X
# 
 
 
 
 
 
 
 
r]   r   rt   rc   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(   )rt   expects     r^   r   r   T  s       _  b11F-''<<>>^++.&&'GHHHHHHHHH)*GN&&&'-AF-JKKKK ('r]   c            	           e Zd Zdddee         ddf fdZdddedeee         e	f         d	ee
         dd
fdZddZdedefdZej        dedeeeef                  fd            ZdefdZded
         fdZ xZS )r4   Nra   rb   rc   c                    t                                          |           i | _        d | _        t	                      | _        d S )Nra   )r   rj   _routes
_any_routeset_allowed_methods)ri   rb   r   s     r^   rj   zResource.__init__e  s>    d###1337*-%%r]   r   r   r   r   r8   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   r8   register_route)ri   r   r   r   r   	route_objs         r^   	add_routezResource.add_routek  s     L$$VT_===5 	,     "&'4WWW	I&&&r]   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   r8   r   r   METH_ANYr   r   addr   ri   r   s     r^   r   zResource.register_route}  s    =
 
 	A 	A@u@@	A 	A 	A <4=((#DO!!%,///%*U\"""r]   rt   c                    K   |                      |j        j                  x}d t                      fS | j                            |j        | j                  x}rt          ||          | j	        fS d | j	        fS re   )
_matchrel_url	path_safer   r   r   r   r   r2   r   )ri   rt   r   r   s       r^   rw   zResource.resolve  sz      ++go&?@@@JI;L$$W^T_EEE5 	Q&z5994;PPPT***r]   rM   c                     d S re   r@   r   s     r^   r  zResource._match  s    r]   c                 *    t          | j                  S re   lenr   rl   s    r^   __len__zResource.__len__      4<   r]   c                 N    t          | j                                                  S re   iterr   valuesrl   s    r^   __iter__zResource.__iter__      DL''))***r]   )r   r8   rc   N)rX   rY   rZ   r   r[   rj   r   r   r"   r%   r   r  r   r-   r   rw   r   r   r   r  intr  r   r  r   r   s   @r^   r4   r4   d  si       04 0 0 0 0 0 0 0 0 0 0 48   tL)723
 !0 
   $+ + + ++W + + + + + 	3 8DcN#;    ! ! ! ! !+(?3 + + + + + + + +r]   r4   c                        e Zd Zdddedee         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ef                  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 )r5   Nra   rM   rb   rc   c                    t                                          |           |r|                    d          sJ || _        d S )Nra   rF   )r   rj   
startswith_path)ri   rM   rb   r   s      r^   rj   zPlainResource.__init__  sF    d###/4??3/////


r]   c                     | j         S re   r  rl   s    r^   ro   zPlainResource.canonical  rm   r]   c                 &    | j         s	d| _         d S d S )NrF   r  rl   s    r^   r   zPlainResource.freeze  s!    z 	DJJJ	 	r]   rQ   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        d S NrF   r   )r  endswithr  r  rz   s     r^   r{   zPlainResource.add_prefix  sY      %%%%%??3'''''6{{Qdj(


r]   c                      | j         |k    ri S d S re   r  r   s     r^   r  zPlainResource._match  s    :Itr]   c                     | j         |k    S re   r  r   s     r^   r   zPlainResource.raw_match  s    zT!!r]   c                     d| j         iS )NrM   r  rl   s    r^   r~   zPlainResource.get_info  s    
##r]   c                 8    t          j        | j        d          S )NTrM   encoded)r   buildr  rl   s    r^   rs   zPlainResource.url_for  s    ydj$7777r]   c                 J    | j         d| j         z   dz   nd}d| d| j         dS )N'' r   z<PlainResource  r   )rb   r  rh   s     r^   r   zPlainResource.__repr__  s9    )-)>sTY%%B555
5555r]   r   )rX   rY   rZ   r[   r   rj   r   ro   r   r{   r   r  r   r   rL   r~   r   rs   r   r   r   s   @r^   r5   r5     sb       ;?   S 8C= D      
 3    X   ) ) ) ) ) )3 8DcN#;    "c "d " " " "$) $ $ $ $8 8 8 8 86# 6 6 6 6 6 6 6 6r]   r5   c                       e Zd Z ej        d          Z ej        d          ZdZdddede	e         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ef                  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 )r6   z#\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*)\}z.\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*):(?P<re>.+)\}z[^{}/]+Nra   rM   rb   rc   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 )Nra   r   z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rF   r@   )r   rj   
_orig_pathrE   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrO   r  rG   _pattern
_formatter)
ri   rM   rb   rO   rN   partr   compiledexcr   s
            r^   rj   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 re   )r?  rl   s    r^   ro   zDynamicResource.canonical  r   r]   rQ   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  r:  r<  r;  r>  rO   r?  rz   s     r^   r{   zDynamicResource.add_prefix  s~      %%%%%??3'''''6{{Q
29V#4#4t}7L#LMM 4?2r]   c                     | j                             |          }|d S d |                                                                D             S )Nc                 4    i | ]\  }}|t          |          S r@   )_unquote_path_safe).0keyvalues      r^   
<dictcomp>z*DynamicResource._match.<locals>.<dictcomp>  s4     
 
 
/9sEC#E**
 
 
r]   )r>  r4  r8  items)ri   rM   r   s      r^   r  zDynamicResource._match  sX    ''--=4
 
=B__=N=N=T=T=V=V
 
 
 	
r]   c                     | j         |k    S re   )r1  r   s     r^   r   zDynamicResource.raw_match  s    $&&r]   c                      | j         | j        dS )N)rN   rO   )r?  r>  rl   s    r^   r~   zDynamicResource.get_info   s    !_GGGr]   partsc                     | j                             d |                                D                       }t          j        |d          S )Nc                 4    i | ]\  }}|t          |          S r@   )_quote_path)rH  kvs      r^   rK  z+DynamicResource.url_for.<locals>.<dictcomp>  s$    )V)V)V1![^^)V)V)Vr]   Tr%  )r?  
format_maprL  r   r'  )ri   rO  urls      r^   rs   zDynamicResource.url_for  sC    o(()V)V)V)V)VWWyc40000r]   c                 f    | j         d| j         z   dz   nd}d                    || j                  S )Nr)  r*  r   z$<DynamicResource {name} {formatter}>)rb   rN   )rb   r   r?  rh   s     r^   r   zDynamicResource.__repr__  sB    )-)>sTY%%B5<< = 
 
 	
r]   )rX   rY   rZ   r:  r<  r3  r7  r6  r[   r   rj   r   ro   r{   r   r  r   r   rL   r~   r   rs   r   r   r   s   @r^   r6   r6     s       
"*;
<
<C"*NOOKD;?  $  $  $S  $8C=  $D  $  $  $  $  $  $D 3    X3 3 3 3 3 3
3 
8DcN#; 
 
 
 
'c 'd ' ' ' 'H) H H H H1s 1s 1 1 1 1
# 
 
 
 
 
 
 
 
r]   r6   c                   z     e Zd Zdddedee         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 )
PrefixResourceNra   rQ   rb   rc   c                   |r|                     d          s
J |            |dv s|                    d          r
J |            t                                          |           t	          |          | _        | j        dz   | _        d S )NrF   )r   rF   ra   )r  r   r   rj   r9  _prefix_prefix2)ri   rQ   rb   r   s      r^   rj   zPrefixResource.__init__  s    ;V..s33;;V;;;""&//#*>*>"""""d###$V,,s*r]   c                     | j         S re   )r[  rl   s    r^   ro   zPrefixResource.canonical  r   r]   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        | j        dz   | _        d S r  )r  r   r  r[  r\  rz   s     r^   r{   zPrefixResource.add_prefix  sg      %%%%%??3'''''6{{Q,s*r]   c                     dS r   r@   rz   s     r^   r   zPrefixResource.raw_match!  s    ur]   )rX   rY   rZ   r[   r   rj   r   ro   r{   r   r   r   r   s   @r^   rY  rY    s        =A + + +s +Xc] +d + + + + + + 3    X+ + + + + +         r]   rY  c                   B    e Zd ZdZddddddddededee         d	ee         d
ede	de	de	ddf fdZ
dddedee	         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 )"r9   rT  N   Frb   r   
chunk_size
show_indexfollow_symlinksappend_versionrQ   rP   rb   r   rc  rd  re  rf  rc   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 )Nra   T)strictr)  z' does not existz' is not a directoryGETr   HEAD)ri  rj  )r   rj   r   
expanduserrw   FileNotFoundErrorr   is_dir
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr8   _handler   r   r   )ri   rQ   rP   rb   r   rc  rd  re  rf  r=  r   s             r^   rj   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?)rf  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 )NrF   Tr%  r      %%25rb)rr  r[   lstripr   r'  r[  rC   replacern  joinpathrq  r   osrM   normpathrelative_torw   r   rl  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
ri   rt  rf  rV  unresolved_pathnormalized_pathfilepathf
file_byteshs
             r^   rs   zStaticResource.url_forN  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      r^   r  zStaticResource._get_file_hashw  sK    N	&qxxzz22zz'"""r]   c                 ,    | j         | j        | j        dS )N)rP   rQ   rR   )rn  r[  r   rl   s    r^   r~   zStaticResource.get_info~  s     ll
 
 	
r]   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   r8   r   r   r  )ri   r   s     r^   set_options_routez StaticResource.set_options_route  sd    $$>???"/wT5I#
 #
 #
Y 	!!),,,,,r]   rt   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\rF   rt  r   )r  r	  r   r~  rM   r  rI   r|  r  r\  r[  r   r   rG  r  r2   r   )ri   rt   rM   r   	norm_pathallowed_methodsr   s          r^   rw   zStaticResource.resolve  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Wr]   c                 *    t          | j                  S re   r  rl   s    r^   r  zStaticResource.__len__  r  r]   c                 N    t          | j                                                  S re   r  rl   s    r^   r  zStaticResource.__iter__  r  r]   c                    K   |j         d         }| j                            |          }t          j                    }|                    d | j        |           d {V S )Nrt  )
match_inforn  r}  r   get_running_looprun_in_executor_resolve_path_to_response)ri   rt   rt  r  loops        r^   rs  zStaticResource._handle  sv      %j1/228<<'))))$0/
 
 
 
 
 
 
 
 	
r]   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)rc  )rq  r   r~  rM   r  r  rn  rw   r   CIRCULAR_SYMLINK_ERRORr+   rm  ro  r.   _directory_as_htmlr)   PermissionErrorr,   rp  )ri   r  r  	file_pathr=  s        r^   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>rF   z<li><a href="z">z	</a></li>z<ul>
{}
</ul>
z<body>
z
</body>z<head>
<title>z</title>
</head>z<html>
z
</html>)rm  r  rn  as_posixhtml_escapeiterdirsortedrR  r[  rb   appendr   join)ri   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  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r]   c                 r    | j         d| j         z   dz   nd}d                    || j        | j                  S )Nr)  r   z/<StaticResource {name} {path} -> {directory!r}>)rb   rM   rP   )rb   r   r[  rn  rh   s     r^   r   zStaticResource.__repr__  sG    (,	(=sTY$$2@GGDLDO H 
 
 	
r]   )"rX   rY   rZ   r  r[   r&   r   r   r  r   rj   r   rs   staticmethodbytesr  rL   r~   r%   r  r-   r   rw   r  r   r7   r  r/   rs  r   r  r  r   r   r   s   @r^   r9   r9   '  s_       K #37$  %$"2 "2 "2"2 "2
 sm"2 !0"2 "2 "2 "2 "2 
"2 "2 "2 "2 "2 "2P *.	' ' ' ' !	'
 
' ' ' 'R #5 #S # # # \#
) 
 
 
 
- -T - - - -XW X X X X X$! ! ! ! !+(=1 + + + +
W 
 
 
 
 
!D !D. !D !D !D !DF4 C    @
# 
 
 
 
 
 
 
 
r]   r9   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 )PrefixedSubAppResourcerQ   rS   r;   rc   Nc                     t                                          |           || _        |                     |           d S re   )r   rj   _app_add_prefix_to_resources)ri   rQ   rS   r   s      r^   rj   zPrefixedSubAppResource.__init__  s<       	%%f-----r]   c                 t    t                                          |           |                     |           d S re   )r   r{   r  )ri   rQ   r   s     r^   r{   z!PrefixedSubAppResource.add_prefix  s5    6"""%%f-----r]   c                     | j         j        }|                                D ]A}|                    |           |                    |           |                    |           Bd S re   )r  router	resourcesunindex_resourcer{   index_resource)ri   rQ   r  r   s       r^   r  z/PrefixedSubAppResource._add_prefix_to_resources  sr    !((** 	, 	,H ##H---'''!!(++++	, 	,r]   r   rq   c                      t          d          )Nz3.url_for() is not supported by sub-application rootr   r   s      r^   rs   zPrefixedSubAppResource.url_for
  s    PQQQr]   c                      | j         | j        dS )N)rS   rQ   )r  r[  rl   s    r^   r~   zPrefixedSubAppResource.get_info  s    yDL999r]   rt   c                    K   | j         j                            |           d {V }|                    | j                    t	          |j        t                    r|j        j        }nt                      }||fS re   )	r  r  rw   r   r   rW   r*   r  r   ri   rt   r  methodss       r^   rw   zPrefixedSubAppResource.resolve  s}      9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""r]   c                 X    t          | j        j                                                  S re   )r  r  r  rR   rl   s    r^   r  zPrefixedSubAppResource.__len__  s!    49#**,,---r]   c                 X    t          | j        j                                                  S re   )r  r  r  rR   rl   s    r^   r  zPrefixedSubAppResource.__iter__  s!    DI$++--...r]   c                 D    d                     | j        | j                  S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rQ   rS   )r   r[  r  rl   s    r^   r   zPrefixedSubAppResource.__repr__  s)    =DD<TY E 
 
 	
r]   )rX   rY   rZ   r[   rj   r{   r  r   rs   rL   r~   r-   r   rw   r  r  r   r7   r  r   r   r   s   @r^   r  r    sc       .s . .4 . . . . . .
. . . . . . . .,s ,t , , , ,RS RC RC R R R R:) : : : :#W # # # # #. . . . ./(=1 / / / /
# 
 
 
 
 
 
 
 
r]   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 )rU   rt   rc   c                 
   K   dS )z1Return bool if the request satisfies the criteriaNr@   rv   s     r^   r   zAbstractRuleMatching.match&  rx   r]   c                     dS r}   r@   rl   s    r^   r~   zAbstractRuleMatching.get_info*  rp   r]   c                     dS )zReturn a strNr@   rl   s    r^   ro   zAbstractRuleMatching.canonical.  rp   r]   N)rX   rY   rZ   r   r   r-   r   r   rL   r~   r   r[   ro   r@   r]   r^   rU   rU   %  s        @7 @t @ @ @ @ 	J) J J J J 3     X  r]   rU   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}(?<!-)rT   rc   Nc                 |    t                                                       |                     |          | _        d S re   )r   rj   
validation_domain)ri   rT   r   s     r^   rj   zDomain.__init__7  s0    v..r]   c                     | j         S re   r  rl   s    r^   ro   zDomain.canonical;  r   r]   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 strrA   zDomain cannot be emptyz://zScheme not supportedzhttp://c              3   L   K   | ]}j                             |          V  d S re   )re_partr4  )rH  xri   s     r^   	<genexpr>z$Domain.validation.<locals>.<genexpr>I  s3      NN4<))!,,NNNNNNr]   zDomain not validP   :)r   r[   	TypeErrorrstripr   r   r   raw_hostallr2  port)ri   rT   rV  s   `  r^   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>><,+++++r]   rt   c                    K   |j                             t          j                  }|sdS |                     |          S r   )r   r   r   HOSTmatch_domain)ri   rt   hosts      r^   r   zDomain.matchO  s>      ""49-- 	5  &&&r]   r  c                 <    |                                 | j        k    S re   )r   r  ri   r  s     r^   r  zDomain.match_domainU  s    zz||t|++r]   c                     d| j         iS )NrT   r  rl   s    r^   r~   zDomain.get_infoX  s    $,''r]   )rX   rY   rZ   r:  r<  r  r[   rj   r   ro   r  r-   r   r   r  rL   r~   r   r   s   @r^   r  r  4  s       bj566G/s /t / / / / / / 3    X, , , , , , '7 't ' ' ' ', , , , , ,() ( ( ( ( ( ( ( (r]   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}(?<!-)rT   rc   Nc                     t                                          |           | j                            dd                              dd          }t	          j        |          | _        d S )NrA   z\.*z.*)r   rj   r  r|  r:  r<  _mask)ri   rT   maskr   s      r^   rj   zMaskDomain.__init___  sW       |##C//77TBBZ%%


r]   c                     | j         j        S re   )r  rO   rl   s    r^   ro   zMaskDomain.canonicald  s    z!!r]   r  c                 :    | j                             |          d uS re   )r  r4  r  s     r^   r  zMaskDomain.match_domainh  s    z##D))55r]   )rX   rY   rZ   r:  r<  r  r[   rj   r   ro   r   r  r   r   s   @r^   r  r  \  s        bj788G&s &t & & & & & &
 "3 " " " X"6 6 6 6 6 6 6 6 6 6r]   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 )MatchedSubAppResourcerV   rS   r;   rc   Nc                 d    t                               |            d| _        || _        || _        d S )Nr   )r3   rj   r[  r  _rule)ri   rV   rS   s      r^   rj   zMatchedSubAppResource.__init__m  s/    !!$'''	


r]   c                     | j         j        S re   )r  ro   rl   s    r^   ro   zMatchedSubAppResource.canonicals  s    z##r]   c                      | j         | j        dS )N)rS   rV   )r  r  rl   s    r^   r~   zMatchedSubAppResource.get_infow  s    y$*555r]   rt   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 re   )r  r   r   r  r  rw   r   r   rW   r*   r  r  s       r^   rw   zMatchedSubAppResource.resolvez  s      Z%%g........ 	;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""r]   c                     d| j         dS )Nz<MatchedSubAppResource -> r   )r  rl   s    r^   r   zMatchedSubAppResource.__repr__  s    :DI::::r]   )rX   rY   rZ   rU   rj   r   r[   ro   rL   r~   r-   r   rw   r   r@   r]   r^   r  r  l  s        1  $     $3 $ $ $ X$6) 6 6 6 6	#W 	# 	# 	# 	# 	#;# ; ; ; ; ; ;r]   r  c                        e Zd ZdZdddedeeee         f         de	de
e         ddf
 fd	Zdefd
Zede
e         fd            ZdededefdZdefdZ xZS )r8   zA route with resourceNr   r   r   r   r   rc   c                R    t                                          ||||           d S )Nr   )r   rj   )ri   r   r   r   r   r   s        r^   rj   zResourceRoute.__init__  s9     	GNX 	 	
 	
 	
 	
 	
r]   c                 P    d                     | j        | j        | j                  S )Nz3<ResourceRoute [{method}] {resource} -> {handler!r})r   r   r   )r   r   r   r   rl   s    r^   r   zResourceRoute.__repr__  s-    DKK; L 
 
 	
r]   c                 ,    | j         d S | j         j        S re   )r   rb   rl   s    r^   rb   zResourceRoute.name  s    >!4~""r]   r   rq   c                 8    | j         J  | j         j        |i |S )r   )r   rs   r   s      r^   rs   zResourceRoute.url_for  s*    ~)))%t~%t6v666r]   c                 F    | j         J | j                                         S re   )r   r~   rl   s    r^   r~   zResourceRoute.get_info  s$    ~)))~&&(((r]   )rX   rY   rZ   __doc__r[   r   r%   r   r"   r3   r   r   rj   r   r   rb   r   rs   rL   r~   r   r   s   @r^   r8   r8     s         48

 

 



 w\ 223

 #	

 !0

 


 

 

 

 

 


# 
 
 
 

 #hsm # # # X#
7S 7C 7C 7 7 7 7
)) ) ) ) ) ) ) ) )r]   r8   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	e         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   rW   rc   Nc                 x    t                                          t          j        | j                   || _        d S re   )r   rj   r   r  rs  _http_exceptionr   s     r^   rj   zSystemRoute.__init__  s/    555-r]   r   rq   c                      t          d          )Nz).url_for() is not allowed for SystemRouter  r   s      r^   rs   zSystemRoute.url_for  s    FGGGr]   c                     d S re   r@   rl   s    r^   rb   zSystemRoute.name  r   r]   c                     d| j         iS )NrW   r  rl   s    r^   r~   zSystemRoute.get_info  s     $"677r]   rt   c                    K   | j         re   r  rv   s     r^   rs  zSystemRoute._handle  s      ""r]   c                     | j         j        S re   )r  r   rl   s    r^   r   zSystemRoute.status      #**r]   c                     | j         j        S re   )r  r   rl   s    r^   r   zSystemRoute.reason  r  r]   c                 .    d                     |           S )Nz*<SystemRoute {self.status}: {self.reason}>rl   )r   rl   s    r^   r   zSystemRoute.__repr__  s    ;BBBMMMr]   )rX   rY   rZ   r'   rj   r[   r   rs   r   r   rb   rL   r~   r-   r/   rs  r  r   r   r   r   r   s   @r^   r   r     sU       .} . . . . . . .HS HC HC H H H H hsm    X8) 8 8 8 8#W # # # # # + + + + X+ + + + + X+N# N N N N N N N Nr]   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 )r:   rc   c                 6  K   | j         j        t          j        vr|                                  t          | | j         j                                        d           }||                                   |             d {V }t          |t                    sJ |S re   )	rt   r   r   METH_ALL_raise_allowed_methodsgetattrr   r   r/   )ri   r   rets      r^   _iterz
View._iter  s      <dm33'')))t|288::DAA>'')))FHHnnnnnn#~.....
r]   Nc                 N    |                                                                  S re   )r#  	__await__rl   s    r^   r%  zView.__await__  s    zz||%%'''r]   c                 h      fdt           j        D             }t           j        j        |          )Nc                 X    h | ]&}t          |                                          $|'S r@   )hasattrr   )rH  r  ri   s     r^   	<setcomp>z.View._raise_allowed_methods.<locals>.<setcomp>  s0    PPPwtQWWYY7O7OP1PPPr]   )r   r  r*   rt   r   )ri   r  s   ` r^   r   zView._raise_allowed_methods  s3    PPPPdmPPP"4<#6HHHr]   )	rX   rY   rZ   r/   r#  r   r%  r   r   r@   r]   r^   r:   r:     sx        	^ 	 	 	 	(9T4%?@ ( ( ( (I I I I I I Ir]   r:   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  rc   Nc                     || _         d S re   
_resources)ri   r  s     r^   rj   zResourcesView.__init__  s    #r]   c                 *    t          | j                  S re   )r  r.  rl   s    r^   r  zResourcesView.__len__  s    4?###r]   c              #   $   K   | j         E d {V  d S re   r-  rl   s    r^   r  zResourcesView.__iter__  s&      ?"""""""""r]   r   c                     || j         v S re   r-  ri   r   s     r^   __contains__zResourcesView.__contains__  s    4?**r]   )rX   rY   rZ   r   r3   rj   r  r  r   r  objectr   r3  r@   r]   r^   r+  r+    s        $$'7"8 $T $ $ $ $$ $ $ $ $#(#34 # # # #+V + + + + + + +r]   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 re   )r   r  )ri   r  r   r   s       r^   rj   zRoutesView.__init__  sO    ,.! 	+ 	+H! + +##E****+	+ 	+r]   rc   c                 *    t          | j                  S re   r  rl   s    r^   r  zRoutesView.__len__  r  r]   c              #   $   K   | j         E d {V  d S re   r   rl   s    r^   r  zRoutesView.__iter__  s&      <r]   r   c                     || j         v S re   r:  r  s     r^   r3  zRoutesView.__contains__  s    $$r]   N)rX   rY   rZ   r   r3   rj   r  r  r   r7   r  r4  r   r3  r@   r]   r^   r6  r6    s        +$'7"8 + + + +! ! ! ! ! (=1        %& %T % % % % % %r]   r6  c                       e Zd Z ej        d          Zd4 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e         defdZ ddddedede!e"e#e$         f         dee         dee%         de&fdZ'ddddddddede(dee         dee%         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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"d%e*de&fd/Z1dede#e$         d%e*de&fd0Z2d4 fd1Z3d2e4e5         de6e&         fd3Z7 xZ8S )5r1   z[.:-]rc   Nc                     t                                                       g | _        i | _        i | _        g | _        d S re   )r   rj   r.  _named_resources_resource_index_matched_sub_app_resourcesr   s    r^   rj   zUrlDispatcher.__init__  s>    24=?BDGI'''r]   rt   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 )Nr@   rF   r   )r?  r   r@  rw   r  r	  r   
rpartitionr   r*   r   r+   )	ri   rt   resource_indexr  r   r   allowedurl_part	candidates	            r^   rw   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---r]   c                 *    t          | j                  S re   )r  r>  rl   s    r^   r  zUrlDispatcher.__iter__2  s    D)***r]   c                 *    t          | j                  S re   )r  r>  rl   s    r^   r  zUrlDispatcher.__len__5  s    4()))r]   r   c                     || j         v S re   r>  r2  s     r^   r3  zUrlDispatcher.__contains__8  s    4000r]   rb   c                     | j         |         S re   rJ  rh   s     r^   __getitem__zUrlDispatcher.__getitem__;  s    $T**r]   c                 *    t          | j                  S re   )r+  r.  rl   s    r^   r  zUrlDispatcher.resources>  s    T_---r]   c                 *    t          | j                  S re   )r6  r.  rl   s    r^   rR   zUrlDispatcher.routesA  s    $/***r]   c                 *    t          | j                  S re   )r   r>  rl   s    r^   named_resourceszUrlDispatcher.named_resourcesD  s     5666r]   c                    t          |t                    sJ d|            | j        rt          d          |j        }|| j                            |          }|D ]_}t          j        |          rt          d|d          |
                                s"t          d                    |                    `|| j        v r.t          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 namezoIncorrect route name {!r}, the name should be a sequence of python identifiers separated by dash, dot or columnz'Duplicate {!r}, already handled by {!r})r   r3   frozenr   rb   NAME_SPLIT_REr2  keyword	iskeywordr   isidentifierr   r>  r.  r  r  r@  r  )ri   r   rb   rO  r@  s        r^   register_resourcezUrlDispatcher.register_resourceG  s   &
 
 	O 	ON(NN	O 	O 	O ; 	QOPPP}&,,T22E  $T** $) ) ) )  
 ((** $1 28	   t,,, ..4fT4;PQU;V.W.W   +3D!$'x(((h 566 	*+228<<<<<)))))r]   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   rF   )ro   	partitionrB  r  )ri   r   	index_keys      r^   _get_resource_index_keyz%UrlDispatcher._get_resource_index_keyn  s[     22933 "++C003>>sCCAFI$$++r]   c                     |                      |          }| j                            |g                               |           dS )z%Add a resource to the resource index.N)r[  r?  
setdefaultr  ri   r   resource_keys      r^   r  zUrlDispatcher.index_resourcey  sD    33H== 	''b99@@JJJJJr]   c                 p    |                      |          }| j        |                             |           dS )z*Remove a resource from the resource index.N)r[  r?  remover^  s      r^   r  zUrlDispatcher.unindex_resource  s7    33H==\*11(;;;;;r]   ra   rM   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 )NrF   z)path should be started with / or be emptyr/  r0  ra   )r  r   r.  rb   r   r   r4   rE   searchr5   rW  r6   )ri   rM   rb   r   s       r^   add_resourcezUrlDispatcher.add_resource  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(((r]   )rb   r   r   r   r   c                `    |                      ||          }|                    |||          S )Nra   r   )re  r  )ri   r   rM   r   rb   r   r   s          r^   r  zUrlDispatcher.add_route  s7     $$T$55!!&'.!QQQr]   ra  Frb  rQ   rc  rd  re  rf  c          
          |                     d          sJ |                    d          r
|dd         }t          ||||||||          }	|                     |	           |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        rF   Nrc  rb  )r  r   r9   rW  )
ri   rQ   rM   rb   r   rc  rd  re  rf  r   s
             r^   
add_staticzUrlDispatcher.add_static  s    $   %%%%%??3 	!CRC[F!)!!+)	
 	
 	
 	x(((r]   rq   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method HEAD.)r  r   	METH_HEADri   rM   r   rq   s       r^   add_headzUrlDispatcher.add_head  "    t~dndGFFvFFFr]   c                 6     | j         t          j        ||fi |S )z+Shortcut for add_route with method OPTIONS.)r  r   METH_OPTIONSrk  s       r^   add_optionszUrlDispatcher.add_options  s#    t~d/wII&IIIr]   T)rb   
allow_headrq  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.
        ra   )re  r  r   rj  METH_GET)ri   rM   r   rb   rq  rq   r   s          r^   add_getzUrlDispatcher.add_get  sc     $$T$55 	BHt~wAA&AAA!x!$-CCFCCCr]   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method POST.)r  r   	METH_POSTrk  s       r^   add_postzUrlDispatcher.add_post  rm  r]   c                 6     | j         t          j        ||fi |S )z'Shortcut for add_route with method PUT.)r  r   METH_PUTrk  s       r^   add_putzUrlDispatcher.add_put  s"    t~dmT7EEfEEEr]   c                 6     | j         t          j        ||fi |S )z)Shortcut for add_route with method PATCH.)r  r   
METH_PATCHrk  s       r^   	add_patchzUrlDispatcher.add_patch  s"    t~dotWGGGGGr]   c                 6     | j         t          j        ||fi |S )z*Shortcut for add_route with method DELETE.)r  r   METH_DELETErk  s       r^   
add_deletezUrlDispatcher.add_delete  s#    t~d.gHHHHHr]   c                 6     | j         t          j        ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r  r   r  rk  s       r^   add_viewzUrlDispatcher.add_view  s$     t~dmT7EEfEEEr]   c                     t                                                       | j        D ]}|                                 d S re   )r   r   r.  )ri   r   r   s     r^   r   zUrlDispatcher.freeze  sE     	 	HOO	 	r]   rR   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)ri   rR   registered_routes	route_defs       r^   
add_routeszUrlDispatcher.add_routes  sD      	? 	?I$$Y%7%7%=%=>>>>  r]   r   )9rX   rY   rZ   r:  r<  rS  rj   r-   r2   rw   r   r[   r  r  r  r4  r   r3  r3   rL  r+  r  r6  rR   r   rP  rW  r[  r  r  r   r4   re  r   r%   r   r"   r   r7   r  r&   rh  r   rl  rp  rt  rw  rz  r}  r  r  r   r   r0   r   r  r   r   s   @r^   r1   r1     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 < < < <
 @D    x}     , #37
R 
R 
R
R 
R w\ 223	
R sm
R !0
R 

R 
R 
R 
R" #37$  %$        
 sm  !0          
       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
 sm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 
! 
! 
! 
! 
! 
! 
! 
!r]   r1   rJ  c                 z    t           dk     r|                     dd          } t          j        | d          j        S )Nrv  rx  ry  Fr%  )rC   r|  r   r'  raw_pathrJ  s    r^   rR  rR    s8    fc5))9%///88r]   c                 b    d| vr| S |                      dd                               dd          S )Nrx  z%2FrF   ry  )r|  r  s    r^   rG  rG    s6    
%==$$,,UC888r]   c                 X    t          |           }d| v r|                    dd          }|S )Nrx  ry  )rR  r|  )rJ  r   s     r^   r9  r9    s2     F
e||s++Mr]   )r   r   r  	functoolsr  r  r   rT  r~  platformr:  r   r   r   pathlibr   typesr   typingr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   yarlr   r   yarl_versionr   r   r    r!   r"   helpersr#   httpr$   typedefsr%   r&   web_exceptionsr'   r(   r)   r*   r+   web_fileresponser,   web_requestr-   web_responser.   r/   web_routedefr0   __all__web_appr;   r[   BaseDictdictr   r  OSErrorr   r  r   mapr  r2  rC   r\   r<  rD   rE   r;  rG   systemrI   r   r   r   partialr  rL   r3   ABCr7   r2   r   r   r4   r5   r6   rY  r9   r  rU   r  r  r  r8   r   r:   r+  r6  r1   rR  rG  r9  r@   r]   r^   <module>r     s	   




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



              " " " " " "                                               2 2 1 1 1 1 1 1 1       @ @ @ @ @ @ @ @ @ @             ' ' ' ' ' ' ' '              + * * * * *             2 2 2 2 2 2 2 2 * * * * * *  $$$$$$CH~HHH '!!cl&=&=g&F&F! JJ,w66,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)Yx/G%HHI/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B
 
 
 
 
( 
 
 
$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I
 I
 I
 I
 I
h I
 I
 I
X    %   2M
 M
 M
 M
 M
^ M
 M
 M
`+
 +
 +
 +
 +
^ +
 +
 +
\    37   %( %( %( %( %(! %( %( %(P6 6 6 6 6 6 6 6 ; ; ; ; ;2 ; ; ;:!) !) !) !) !)M !) !) !)HN N N N N- N N N<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       r]   