
    h                        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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.m/Z/m0Z0 dd
l1m2Z2 ddl3m4Z4 ddl5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZD ddlEmFZF dZGerddlHmIZI eeJeJf         ZKneLZKe
jM        dk     re
jN        O                    d          rePfne
jM        dk     reQfndZR eS eTeU e+jV        d          dd                             ZWee#eUdf                  eXd<    e	jY        d          ZZee eJ                  eXd<    e	jY        d          Z[ee eJ                  eXd<    e	j\        d           Z]eeJ         eXd!<   eeAgeeeD                  f         Z^e#ed"         e!eJ         f         Z_ ej`        ej\        d#$          Za G d% d&e%d'(          Zb G d) d*e"ed+                   Zc G d, d+e jd                  Ze G d- d"eKe.          Zf G d. d/ef          Zgd0eAd1dfd2Zh G d3 d4ec          Zi G d5 d6ei          Zj G d7 d8ei          Zk G d9 d:ec          Zl G d; d<el          Zm G d= d>el          Zn G d? d@e jd                  Zo G dA dBeo          Zp G dC dDep          Zq G dE dFen          Zr G dG dHee          Zs G dI dJee          Zt G dK dLe0          Zu G dM dNe"eec         eec                   Zv G dO dPe"eee         eee                   Zw G dQ dRe/eeJecf                   ZxdSeJd1eJfdTZydSeJd1eJfdUZzdSeJd1eJfdVZ{dS )W    N)wraps)Path)MappingProxyType)TYPE_CHECKINGAny	AwaitableCallable	ContainerDictFinal	GeneratorIterableIteratorListMappingNoReturnOptionalPatternSetSizedTupleType	TypedDictUnioncast)URL__version__   )hdrs)AbstractMatchInfoAbstractRouterAbstractView)DEBUG)HttpVersion11)HandlerPathLike)HTTPExceptionHTTPExpectationFailedHTTPForbiddenHTTPMethodNotAllowedHTTPNotFound)FileResponse)Request)ResponseStreamResponse)AbstractRouteDef)
UrlDispatcherUrlMappingMatchInfoAbstractResourceResourcePlainResourceDynamicResourceAbstractRouteResourceRouteStaticResourceView)Application)   
   win32)r<       .   .YARL_VERSIONz$^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$HTTP_METHOD_REz*(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})ROUTE_RE/PATH_SEPr2   T)quotec                       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@       [/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/aiohttp/web_urldispatcher.pyrJ   rJ   h   s         
IIINNNS\OOOKKKC())))	KKK
    !!!!!!r[   rJ   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namer`   returnc                    || _         d S N_nameselfr`   s     r\   __init__zAbstractResource.__init__|   s    


r[   c                     | j         S rc   rd   rg   s    r\   r`   zAbstractResource.name   
    zr[   c                     dS )zWExposes the resource's canonical path.

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

        Nr@   rj   s    r\   	canonicalzAbstractResource.canonical         r[   kwargsc                     dS )z2Construct url for resource with additional params.Nr@   )rg   ro   s     r\   url_forzAbstractResource.url_for   rn   r[   requestc                 
   K   dS )zWResolve resource.

        Return (UrlMappingMatchInfo, allowed_methods) pair.
        Nr@   rg   rr   s     r\   resolvezAbstractResource.resolve   
        r[   rO   c                     dS )zWAdd a prefix to processed URLs.

        Required for subapplications support.
        Nr@   rg   rO   s     r\   
add_prefixzAbstractResource.add_prefix   rn   r[   c                     dS z;Return a dict with additional info useful for introspectionNr@   rj   s    r\   get_infozAbstractResource.get_info   rn   r[   c                     d S rc   r@   rj   s    r\   freezezAbstractResource.freeze   s    r[   rK   c                     dS )z Perform a raw match against pathNr@   rg   rK   s     r\   	raw_matchzAbstractResource.raw_match   rn   r[   ra   N)rV   rW   rX   r   rY   rh   propertyr`   abcabstractmethodrm   r   rq   r-   _Resolveru   ry   rJ   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   ra   c                B   |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          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 methodz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesrr   ra   c                    K    |           }t          j        |          r| d {V }t          |t                    sJ |S rc   )asyncioiscoroutine
isinstancer/   )rr   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isgeneratorfunctionwarningswarnDeprecationWarningr   type
issubclassr"   r   r-   r/   _method_handler_expect_handler	_resource)rg   r   r   r   r   r   r   s         @r\   rh   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 rc   )r   rj   s    r\   r   zAbstractRoute.method   
    |r[   c                     | j         S rc   )r   rj   s    r\   r   zAbstractRoute.handler   s
    }r[   c                     dS )z8Optional route's name, always equals to resource's name.Nr@   rj   s    r\   r`   zAbstractRoute.name   rn   r[   c                     | j         S rc   )r   rj   s    r\   r   zAbstractRoute.resource   s
    ~r[   c                     dS r{   r@   rj   s    r\   r|   zAbstractRoute.get_info   rn   r[   argsro   c                     dS )/Construct url for route with additional params.Nr@   rg   r   ro   s      r\   rq   zAbstractRoute.url_for   rn   r[   rr   c                 <   K   |                      |           d {V S rc   )r   rt   s     r\   handle_expect_headerz"AbstractRoute.handle_expect_header   s,      ))'222222222r[   )rV   rW   rX   rY   r   r%   r   r"   r   _ExpectHandlerr3   rh   r   r   r   r   r   r`   r   rJ   r|   r   rq   r-   r/   r   r@   r[   r\   r7   r7      s        48/33" 3" 3"3" w\ 2233"
 !03" +,3" 
3" 3" 3" 3"j     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routera   Nc                     t                                          |           || _        g | _        d | _        d| _        d S NF)superrh   r   r   r   r   )rg   r   r   	__class__s      r\   rh   zUrlMappingMatchInfo.__init__  s<    $$$(*
37r[   c                     | j         j        S rc   )r   r   rj   s    r\   r   zUrlMappingMatchInfo.handler  s    {""r[   c                     | j         S rc   )r   rj   s    r\   r   zUrlMappingMatchInfo.route  s
    {r[   c                     | j         j        S rc   )r   r   rj   s    r\   r   z"UrlMappingMatchInfo.expect_handler  s    {//r[   c                     d S rc   r@   rj   s    r\   rU   z"UrlMappingMatchInfo.http_exception      tr[   c                 4    | j                                         S rc   )r   r|   rj   s    r\   r|   zUrlMappingMatchInfo.get_info  s    {##%%%r[   )r;   .c                 *    t          | j                  S rc   )tupler   rj   s    r\   appszUrlMappingMatchInfo.apps  s    TZ   r[   rQ   r;   c                     | j         rt          d          | j        || _        | j                            d|           d S )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrg   rQ   s     r\   add_appzUrlMappingMatchInfo.add_app  sK    < 	PNOOO$ #D
!S!!!!!r[   c                     | j         }|J |S rc   )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_app,  sS     	$*$$"GNN
C   
  r[   c                     d| _         d S )NT)r   rj   s    r\   r~   zUrlMappingMatchInfo.freeze7  s    r[   c                 \    dt                                                       d| j         dS )Nz<MatchInfo z: >)r   __repr__r   rg   r   s    r\   r   zUrlMappingMatchInfo.__repr__:  s.    AUWW--//AA4;AAAAr[   )rQ   r;   ra   N)ra   r;   r   )rV   rW   rX   	__slots__r   rY   r7   rh   r   r%   r   r   r   r   r   r'   rU   rJ   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
_exceptionrU   ra   Nc                 ~    || _         t                                          i t          | j                              d S rc   )r   r   rh   SystemRouterg   rU   r   s     r\   rh   zMatchInfoError.__init__B  s4    ([99:::::r[   c                     | j         S rc   r   rj   s    r\   rU   zMatchInfoError.http_exceptionF  
    r[   c                 V    d                     | j        j        | j        j                  S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrj   s    r\   r   zMatchInfoError.__repr__J  s)    (//O"DO$:
 
 	
r[   )rV   rW   rX   r   r'   rh   r   rU   rY   r   r   r   s   @r\   r   r   >  s        I;} ; ; ; ; ; ; ;     X
# 
 
 
 
 
 
 
 
r[   r   rr   ra   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(   )rr   expects     r\   r   r   P  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   Nr_   r`   ra   c                    t                                          |           i | _        d | _        t	                      | _        d S )Nr_   )r   rh   _routes
_any_routeset_allowed_methods)rg   r`   r   s     r\   rh   zResource.__init__a  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)rg   r   r   r   r   	route_objs         r\   	add_routezResource.add_routeg  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   rg   r   s     r\   r   zResource.register_routey  s    =
 
 	A 	A@u@@	A 	A 
 <4=((#DO!!%,///%*U\"""r[   rr   c                    K   |                      |j        j                  x}d t                      fS | j                            |j        | j                  x}rt          ||          | j	        fS d | j	        fS rc   )
_matchrel_url	path_safer   r   r   r   r   r2   r   )rg   rr   r   r   s       r\   ru   zResource.resolve  sz      ++go&?@@@JI;L$$W^T_EEE5 	Q&z5994;PPPT***r[   rK   c                     d S rc   r@   r   s     r\   r  zResource._match  s    r[   c                 *    t          | j                  S rc   lenr   rj   s    r\   __len__zResource.__len__      4<   r[   c                 N    t          | j                                                  S rc   iterr   valuesrj   s    r\   __iter__zResource.__iter__      DL''))***r[   )r   r8   ra   N)rV   rW   rX   r   rY   rh   r   r   r"   r%   r   r   r   r-   r   ru   r   r   r   r  intr  r   r  r   r   s   @r\   r4   r4   `  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   Nr_   rK   r`   ra   c                    t                                          |           |r|                    d          sJ || _        d S )Nr_   rF   )r   rh   
startswith_path)rg   rK   r`   r   s      r\   rh   zPlainResource.__init__  sF    d###/4??3/////


r[   c                     | j         S rc   r  rj   s    r\   rm   zPlainResource.canonical  rk   r[   c                 &    | j         s	d| _         d S d S )NrF   r  rj   s    r\   r~   zPlainResource.freeze  s!    z 	DJJJ	 	r[   rO   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        d S NrF   r   )r  endswithr  r  rx   s     r\   ry   zPlainResource.add_prefix  sY      %%%%%??3'''''6{{Qdj(


r[   c                      | j         |k    ri S d S rc   r  r   s     r\   r  zPlainResource._match  s    :Itr[   c                     | j         |k    S rc   r  r   s     r\   r   zPlainResource.raw_match  s    zT!!r[   c                     d| j         iS )NrK   r  rj   s    r\   r|   zPlainResource.get_info  s    
##r[   c                 8    t          j        | j        d          S )NTrK   encoded)r   buildr  rj   s    r\   rq   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   )r`   r  rf   s     r\   r   zPlainResource.__repr__  s9    )-)>sTY%%B555
5555r[   r   )rV   rW   rX   rY   r   rh   r   rm   r~   ry   r   r  r   r   rJ   r|   r   rq   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[^{}/]+Nr_   rK   r`   ra   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 )Nr_   r   z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rF   r@   )r   rh   
_orig_pathrE   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrM   r  rG   _pattern
_formatter)
rg   rK   r`   rM   rL   partr   compiledexcr   s
            r\   rh   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 rc   )r=  rj   s    r\   rm   zDynamicResource.canonical  r   r[   rO   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  r8  r:  r9  r<  rM   r=  rx   s     r\   ry   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<  r2  r6  items)rg   rK   r   s      r\   r  zDynamicResource._match  sX    ''--=4
 
=B__=N=N=T=T=V=V
 
 
 	
r[   c                     | j         |k    S rc   )r/  r   s     r\   r   zDynamicResource.raw_match  s    $&&r[   c                      | j         | j        dS )N)rL   rM   )r=  r<  rj   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)rF  kvs      r\   rI  z+DynamicResource.url_for.<locals>.<dictcomp>   s$    )V)V)V1![^^)V)V)Vr[   Tr#  )r=  
format_maprJ  r   r%  )rg   rM  urls      r\   rq   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}>)r`   rL   )r`   r   r=  rf   s     r\   r   zDynamicResource.__repr__  sB    )-)>sTY%%B5<< = 
 
 	
r[   )rV   rW   rX   r8  r:  r1  r5  r4  rY   r   rh   r   rm   ry   r   r  r   r   rJ   r|   r   rq   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 )
PrefixResourceNr_   rO   r`   ra   c                   |r|                     d          s
J |            |dv s|                    d          r
J |            t                                          |           t	          |          | _        | j        dz   | _        d S )NrF   )r   rF   r_   )r  r  r   rh   r7  _prefix_prefix2)rg   rO   r`   r   s      r\   rh   zPrefixResource.__init__  s    ;V..s33;;V;;3""&//#*>*>"""">d###$V,,s*r[   c                     | j         S rc   )rY  rj   s    r\   rm   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  rY  rZ  rx   s     r\   ry   zPrefixResource.add_prefix  sg      %%%%%??3'''''6{{Q,s*r[   c                     dS r   r@   rx   s     r\   r   zPrefixResource.raw_match  s    ur[   )rV   rW   rX   rY   r   rh   r   rm   ry   r   r   r   r   s   @r\   rW  rW  
  s        =A + + +s +Xc] +d + + + + + + 3    X+ + + + + +         r[   rW  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   rR  N   Fr`   r   
chunk_size
show_indexfollow_symlinksappend_versionrO   rN   r`   r   ra  rb  rc  rd  ra   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 )Nr_   T)strictr'  z' does not existz' is not a directoryGETr   HEAD)rg  rh  )r   rh   r   
expanduserru   FileNotFoundErrorr   is_dir
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr8   _handler   r   r   )rg   rO   rN   r`   r   ra  rb  rc  rd  r;  r   s             r\   rh   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?)rd  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)rp  rY   lstripr   r%  rY  rC   replacerl  joinpathro  r   osrK   normpathrelative_toru   r   rj  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rg   rr  rd  rT  unresolved_pathnormalized_pathfilepathf
file_byteshs
             r\   rq   zStaticResource.url_forJ  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_hashs  sK    N	&qxxzz22zz'"""r[   c                 ,    | j         | j        | j        dS )N)rN   rO   rP   )rl  rY  r   rj   s    r\   r|   zStaticResource.get_infoz  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  )rg   r   s     r\   set_options_routez StaticResource.set_options_route  sd    $$>???"/wT5I#
 #
 #
Y 	!!),,,,,r[   rr   c                 J  K   |j         j        }|j        }|                    | 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 )Nrr  r   )r  r  r   r  rZ  rY  r   r   rE  r  r2   r   )rg   rr   rK   r   allowed_methodsr   s         r\   ru   zStaticResource.resolve  s      (t}-- 	$$,2F2F;/(((( "4T#dl:K:Ka:O:Q:Q5R"S"ST
#JV0DEEWWr[   c                 *    t          | j                  S rc   r
  rj   s    r\   r  zStaticResource.__len__  r  r[   c                 N    t          | j                                                  S rc   r  rj   s    r\   r  zStaticResource.__iter__  r  r[   c                   K   |j         d         }t          |          }|j        rt                      | j                            |          }t          j                    }|                    d | j	        |           d {V S )Nrr  )

match_infor   anchorr)   rl  r{  r   get_running_looprun_in_executor_resolve_path_to_response)rg   rr   r  rr  r  loops         r\   rq  zStaticResource._handle  s      $Z0==? 	"  //!/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)ra  )ro  r   r|  rK   r}  r~  rl  ru   r   CIRCULAR_SYMLINK_ERRORr+   rk  rm  r.   _directory_as_htmlr)   PermissionErrorr,   rn  )rg   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>)rk  r~  rl  as_posixhtml_escapeiterdirsortedrP  rY  r`   appendr   join)rg   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}>)r`   rK   rN   )r`   r   rY  rl  rf   s     r\   r   zStaticResource.__repr__  sG    (,	(=sTY$$2@GGDLDO H 
 
 	
r[   )"rV   rW   rX   r  rY   r&   r   r   r  r   rh   r   rq   staticmethodbytesr  rJ   r|   r%   r  r-   r   ru   r  r   r7   r  r/   rq  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 )PrefixedSubAppResourcerO   rQ   r;   ra   Nc                     t                                          |           || _        |                     |           d S rc   )r   rh   _app_add_prefix_to_resources)rg   rO   rQ   r   s      r\   rh   zPrefixedSubAppResource.__init__  s<       	%%f-----r[   c                 t    t                                          |           |                     |           d S rc   )r   ry   r  )rg   rO   r   s     r\   ry   z!PrefixedSubAppResource.add_prefix  s5    6"""%%f-----r[   c                     | j         j        }|                                D ]A}|                    |           |                    |           |                    |           Bd S rc   )r  router	resourcesunindex_resourcery   index_resource)rg   rO   r  r   s       r\   r  z/PrefixedSubAppResource._add_prefix_to_resources  sr    !((** 	, 	,H ##H---'''!!(++++	, 	,r[   r   ro   c                      t          d          )Nz3.url_for() is not supported by sub-application rootr   r   s      r\   rq   zPrefixedSubAppResource.url_for  s    PQQQr[   c                      | j         | j        dS )N)rQ   rO   )r  rY  rj   s    r\   r|   zPrefixedSubAppResource.get_info  s    yDL999r[   rr   c                    K   | j         j                            |           d {V }|                    | j                    t	          |j        t                    r|j        j        }nt                      }||fS rc   )	r  r  ru   r   r   rU   r*   r  r   rg   rr   r  methodss       r\   ru   zPrefixedSubAppResource.resolve  s}      9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""r[   c                 X    t          | j        j                                                  S rc   )r  r  r  rP   rj   s    r\   r  zPrefixedSubAppResource.__len__  s!    49#**,,---r[   c                 X    t          | j        j                                                  S rc   )r  r  r  rP   rj   s    r\   r  zPrefixedSubAppResource.__iter__  s!    DI$++--...r[   c                 D    d                     | j        | j                  S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rO   rQ   )r   rY  r  rj   s    r\   r   zPrefixedSubAppResource.__repr__  s)    =DD<TY E 
 
 	
r[   )rV   rW   rX   rY   rh   ry   r  r   rq   rJ   r|   r-   r   ru   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 )rS   rr   ra   c                 
   K   dS )z1Return bool if the request satisfies the criteriaNr@   rt   s     r\   r   zAbstractRuleMatching.match$  rv   r[   c                     dS r{   r@   rj   s    r\   r|   zAbstractRuleMatching.get_info(  rn   r[   c                     dS )zReturn a strNr@   rj   s    r\   rm   zAbstractRuleMatching.canonical,  rn   r[   N)rV   rW   rX   r   r   r-   r   r   rJ   r|   r   rY   rm   r@   r[   r\   rS   rS   #  s        @7 @t @ @ @ @ 	J) J J J J 3     X  r[   rS   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}(?<!-)rR   ra   Nc                 |    t                                                       |                     |          | _        d S rc   )r   rh   
validation_domain)rg   rR   r   s     r\   rh   zDomain.__init__5  s0    v..r[   c                     | j         S rc   r  rj   s    r\   rm   zDomain.canonical9  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 rc   )re_partr2  )rF  xrg   s     r\   	<genexpr>z$Domain.validation.<locals>.<genexpr>G  s3      NN4<))!,,NNNNNNr[   zDomain not validP   :)r   rY   	TypeErrorrstripr   r   r   raw_hostallr0  port)rg   rR   rT  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[   rr   c                    K   |j                             t          j                  }|sdS |                     |          S r   )r   r   r   HOSTmatch_domain)rg   rr   hosts      r\   r   zDomain.matchM  s>      ""49-- 	5  &&&r[   r  c                 <    |                                 | j        k    S rc   )r   r  rg   r  s     r\   r  zDomain.match_domainS  s    zz||t|++r[   c                     d| j         iS )NrR   r  rj   s    r\   r|   zDomain.get_infoV  s    $,''r[   )rV   rW   rX   r8  r:  r  rY   rh   r   rm   r  r-   r   r   r  rJ   r|   r   r   s   @r\   r  r  2  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}(?<!-)rR   ra   Nc                     t                                          |           | j                            dd                              dd          }t	          j        |          | _        d S )NrA   z\.*z.*)r   rh   r  rz  r8  r:  _mask)rg   rR   maskr   s      r\   rh   zMaskDomain.__init__]  sW       |##C//77TBBZ%%


r[   c                     | j         j        S rc   )r  rM   rj   s    r\   rm   zMaskDomain.canonicalb  s    z!!r[   r  c                 :    | j                             |          d uS rc   )r  r2  r  s     r\   r  zMaskDomain.match_domainf  s    z##D))55r[   )rV   rW   rX   r8  r:  r  rY   rh   r   rm   r   r  r   r   s   @r\   r  r  Z  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 )MatchedSubAppResourcerT   rQ   r;   ra   Nc                 d    t                               |            d| _        || _        || _        d S )Nr   )r3   rh   rY  r  _rule)rg   rT   rQ   s      r\   rh   zMatchedSubAppResource.__init__k  s/    !!$'''	


r[   c                     | j         j        S rc   )r  rm   rj   s    r\   rm   zMatchedSubAppResource.canonicalq  s    z##r[   c                      | j         | j        dS )N)rQ   rT   )r  r  rj   s    r\   r|   zMatchedSubAppResource.get_infou  s    y$*555r[   rr   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 rc   )r  r   r   r  r  ru   r   r   rU   r*   r  r  s       r\   ru   zMatchedSubAppResource.resolvex  s      Z%%g........ 	;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""r[   c                     d| j         dS )Nz<MatchedSubAppResource -> r   )r  rj   s    r\   r   zMatchedSubAppResource.__repr__  s    :DI::::r[   )rV   rW   rX   rS   rh   r   rY   rm   rJ   r|   r-   r   ru   r   r@   r[   r\   r   r   j  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   ra   c                R    t                                          ||||           d S )Nr   )r   rh   )rg   r   r   r   r   r   s        r\   rh   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   rj   s    r\   r   zResourceRoute.__repr__  s-    DKK; L 
 
 	
r[   c                 ,    | j         d S | j         j        S rc   )r   r`   rj   s    r\   r`   zResourceRoute.name  s    >!4~""r[   r   ro   c                 8    | j         J  | j         j        |i |S )r   )r   rq   r   s      r\   rq   zResourceRoute.url_for  s*    ~)))%t~%t6v666r[   c                 F    | j         J | j                                         S rc   )r   r|   rj   s    r\   r|   zResourceRoute.get_info  s$    ~)))~&&(((r[   )rV   rW   rX   __doc__rY   r   r%   r   r"   r3   r   r   rh   r   r   r`   r   rq   rJ   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   rU   ra   Nc                 x    t                                          t          j        | j                   || _        d S rc   )r   rh   r   r  rq  _http_exceptionr   s     r\   rh   zSystemRoute.__init__  s/    555-r[   r   ro   c                      t          d          )Nz).url_for() is not allowed for SystemRouter  r   s      r\   rq   zSystemRoute.url_for  s    FGGGr[   c                     d S rc   r@   rj   s    r\   r`   zSystemRoute.name  r   r[   c                     d| j         iS )NrU   r  rj   s    r\   r|   zSystemRoute.get_info  s     $"677r[   rr   c                    K   | j         rc   r  rt   s     r\   rq  zSystemRoute._handle  s      ""r[   c                     | j         j        S rc   )r  r   rj   s    r\   r   zSystemRoute.status      #**r[   c                     | j         j        S rc   )r  r   rj   s    r\   r   zSystemRoute.reason  r  r[   c                 .    d                     |           S )Nz*<SystemRoute {self.status}: {self.reason}>rj   )r   rj   s    r\   r   zSystemRoute.__repr__  s    ;BBBMMMr[   )rV   rW   rX   r'   rh   rY   r   rq   r   r   r`   rJ   r|   r-   r/   rq  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edef         fdZdefdZ	dS )r:   ra   c                 6  K   | j         j        t          j        vr|                                  t          | | j         j                                        d           }||                                   |             d {V }t          |t                    sJ |S rc   )	rr   r   r   METH_ALL_raise_allowed_methodsgetattrr   r   r/   )rg   r   rets      r\   _iterz
View._iter  s      <dm33'')))t|288::DAA>'')))FHHnnnnnn#~.....
r[   Nc                 N    |                                                                  S rc   )r   	__await__rj   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   )rF  r  rg   s     r\   	<setcomp>z.View._raise_allowed_methods.<locals>.<setcomp>  s0    PPPwtQWWYY7O7OP1PPPr[   )r   r  r*   rr   r   )rg   r  s   ` r\   r  zView._raise_allowed_methods  s3    PPPPdmPPP"4<#6HHHr[   )
rV   rW   rX   r/   r   r   r   r"  r   r  r@   r[   r\   r:   r:     sx        	^ 	 	 	 	(9S$%>? ( ( ( (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  ra   Nc                     || _         d S rc   
_resources)rg   r  s     r\   rh   zResourcesView.__init__  s    #r[   c                 *    t          | j                  S rc   )r  r+  rj   s    r\   r  zResourcesView.__len__  s    4?###r[   c              #   $   K   | j         E d {V  d S rc   r*  rj   s    r\   r  zResourcesView.__iter__  s&      ?"""""""""r[   r   c                     || j         v S rc   r*  rg   r   s     r\   __contains__zResourcesView.__contains__  s    4?**r[   )rV   rW   rX   r   r3   rh   r  r  r   r  objectr   r0  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 rc   )r   r  )rg   r  r   r   s       r\   rh   zRoutesView.__init__  sO    ,.! 	+ 	+H! + +##E****+	+ 	+r[   ra   c                 *    t          | j                  S rc   r
  rj   s    r\   r  zRoutesView.__len__  r  r[   c              #   $   K   | j         E d {V  d S rc   r   rj   s    r\   r  zRoutesView.__iter__  s&      <r[   r   c                     || j         v S rc   r7  r  s     r\   r0  zRoutesView.__contains__  s    $$r[   N)rV   rW   rX   r   r3   rh   r  r  r   r7   r  r1  r   r0  r@   r[   r\   r3  r3    s        +$'7"8 + + + +! ! ! ! ! (=1        %& %T % % % % % %r[   r3  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[.:-]ra   Nc                     t                                                       g | _        i | _        i | _        g | _        d S rc   )r   rh   r+  _named_resources_resource_index_matched_sub_app_resourcesr   s    r\   rh   zUrlDispatcher.__init__   s>    24=?BDGI'''r[   rr   c                    K   | j         }t                      }|j        j        }|rh|                    |d          D ]+}|                    |           d {V \  }}||c S ||z  },|dk    rn|                    d          d         pd}|h| j        D ]+}|                    |           d {V \  }}||c S ||z  },|r"t          t          |j
        |                    S t          t                                S )Nr@   rF   r   )r<  r   r  r  r   ru   
rpartitionr=  r   r*   r   r+   )	rg   rr   resource_indexr  url_part	candidater   allowedr   s	            r\   ru   zUrlDispatcher.resolve  sW     -$'EE ?, 		:+//"== / /	,5,=,=g,F,F&F&F&F&F&F&F#
G)%%%%#w.OO3**3//29cH  		:& 7 	+ 	+H(0(8(8(A(A"A"A"A"A"A"AJ%!!!!7* 	Y!"6w~"W"WXXXlnn---r[   c                 *    t          | j                  S rc   )r  r;  rj   s    r\   r  zUrlDispatcher.__iter__0  s    D)***r[   c                 *    t          | j                  S rc   )r  r;  rj   s    r\   r  zUrlDispatcher.__len__3  s    4()))r[   r   c                     || j         v S rc   r;  r/  s     r\   r0  zUrlDispatcher.__contains__6  s    4000r[   r`   c                     | j         |         S rc   rG  rf   s     r\   __getitem__zUrlDispatcher.__getitem__9  s    $T**r[   c                 *    t          | j                  S rc   )r(  r+  rj   s    r\   r  zUrlDispatcher.resources<  s    T_---r[   c                 *    t          | j                  S rc   )r3  r+  rj   s    r\   rP   zUrlDispatcher.routes?  s    $/***r[   c                 *    t          | j                  S rc   )r   r;  rj   s    r\   named_resourceszUrlDispatcher.named_resourcesB  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   r`   NAME_SPLIT_REr0  keyword	iskeywordr   isidentifierr   r;  r+  r  r   r=  r  )rg   r   r`   rM  r>  s        r\   register_resourcezUrlDispatcher.register_resourceE  s   &
 
 	O 	ON(NN	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   )rm   	partitionr?  r  )rg   r   	index_keys      r\   _get_resource_index_keyz%UrlDispatcher._get_resource_index_keyl  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)rX  r<  
setdefaultr  rg   r   resource_keys      r\   r  zUrlDispatcher.index_resourcew  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)rX  r<  remover[  s      r\   r  zUrlDispatcher.unindex_resource  s7    33H==\*11(;;;;;r[   r_   rK   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-  r.  r_   )r  r   r+  r`   r   r   r4   rE   searchr5   rT  r6   )rg   rK   r`   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[   )r`   r   r   r   r   c                `    |                      ||          }|                    |||          S )Nr_   r   )rb  r   )rg   r   rK   r   r`   r   r   s          r\   r   zUrlDispatcher.add_route  s7     $$T$55!!&'.!QQQr[   r_  Fr`  rO   ra  rb  rc  rd  c          
          |                     d          sJ |                    d          r
|dd         }t          ||||||||          }	|                     |	           |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        rF   Nr`  r`  )r  r  r9   rT  )
rg   rO   rK   r`   r   ra  rb  rc  rd  r   s
             r\   
add_staticzUrlDispatcher.add_static  s    $   %%%%%??3 	!CRC[F!)!!+)	
 	
 	
 	x(((r[   ro   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method HEAD.)r   r   	METH_HEADrg   rK   r   ro   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_OPTIONSrh  s       r\   add_optionszUrlDispatcher.add_options  s#    t~d/wII&IIIr[   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.
        r_   )rb  r   r   rg  METH_GET)rg   rK   r   r`   rn  ro   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_POSTrh  s       r\   add_postzUrlDispatcher.add_post  rj  r[   c                 6     | j         t          j        ||fi |S )z'Shortcut for add_route with method PUT.)r   r   METH_PUTrh  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_PATCHrh  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_DELETErh  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  rh  s       r\   add_viewzUrlDispatcher.add_view  s$     t~dmT7EEfEEEr[   c                     t                                                       | j        D ]}|                                 d S rc   )r   r~   r+  )rg   r   r   s     r\   r~   zUrlDispatcher.freeze  sE     	 	HOO	 	r[   rP   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)rg   rP   registered_routes	route_defs       r\   
add_routeszUrlDispatcher.add_routes  sD      	? 	?I$$Y%7%7%=%=>>>>  r[   r   )9rV   rW   rX   r8  r:  rP  rh   r-   r2   ru   r   rY   r  r  r  r1  r   r0  r3   rI  r(  r  r3  rP   r   rM  rT  rX  r  r  r   r4   rb  r   r%   r   r"   r   r7   r   r&   re  r   ri  rm  rq  rt  rw  rz  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   rH  c                 z    t           dk     r|                     dd          } t          j        | d          j        S )Nrt  rv  rw  Fr#  )rC   rz  r   r%  raw_pathrH  s    r\   rP  rP    s8    fc5))9%///88r[   c                 b    d| vr| S |                      dd                               dd          S )Nrv  z%2FrF   rw  )rz  r  s    r\   rE  rE    s6    
%==$$,,UC888r[   c                 X    t          |           }d| v r|                    dd          }|S )Nrv  rw  )rP  rz  )rH  r   s     r\   r7  r7    s2     F
e||s++Mr[   )|r   r   r  	functoolsr  r  r   rQ  r|  r8  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;   rY   BaseDictdictr   platformr  OSErrorr   r  r   mapr  r0  rC   rZ   r:  rD   rE   r9  rG   r   r   partialr  rJ   r3   ABCr7   r2   r   r   r4   r5   r6   rW  r9   r  rS   r  r  r   r8   r   r:   r(  r3  r1   rP  rE  r7  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~~%* % % % 7)Yx/G%HHI/0#c(:;i4888" " " " "	 " " " "&,/ ,/ ,/ ,/ ,/uh7 ,/ ,/ ,/^P3 P3 P3 P3 P3CG P3 P3 P3f>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    %   2O
 O
 O
 O
 O
^ O
 O
 O
d+
 +
 +
 +
 +
^ +
 +
 +
\    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[   