
    bfĜ                        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mZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ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eMZL eN eOeP e,jQ        d          dd                             ZRee$ePdf                  eSd<    e	jT        d          ZUee!eK                  eSd<    e	jT        d          ZVee!eK                  eSd<    e	jW        d          ZXeeK         eSd<   eeBgee eE                  f         ZYe$e d         e"eK         f         ZZ ej[        ejW        d !          Z\ G d" d#e&d$%          Z] G d& d'e#ed(                   Z^ G d) d(e j_                  Z` G d* deLe/          Za G d+ d,ea          Zbd-eBd.dfd/Zc G d0 d1e^          Zd G d2 d3ed          Ze G d4 d5ed          Zf G d6 d7e^          Zg G d8 d9eg          Zh G d: d;eg          Zi G d< d=e j_                  Zj G d> d?ej          Zk G d@ dAek          Zl G dB dCei          Zm G dD dEe`          Zn G dF dGe`          Zo G dH dIe1          Zp G dJ dKe#ee^         ee^                   Zq G dL dMe#ee`         ee`                   Zr G dN dOe0eeKe^f                   ZsdPeKd.eKfdQZtdPeKd.eKfdRZudPeKd.eKfdSZvdS )T    N)contextmanager)wraps)Path)MappingProxyType)TYPE_CHECKINGAny	AwaitableCallable	ContainerDictFinal	GeneratorIterableIteratorListMappingNoReturnOptionalPatternSetSizedTupleType	TypedDictUnioncast)URL__version__   )hdrs)AbstractMatchInfoAbstractRouterAbstractView)DEBUG)HttpVersion11)HandlerPathLike)HTTPExceptionHTTPExpectationFailedHTTPForbiddenHTTPMethodNotAllowedHTTPNotFound)FileResponse)Request)ResponseStreamResponse)AbstractRouteDef)
UrlDispatcherUrlMappingMatchInfoAbstractResourceResourcePlainResourceDynamicResourceAbstractRouteResourceRouteStaticResourceView)Application.   .YARL_VERSIONz$^[0-9A-Za-z!#\$%&'\*\+\-\.\^_`\|~]+$HTTP_METHOD_REz*(\{[_a-zA-Z][^{}]*(?:\{[^{}]*\}[^{}]*)*\})ROUTE_RE/PATH_SEPr3   T)quotec                       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prefixr8   routesr<   appdomainAbstractRuleMatchingrulehttp_exceptionN)	__name__
__module____qualname__str__annotations__r   r   r   r(        S/var/www/html/Alfredo/env/lib/python3.11/site-packages/aiohttp/web_urldispatcher.pyrF   rF   b   s         
IIINNNS\OOOKKKC())))	KKK
    !!!!!!rX   rF   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 )r4   Nnamer]   returnc                    || _         d S N_nameselfr]   s     rY   __init__zAbstractResource.__init__v   s    


rX   c                     | j         S r`   ra   rd   s    rY   r]   zAbstractResource.namey   
    zrX   c                     dS )zWExposes the resource's canonical path.

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

        NrW   rg   s    rY   	canonicalzAbstractResource.canonical}         rX   kwargsc                     dS )z2Construct url for resource with additional params.NrW   )rd   rl   s     rY   url_forzAbstractResource.url_for   rk   rX   requestc                 
   K   dS )zWResolve resource.

        Return (UrlMappingMatchInfo, allowed_methods) pair.
        NrW   rd   ro   s     rY   resolvezAbstractResource.resolve   
        rX   rK   c                     dS )zWAdd a prefix to processed URLs.

        Required for subapplications support.
        NrW   rd   rK   s     rY   
add_prefixzAbstractResource.add_prefix   rk   rX   c                     dS z;Return a dict with additional info useful for introspectionNrW   rg   s    rY   get_infozAbstractResource.get_info   rk   rX   c                     d S r`   rW   rg   s    rY   freezezAbstractResource.freeze   s    rX   rG   c                     dS )z Perform a raw match against pathNrW   rd   rG   s     rY   	raw_matchzAbstractResource.raw_match   rk   rX   r^   N)rR   rS   rT   r   rU   re   propertyr]   abcabstractmethodrj   r   rn   r.   _Resolverr   rv   rF   ry   r{   boolr~   rW   rX   rY   r4   r4   u   s       04         hsm    X 3     X 	A A A A A A 	W      	      	J) J J J J    	/c /d / / / / / /rX   r4   r8   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 )r8   Nexpect_handlerresourcemethodhandlerr   r   r^   c                   |t           }t          j        |          sJ d|            |                                }t                              |          st          | d          t          |          s
J |            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 )NzCoroutine is expected, got z is not allowed HTTP methodz6Bare generators are deprecated, use @coroutine wrapperz-Bare functions are deprecated, use async onesro   r^   c                    K    |           }t          j        |          r| d {V }t          |t                    sJ |S r`   )asyncioiscoroutine
isinstancer0   )ro   resultold_handlers     rY   handler_wrapperz/AbstractRoute.__init__.<locals>.handler_wrapper   sU      $W--&v.. *#)\\\\\\F!&.99999rX   )_default_expect_handlerr   iscoroutinefunctionupperr@   match
ValueErrorcallableinspectisgeneratorfunctionwarningswarnDeprecationWarningr   type
issubclassr#   r   r.   r0   _method_handler_expect_handler	_resource)rd   r   r   r   r   r   r   s         @rY   re   zAbstractRoute.__init__   s    !4N*
 
 	< 	<;;;	< 	< 	< ##F++ 	ECCCDDD  ))')))&w// 	&(11 	&MK"    && 	&:g|+L+L 	&MBDV   7^^w >      ^ "K%G-!rX   c                     | j         S r`   )r   rg   s    rY   r   zAbstractRoute.method   
    |rX   c                     | j         S r`   )r   rg   s    rY   r   zAbstractRoute.handler   s
    }rX   c                     dS )z8Optional route's name, always equals to resource's name.NrW   rg   s    rY   r]   zAbstractRoute.name   rk   rX   c                     | j         S r`   )r   rg   s    rY   r   zAbstractRoute.resource   s
    ~rX   c                     dS rx   rW   rg   s    rY   ry   zAbstractRoute.get_info   rk   rX   argsrl   c                     dS )/Construct url for route with additional params.NrW   rd   r   rl   s      rY   rn   zAbstractRoute.url_for   rk   rX   ro   c                 <   K   |                      |           d {V S r`   )r   rq   s     rY   handle_expect_headerz"AbstractRoute.handle_expect_header   s,      ))'222222222rX   )rR   rS   rT   rU   r   r&   r   r#   r   _ExpectHandlerr4   re   r   r   r   r   r   r]   r   rF   ry   r   rn   r.   r0   r   rW   rX   rY   r8   r8      s        48/31" 1" 1"1" w\ 2231"
 !01" +,1" 
1" 1" 1" 1"f     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 3rX   c                   L    e Zd Zdeeef         de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ddded         fd            ZddZdef fdZ xZS )r3   
match_dictroutec                     t                                          |           || _        g | _        d | _        d| _        d S NF)superre   _route_apps_current_app_frozen)rd   r   r   	__class__s      rY   re   zUrlMappingMatchInfo.__init__   s<    $$$(*
37rX   r^   c                     | j         j        S r`   )r   r   rg   s    rY   r   zUrlMappingMatchInfo.handler   s    {""rX   c                     | j         S r`   )r   rg   s    rY   r   zUrlMappingMatchInfo.route  s
    {rX   c                     | j         j        S r`   )r   r   rg   s    rY   r   z"UrlMappingMatchInfo.expect_handler  s    {//rX   c                     d S r`   rW   rg   s    rY   rQ   z"UrlMappingMatchInfo.http_exception	      trX   c                 4    | j                                         S r`   )r   ry   rg   s    rY   ry   zUrlMappingMatchInfo.get_info  s    {##%%%rX   )r<   .c                 *    t          | j                  S r`   )tupler   rg   s    rY   appszUrlMappingMatchInfo.apps  s    TZ   rX   rM   r<   Nc                     | j         rt          d          | j        || _        | j                            d|           d S )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrd   rM   s     rY   add_appzUrlMappingMatchInfo.add_app  sK    < 	PNOOO$ #D
!S!!!!!rX   c                     | j         }|J |S r`   )r   r   s     rY   current_appzUrlMappingMatchInfo.current_app  s    
rX   )NNNc              #      K   t           r1|| j        vr(t          d                    | j        |                    | j        }|| _        	 d V  || _        d S # || _        w xY w)Nz1Expected one of the following apps {!r}, got {!r})r$   r   r   formatr   )rd   rM   prevs      rY   set_current_appz#UrlMappingMatchInfo.set_current_app!  s       	$*$$"GNN
C   
  	%EEE $DD$$$$s   
A 	A c                     d| _         d S )NT)r   rg   s    rY   r{   zUrlMappingMatchInfo.freeze1  s    rX   c                 \    dt                                                       d| j         dS )Nz<MatchInfo z: >)r   __repr__r   rd   r   s    rY   r   zUrlMappingMatchInfo.__repr__4  s.    AUWW--//AA4;AAAArX   )rM   r<   r^   N)r^   r<   r   )rR   rS   rT   r   rU   r8   re   r   r&   r   r   r   r   r   r(   rQ   rF   ry   r   r   r   r   r   r   r   r{   r   __classcell__r   s   @rY   r3   r3      s       4S> -       # # # # X# }    X 0 0 0 0 X0  7    X&) & & & & !e./ ! ! ! X!" " " "    X
 %= %Y?O5P % % % ^%   B# B B B B B B B B B BrX   c                   P     e 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 )MatchInfoErrorrQ   r^   Nc                 ~    || _         t                                          i t          | j                              d S r`   )
_exceptionr   re   SystemRouterd   rQ   r   s     rY   re   zMatchInfoError.__init__9  s4    ([99:::::rX   c                     | j         S r`   )r   rg   s    rY   rQ   zMatchInfoError.http_exception=  
    rX   c                 V    d                     | j        j        | j        j                  S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrg   s    rY   r   zMatchInfoError.__repr__A  s)    (//O"DO$:
 
 	
rX   )
rR   rS   rT   r(   re   r   rQ   rU   r   r   r   s   @rY   r   r   8  s        ;} ; ; ; ; ; ; ;     X
# 
 
 
 
 
 
 
 
rX   r   ro   r^   c                   K   | j                             t          j        d          }| j        t
          k    rM|                                dk    r"| j                            d           d{V  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

NzUnknown Expect: %s)text)
headersgetr    EXPECTversionr%   lowerwriterwriter)   )ro   expects     rY   r   r   G  s       _  b11F-''<<>>^++.&&'GHHHHHHHHHHH'-AF-JKKKK	 ('rX   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 )r5   Nr\   r]   r^   c                Z    t                                          |           g | _        d S )Nr\   )r   re   _routes)rd   r]   r   s     rY   re   zResource.__init__V  s)    d###,.rX   r   r   r   r   r9   c                    | j         D ]E}|j        |k    s|j        t          j        k    r#t	          d                    |                    Ft          ||| |          }|                     |           |S )NzOAdded route will never be executed, method {route.method} is already registered)r   r   )r   r   r    METH_ANYr   r   r9   register_route)rd   r   r   r   	route_objs        rY   	add_routezResource.add_routeZ  s      	 	I6))Y-=-N-N"!!'i!8!8   .O "&'4WWW	I&&&rX   r   c                 ~    t          |t                    sJ d|            | j                            |           d S )Nz)Instance of Route class is required, got )r   r9   r   appendrd   r   s     rY   r   zResource.register_routen  s[    =
 
 	A 	A@u@@	A 	A 	A 	E"""""rX   ro   c                   K   t                      }|                     |j        j                  }|d |fS | j        D ]M}|j        }|                    |           ||j        k    s|t          j        k    rt          ||          |fc S Nd |fS r`   )
set_matchrel_urlraw_pathr   r   addr    r   r3   )rd   ro   allowed_methodsr   r   route_methods         rY   rr   zResource.resolvet  s      $'EE[[!9::
(( 	) 	)I$+L---w~--1N1N+J	BBOTTTT 2O ((rX   rG   c                     d S r`   rW   r}   s     rY   r   zResource._match  s    rX   c                 *    t          | j                  S r`   lenr   rg   s    rY   __len__zResource.__len__      4<   rX   c                 *    t          | j                  S r`   )iterr   rg   s    rY   __iter__zResource.__iter__  s    DL!!!rX   )r   r9   r^   N)rR   rS   rT   r   rU   re   r   r   r#   r&   r   r   r   r.   r   rr   r   r   r   r   intr  r   r	  r   r   s   @rY   r5   r5   U  si       04 / / / / / / / / / / 48   tL)723
 !0 
   (# # # #)W ) ) ) ) )  	3 8DcN#;    ! ! ! ! !"(?3 " " " " " " " "rX   r5   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 )r6   Nr\   rG   r]   r^   c                    t                                          |           |r|                    d          sJ || _        d S )Nr\   rB   )r   re   
startswith_path)rd   rG   r]   r   s      rY   re   zPlainResource.__init__  sF    d###/4??3/////


rX   c                     | j         S r`   r  rg   s    rY   rj   zPlainResource.canonical  rh   rX   c                 &    | j         s	d| _         d S d S )NrB   r  rg   s    rY   r{   zPlainResource.freeze  s!    z 	DJJJ	 	rX   rK   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        d S NrB   r   )r  endswithr  r  ru   s     rY   rv   zPlainResource.add_prefix  sY      %%%%%??3'''''6{{Qdj(


rX   c                      | j         |k    ri S d S r`   r  r}   s     rY   r   zPlainResource._match  s    :I4rX   c                     | j         |k    S r`   r  r}   s     rY   r~   zPlainResource.raw_match  s    zT!!rX   c                     d| j         iS )NrG   r  rg   s    rY   ry   zPlainResource.get_info  s    
##rX   c                 8    t          j        | j        d          S NTrG   encoded)r   buildr  rg   s    rY   rn   zPlainResource.url_for  s    ydj$7777rX   c                 J    | j         d| j         z   dz   nd}d| d| j         dS )N'' r   z<PlainResource  r   )r]   r  rc   s     rY   r   zPlainResource.__repr__  s9    )-)>sTY%%B555
5555rX   r   )rR   rS   rT   rU   r   re   r   rj   r{   rv   r   r   r   r~   rF   ry   r   rn   r   r   r   s   @rY   r6   r6     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 6rX   r6   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 )r7   z#\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*)\}z.\{(?P<var>[_a-zA-Z][_a-zA-Z0-9]*):(?P<re>.+)\}z[^{}/]+Nr\   rG   r]   r^   c                   t                                          |           d}d}t                              |          D ]}| j                            |          }|rP|d                    |                    d          | j                  z  }|d|                    d          z   dz   z  }o| j	                            |          }|rA| dj        di |
                                z  }|d|                    d          z   dz   z  }d|v sd|v rt          d| d	| d
          t          |          }||z  }|t          j        |          z  }	 t          j        |          }n-# t          j        $ r}t          d| d|           d d }~ww xY w|j                            t&                    sJ |                    d          sJ || _        || _        d S )Nr\   r   z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rB   rW   )r   re   rA   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrI   r  rC   _pattern
_formatter)
rd   rG   r]   rI   rH   partr   compiledexcr   s
            rY   re   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   E/ /F>FFc                     | j         S r`   r3  rg   s    rY   rj   zDynamicResource.canonical  r   rX   rK   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.  r0  r/  r2  rI   r3  ru   s     rY   rv   zDynamicResource.add_prefix  s~      %%%%%??3'''''6{{Q
29V#4#4t}7L#LMM 4?2rX   c                     | j                             |          }|d S d |                                                                D             S )Nc                 4    i | ]\  }}|t          |          S rW   )_unquote_path).0keyvalues      rY   
<dictcomp>z*DynamicResource._match.<locals>.<dictcomp>  s3       .8c5]5))  rX   )r2  r(  r,  items)rd   rG   r   s      rY   r   zDynamicResource._match  sX    ''--=4 <AOO<M<M<S<S<U<U   rX   c                     | j         |k    S r`   r8  r}   s     rY   r~   zDynamicResource.raw_match  s    $&&rX   c                      | j         | j        dS )N)rH   rI   )r3  r2  rg   s    rY   ry   zDynamicResource.get_info  s    !_GGGrX   partsc                     | j                             d |                                D                       }t          j        |d          S )Nc                 4    i | ]\  }}|t          |          S rW   )_quote_path)r=  kvs      rY   r@  z+DynamicResource.url_for.<locals>.<dictcomp>  s$    )V)V)V1![^^)V)V)VrX   Tr  )r3  
format_maprA  r   r  )rd   rD  urls      rY   rn   zDynamicResource.url_for  sC    o(()V)V)V)V)VWWyc40000rX   c                 f    | j         d| j         z   dz   nd}d                    || j                  S )Nr  r  r   z$<DynamicResource {name} {formatter}>)r]   rH   )r]   r   r3  rc   s     rY   r   zDynamicResource.__repr__  sB    )-)>sTY%%B5<< = 
 
 	
rX   )rR   rS   rT   r.  r0  r'  r+  r*  rU   r   re   r   rj   rv   r   r   r   r~   rF   ry   r   rn   r   r   r   s   @rY   r7   r7     s       
"*;
<
<C"*NOOKD;? $ $ $S $8C= $D $ $ $ $ $ $B 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
# 
 
 
 
 
 
 
 
rX   r7   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\   rK   r]   r^   c                   |r|                     d          s
J |            |dv s|                    d          r
J |            t                                          |           t	          |          | _        | j        dz   | _        d S )NrB   )r   rB   r\   )r  r  r   re   r-  _prefix_prefix2)rd   rK   r]   r   s      rY   re   zPrefixResource.__init__  s    ;V..s33;;V;;;""&//#*>*>"""""d###$V,,s*rX   c                     | j         S r`   )rP  rg   s    rY   rj   zPrefixResource.canonical  r   rX   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        | j        dz   | _        d S r  )r  r  r  rP  rQ  ru   s     rY   rv   zPrefixResource.add_prefix  sg      %%%%%??3'''''6{{Q,s*rX   c                     dS r   rW   ru   s     rY   r~   zPrefixResource.raw_match  s    urX   )rR   rS   rT   rU   r   re   r   rj   rv   r   r~   r   r   s   @rY   rN  rN    s        =A + + +s +Xc] +d + + + + + + 3    X+ + + + + +         rX   rN  c                   2    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fdZ xZ S ) r:   rI  N   Fr]   r   
chunk_size
show_indexfollow_symlinksappend_versionrK   rJ   r]   r   rX  rY  rZ  r[  r^   c                   t                                          ||           	 t          |          }t          |                              d          r9t          t
          j                            t          |                              }|                                }|	                                st          d          n-# t          t          f$ r}	t          d| d          |	d }	~	ww xY w|| _        || _        || _        || _        || _        || _        t%          d| j        | |          t%          d| j        | |          d	| _        d S )
Nr\   ~zNot a directoryzNo directory exists at 'r  GETr   HEAD)r^  r_  )r   re   r   rU   r  osrG   
expanduserrr   is_dirr   FileNotFoundError
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr9   _handler   )rd   rK   rJ   r]   r   rX  rY  rZ  r[  r1  r   s             rY   re   zStaticResource.__init__"  so    	d+++	QYI9~~((-- E !3!3C	NN!C!CDD	!))++I##%% 4 !23334!:. 	Q 	Q 	QD	DDDEE5P	Q#%% /-- !t|T.   "d>  	
 
s   B!C C2C--C2)r[  filenamec                   || j         }t          |                              d          }t          j        | j        d          }t          dk     r||                    dd          z  }n||z  }|rM| j        	                    |          }	 | j
        r[t          t          j                            |                    }|                    | j                   |                                }n.|                                }|                    | j                   n# t"          t$          f$ r |cY S w xY w|                                rt|                    d          5 }|                                }d d d            n# 1 swxY w Y   |                     |          }	|                    | j        |	i          }|S |S )NrB   Tr  r      %%25rb)rh  rU   lstripr   r  rP  r?   replacerd  joinpathrg  r   r`  rG   normpathrelative_torr   r   rc  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rd   rj  r[  rK  unresolved_pathnormalized_pathfilepathf
file_byteshs
             rY   rn   zStaticResource.url_forH  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      rY   ry  zStaticResource._get_file_hashq  sK    N	&qxxzz22zz'"""rX   c                 ,    | j         | j        | j        dS )N)rJ   rK   rL   )rd  rP  r   rg   s    rY   ry   zStaticResource.get_infox  s     ll
 
 	
rX   r   c                 v    d| j         v rt          d          t          d|| | j                  | j         d<   d S )NOPTIONSzOPTIONS route was set alreadyr   )r   r   r9   r   )rd   r   s     rY   set_options_routez StaticResource.set_options_route  sK    $$>???"/wT5I#
 #
 #
YrX   ro   c                 d  K   |j         j        }|j        }t          | j                  }|                    | j                  s|| j        k    rd t                      fS ||vrd |fS dt          |t          | j                  dz   d                    i}t          || j        |                   |fS )Nrj  r   )r   r   r   r   r   r  rQ  rP  r<  r  r3   )rd   ro   rG   r   r   r   s         rY   rr   zStaticResource.resolve  s      'dl++t}-- 	$$,2F2F;(((( -S5F5F5J5L5L0M"N"NO
#JV0DEEWWrX   c                 *    t          | j                  S r`   r  rg   s    rY   r  zStaticResource.__len__  r  rX   c                 N    t          | j                                                  S r`   )r  r   valuesrg   s    rY   r	  zStaticResource.__iter__  s    DL''))***rX   c                   K   |j         d         }	 t          |          }|j        rt                      | j                            |          }| j        r[t          t          j        	                    |                    }|
                    | j                   |                                }n.|                                }|
                    | j                   nm# t          t          f$ r}t                      |d }~wt          $ r  t          $ r3}|j        j                            |           t                      |d }~ww xY w|                                rV| j        rA	 t+          |                     |          d          S # t.          $ r t                      w xY wt                      |                                rt3          || j                  S t          )Nrj  z	text/html)r   content_type)rX  )
match_infor   anchorr*   rd  rs  rg  r`  rG   rt  ru  rr   r   rc  r,   	ExceptionrM   logger	exceptionrb  re  r/   _directory_as_htmlPermissionErrorrv  r-   rf  )rd   ro   r   rj  r|  r}  r~  r1  s           rY   ri  zStaticResource._handle  s     $Z0	,G}}H & $oo%"o66x@@O$ 6"&rw'7'7'H'H"I"I++DO<<<*2244*2244$$T_555-. 	, 	, 	,..e+ 	 	 	 	, 	, 	,K((///..e+	, ?? 	 &*#!44X>>[    ' * * *'//)* $oo% 	T5EFFFFs0   CC   E
1D  E
.EE
)#F F&r~  c           	         |                                 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 )Nz
Index of /z<h1>z</h1>rB   z<li><a href="z">z	</a></li>z<ul>
{}
</ul>
z<body>
z
</body>z<head>
<title>z</title>
</head>z<html>
z
</html>)rb  ru  rd  as_posixhtml_escapeiterdirsortedrG  rP  r]   r   r   join)rd   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                  rY   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rX   c                 r    | j         d| j         z   dz   nd}d                    || j        | j                  S )Nr  r   z/<StaticResource {name} {path} -> {directory!r}>)r]   rG   rJ   )r]   r   rP  rd  rc   s     rY   r   zStaticResource.__repr__  sG    (,	(=sTY$$2@GGDLDO H 
 
 	
rX   )!rR   rS   rT   r{  rU   r'   r   r   r
  r   re   r   rn   staticmethodbytesry  rF   ry   r&   r  r.   r   rr   r  r   r8   r	  r0   ri  r   r  r   r   r   s   @rY   r:   r:     s7       K #37$  %$$
 $
 $
$
 $

 sm$
 !0$
 $
 $
 $
 $
 
$
 $
 $
 $
 $
 $
T *.	' ' ' ' !	'
 
' ' ' 'R #5 #S # # # \#
) 
 
 
 

 
T 
 
 
 
XW X X X X X! ! ! ! !+(=1 + + + +)W ) ) ) ) )V 4  C        D
# 
 
 
 
 
 
 
 
rX   r:   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	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 )PrefixedSubAppResourcerK   rM   r<   r^   Nc                     t                                          |           || _        |j                                        D ]}|                    |           d S r`   )r   re   _approuter	resourcesrv   )rd   rK   rM   r   r   s       rY   re   zPrefixedSubAppResource.__init__  s`       	
,,.. 	( 	(H''''	( 	(rX   c                     t                                          |           | j        j                                        D ]}|                    |           d S r`   )r   rv   r  r  r  )rd   rK   r   r   s      rY   rv   z!PrefixedSubAppResource.add_prefix  s\    6"""	(2244 	( 	(H''''	( 	(rX   r   rl   c                      t          d          )Nz3.url_for() is not supported by sub-application rootr   r   s      rY   rn   zPrefixedSubAppResource.url_for  s    STTTrX   c                      | j         | j        dS )N)rM   rK   )r  rP  rg   s    rY   ry   zPrefixedSubAppResource.get_info  s    yDL999rX   ro   c                   K   |j         j                            | j                  s%|j         j        | j        k    rd t                      fS | j        j                            |           d {V }|	                    | j                   t          |j        t                    r|j        j        }nt                      }||fS r`   )rK  r   r  rQ  rP  r   r  r  rr   r   r   rQ   r+   r   rd   ro   r  methodss       rY   rr   zPrefixedSubAppResource.resolve  s      $//>>	$44;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rX   c                 X    t          | j        j                                                  S r`   )r  r  r  rL   rg   s    rY   r  zPrefixedSubAppResource.__len__  s!    49#**,,---rX   c                 X    t          | j        j                                                  S r`   )r  r  r  rL   rg   s    rY   r	  zPrefixedSubAppResource.__iter__  s!    DI$++--...rX   c                 D    d                     | j        | j                  S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rK   rM   )r   rP  r  rg   s    rY   r   zPrefixedSubAppResource.__repr__  s)    =DD<TY E 
 
 	
rX   )rR   rS   rT   rU   re   rv   r   rn   rF   ry   r.   r   rr   r
  r  r   r8   r	  r   r   r   s   @rY   r  r    sA       (s ( (4 ( ( ( ( ( (( ( ( ( ( ( ( (
US UC UC U U U U:) : : : :#W # # # # #. . . . ./(=1 / / / /
# 
 
 
 
 
 
 
 
rX   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 )rO   ro   r^   c                 
   K   dS )z1Return bool if the request satisfies the criteriaNrW   rq   s     rY   r   zAbstractRuleMatching.match  rs   rX   c                     dS rx   rW   rg   s    rY   ry   zAbstractRuleMatching.get_info  rk   rX   c                     dS )zReturn a strNrW   rg   s    rY   rj   zAbstractRuleMatching.canonical"  rk   rX   N)rR   rS   rT   r   r   r.   r   r   rF   ry   r   rU   rj   rW   rX   rY   rO   rO     s        @7 @t @ @ @ @ 	J) J J J J 3     X  rX   rO   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}(?<!-)rN   r^   Nc                 |    t                                                       |                     |          | _        d S r`   )r   re   
validation_domain)rd   rN   r   s     rY   re   zDomain.__init__+  s0    v..rX   c                     | j         S r`   r  rg   s    rY   rj   zDomain.canonical/  r   rX   c                     t          |t                    st          d          |                    d                                          }|st          d          d|v rt          d          t          d|z             }|j        J t           fd|j        	                    d          D                       st          d          |j
        d	k    r|j        S |j         d
|j
         S )NzDomain must be strr=   zDomain cannot be emptyz://zScheme not supportedzhttp://c              3   L   K   | ]}j                             |          V  d S r`   )re_partr(  )r=  xrd   s     rY   	<genexpr>z$Domain.validation.<locals>.<genexpr>=  s3      NN4<))!,,NNNNNNrX   zDomain not validP   :)r   rU   	TypeErrorrstripr   r   r   raw_hostallr&  port)rd   rN   rK  s   `  rY   r  zDomain.validation3  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>><,+++++rX   ro   c                    K   |j                             t          j                  }|sdS |                     |          S r   )r   r   r    HOSTmatch_domain)rd   ro   hosts      rY   r   zDomain.matchC  s>      ""49-- 	5  &&&rX   r  c                 <    |                                 | j        k    S r`   )r   r  rd   r  s     rY   r  zDomain.match_domainI  s    zz||t|++rX   c                     d| j         iS )NrN   r  rg   s    rY   ry   zDomain.get_infoL  s    $,''rX   )rR   rS   rT   r.  r0  r  rU   re   r   rj   r  r.   r   r   r  rF   ry   r   r   s   @rY   r  r  (  s       bj566G/s /t / / / / / / 3    X, , , , , , '7 't ' ' ' ', , , , , ,() ( ( ( ( ( ( ( (rX   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}(?<!-)rN   r^   Nc                     t                                          |           | j                            dd                              dd          }t	          j        |          | _        d S )Nr=   z\.*z.*)r   re   r  rr  r.  r0  _mask)rd   rN   maskr   s      rY   re   zMaskDomain.__init__S  sW       |##C//77TBBZ%%


rX   c                     | j         j        S r`   )r  rI   rg   s    rY   rj   zMaskDomain.canonicalX  s    z!!rX   r  c                 :    | j                             |          d uS r`   )r  r(  r  s     rY   r  zMaskDomain.match_domain\  s    z##D))55rX   )rR   rS   rT   r.  r0  r  rU   re   r   rj   r   r  r   r   s   @rY   r  r  P  s        bj788G&s &t & & & & & &
 "3 " " " X"6 6 6 6 6 6 6 6 6 6rX   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 )MatchedSubAppResourcerP   rM   r<   r^   Nc                 d    t                               |            d| _        || _        || _        d S )Nr   )r4   re   rP  r  _rule)rd   rP   rM   s      rY   re   zMatchedSubAppResource.__init__a  s/    !!$'''	


rX   c                     | j         j        S r`   )r  rj   rg   s    rY   rj   zMatchedSubAppResource.canonicalg  s    z##rX   c                      | j         | j        dS )N)rM   rP   )r  r  rg   s    rY   ry   zMatchedSubAppResource.get_infok  s    y$*555rX   ro   c                 V  K   | j                             |           d {V sd t                      fS | j        j                            |           d {V }|                    | j                   t          |j        t                    r|j        j
        }nt                      }||fS r`   )r  r   r   r  r  rr   r   r   rQ   r+   r   r  s       rY   rr   zMatchedSubAppResource.resolven  s      Z%%g........ 	;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rX   c                 8    d                     | j                  S )Nz"<MatchedSubAppResource -> {app!r}>)rM   )r   r  rg   s    rY   r   zMatchedSubAppResource.__repr__y  s    6==$)=LLLrX   )rR   rS   rT   rO   re   r   rU   rj   rF   ry   r.   r   rr   r   rW   rX   rY   r  r  `  s        1  $     $3 $ $ $ X$6) 6 6 6 6	#W 	# 	# 	# 	# 	#M# M M M M M MrX   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 )r9   zA route with resourceNr   r   r   r   r   r^   c                R    t                                          ||||           d S )Nr   )r   re   )rd   r   r   r   r   r   s        rY   re   zResourceRoute.__init__  s9     	GNX 	 	
 	
 	
 	
 	
rX   c                 P    d                     | j        | j        | j                  S )Nz3<ResourceRoute [{method}] {resource} -> {handler!r})r   r   r   )r   r   r   r   rg   s    rY   r   zResourceRoute.__repr__  s-    DKK; L 
 
 	
rX   c                 ,    | j         d S | j         j        S r`   )r   r]   rg   s    rY   r]   zResourceRoute.name  s    >!4~""rX   r   rl   c                 8    | j         J  | j         j        |i |S )r   )r   rn   r   s      rY   rn   zResourceRoute.url_for  s*    ~)))%t~%t6v666rX   c                 F    | j         J | j                                         S r`   )r   ry   rg   s    rY   ry   zResourceRoute.get_info  s$    ~)))~&&(((rX   )rR   rS   rT   __doc__rU   r   r&   r   r#   r4   r   r   re   r   r   r]   r   rn   rF   ry   r   r   s   @rY   r9   r9   }  s         48

 

 



 w\ 223

 #	

 !0

 


 

 

 

 

 


# 
 
 
 

 #hsm # # # X#
7S 7C 7C 7 7 7 7
)) ) ) ) ) ) ) ) )rX   r9   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   rQ   r^   Nc                 x    t                                          t          j        | j                   || _        d S r`   )r   re   r    r   ri  _http_exceptionr   s     rY   re   zSystemRoute.__init__  s/    555-rX   r   rl   c                      t          d          )Nz).url_for() is not allowed for SystemRouter  r   s      rY   rn   zSystemRoute.url_for  s    FGGGrX   c                     d S r`   rW   rg   s    rY   r]   zSystemRoute.name  r   rX   c                     d| j         iS )NrQ   r  rg   s    rY   ry   zSystemRoute.get_info  s     $"677rX   ro   c                    K   | j         r`   r  rq   s     rY   ri  zSystemRoute._handle  s      ""rX   c                     | j         j        S r`   )r  r   rg   s    rY   r   zSystemRoute.status      #**rX   c                     | j         j        S r`   )r  r   rg   s    rY   r   zSystemRoute.reason  r  rX   c                 .    d                     |           S )Nz*<SystemRoute {self.status}: {self.reason}>rg   )r   rg   s    rY   r   zSystemRoute.__repr__  s    ;BBBMMMrX   )rR   rS   rT   r(   re   rU   r   rn   r   r   r]   rF   ry   r.   r0   ri  r
  r   r   r   r   r   s   @rY   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rX   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;   r^   c                 6  K   | j         j        t          j        vr|                                  t          | | j         j                                        d           }||                                   |             d {V }t          |t                    sJ |S r`   )	ro   r   r    METH_ALL_raise_allowed_methodsgetattrr   r   r0   )rd   r   rets      rY   _iterz
View._iter  s      <dm33'')))t|288::DAA>'')))FHHnnnnnn#~.....
rX   Nc                 N    |                                                                  S r`   )r  	__await__rg   s    rY   r  zView.__await__  s    zz||%%'''rX   c                 h      fdt           j        D             }t           j        j        |          )Nc                 X    h | ]&}t          |                                          $|'S rW   )hasattrr   )r=  r  rd   s     rY   	<setcomp>z.View._raise_allowed_methods.<locals>.<setcomp>  s0    PPPwtQWWYY7O7OP1PPPrX   )r    r	  r+   ro   r   )rd   r   s   ` rY   r
  zView._raise_allowed_methods  s3    PPPPdmPPP"4<#6HHHrX   )
rR   rS   rT   r0   r  r   r   r  r   r
  rW   rX   rY   r;   r;     sx        	^ 	 	 	 	(9S$%>? ( ( ( (I I I I I I IrX   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  r^   Nc                     || _         d S r`   
_resources)rd   r  s     rY   re   zResourcesView.__init__  s    #rX   c                 *    t          | j                  S r`   )r  r  rg   s    rY   r  zResourcesView.__len__  s    4?###rX   c              #   $   K   | j         E d {V  d S r`   r  rg   s    rY   r	  zResourcesView.__iter__  s&      ?"""""""""rX   r   c                     || j         v S r`   r  rd   r   s     rY   __contains__zResourcesView.__contains__  s    4?**rX   )rR   rS   rT   r   r4   re   r
  r  r   r	  objectr   r  rW   rX   rY   r  r    s        $$'7"8 $T $ $ $ $$ $ $ $ $#(#34 # # # #+V + + + + + + +rX   r  c                   Z    e Zd Zdee         fdZdefdZdee	         fdZ
dedefdZdS )	
RoutesViewr  c                 \    g | _         |D ]!}|D ]}| j                             |           "d S r`   )r   r   )rd   r  r   r   s       rY   re   zRoutesView.__init__  sO    ,.! 	+ 	+H! + +##E****+	+ 	+rX   r^   c                 *    t          | j                  S r`   r  rg   s    rY   r  zRoutesView.__len__  r  rX   c              #   $   K   | j         E d {V  d S r`   r   rg   s    rY   r	  zRoutesView.__iter__  s&      <rX   r   c                     || j         v S r`   r$  r   s     rY   r  zRoutesView.__contains__  s    $$rX   N)rR   rS   rT   r   r4   re   r
  r  r   r8   r	  r  r   r  rW   rX   rY   r   r     s        +$'7"8 + + + +! ! ! ! ! (=1        %& %T % % % % % %rX   r   c                       e Zd Z ej        d          Zd1 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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+Z-deded"e'de#fd,Z.dede e!         d"e'de#fd-Z/d1 fd.Z0d/e1e2         de3e#         fd0Z4 xZ5S )2r2   z[.:-]r^   Nc                 d    t                                                       g | _        i | _        d S r`   )r   re   r  _named_resourcesr   s    rY   re   zUrlDispatcher.__init__  s.    24=?rX   ro   c                 
  K   |j         }t                      }| j        D ]+}|                    |           d {V \  }}||c S ||z  },|rt	          t          ||                    S t	          t                                S r`   )r   r   r  rr   r   r+   r,   )rd   ro   r   r   r   r   alloweds          rY   rr   zUrlDispatcher.resolve  s      $'EE 	+ 	+H(0(8(8(A(A"A"A"A"A"A"AJ%!!!!7* 	2!"6v"O"OPPP!,..111rX   c                 *    t          | j                  S r`   )r  r(  rg   s    rY   r	  zUrlDispatcher.__iter__  s    D)***rX   c                 *    t          | j                  S r`   )r  r(  rg   s    rY   r  zUrlDispatcher.__len__  s    4()))rX   r   c                     || j         v S r`   r(  r  s     rY   r  zUrlDispatcher.__contains__  s    4000rX   r]   c                     | j         |         S r`   r.  rc   s     rY   __getitem__zUrlDispatcher.__getitem__  s    $T**rX   c                 *    t          | j                  S r`   )r  r  rg   s    rY   r  zUrlDispatcher.resources  s    T_---rX   c                 *    t          | j                  S r`   )r   r  rg   s    rY   rL   zUrlDispatcher.routes  s    $/***rX   c                 *    t          | j                  S r`   )r   r(  rg   s    rY   named_resourceszUrlDispatcher.named_resources  s     5666rX   c                 6   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                            |           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   r4   frozenr   r]   NAME_SPLIT_REr&  keyword	iskeywordr   isidentifierr   r(  r  r   )rd   r   r]   rD  r4  s        rY   register_resourcezUrlDispatcher.register_resource   sp   &
 
 	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(((((rX   r\   rG   c                   |r$|                     d          st          d          | j        rB| j        d         }|j        |k    r*|                    |          rt          t          |          S d|v sSd|v sOt                              |          s5t          t          |          |          }|                     |           |S t          ||          }|                     |           |S )NrB   z)path should be started with / or be emptyr$  r%  r\   )r  r   r  r]   r~   r   r5   rA   searchr6   r-  r;  r7   )rd   rG   r]   r   s       rY   add_resourcezUrlDispatcher.add_resourceA  s     	J,, 	JHIII? 	0r*H}$$););D)A)A$Hh///tsd{{hood.C.C{$]4%8%8tDDDH""8,,,O"4d333x(((rX   )r]   r   r   r   r   c                `    |                      ||          }|                    |||          S )Nr\   r   )r?  r   )rd   r   rG   r   r]   r   r   s          rY   r   zUrlDispatcher.add_routeQ  s7     $$T$55!!&'.!QQQrX   rV  FrW  rK   rX  rY  rZ  r[  c          
          |                     d          sJ |                    d          r
|dd         }t          ||||||||          }	|                     |	           |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        rB   Nr=  rW  )r  r  r:   r;  )
rd   rK   rG   r]   r   rX  rY  rZ  r[  r   s
             rY   
add_staticzUrlDispatcher.add_static]  s    $   %%%%%??3 	!CRC[F!)!!+)	
 	
 	
 	x(((rX   rl   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method HEAD.)r   r    	METH_HEADrd   rG   r   rl   s       rY   add_headzUrlDispatcher.add_head  "    t~dndGFFvFFFrX   c                 6     | j         t          j        ||fi |S )z+Shortcut for add_route with method OPTIONS.)r   r    METH_OPTIONSrE  s       rY   add_optionszUrlDispatcher.add_options  s#    t~d/wII&IIIrX   T)r]   
allow_headrK  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\   )r?  r   r    rD  METH_GET)rd   rG   r   r]   rK  rl   r   s          rY   add_getzUrlDispatcher.add_get  sc     $$T$55 	BHt~wAA&AAA!x!$-CCFCCCrX   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method POST.)r   r    	METH_POSTrE  s       rY   add_postzUrlDispatcher.add_post  rG  rX   c                 6     | j         t          j        ||fi |S )z'Shortcut for add_route with method PUT.)r   r    METH_PUTrE  s       rY   add_putzUrlDispatcher.add_put  s"    t~dmT7EEfEEErX   c                 6     | j         t          j        ||fi |S )z)Shortcut for add_route with method PATCH.)r   r    
METH_PATCHrE  s       rY   	add_patchzUrlDispatcher.add_patch  s"    t~dotWGGGGGrX   c                 6     | j         t          j        ||fi |S )z*Shortcut for add_route with method DELETE.)r   r    METH_DELETErE  s       rY   
add_deletezUrlDispatcher.add_delete  s#    t~d.gHHHHHrX   c                 6     | j         t          j        ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r   r    r   rE  s       rY   add_viewzUrlDispatcher.add_view  s$     t~dmT7EEfEEErX   c                     t                                                       | j        D ]}|                                 d S r`   )r   r{   r  )rd   r   r   s     rY   r{   zUrlDispatcher.freeze  sE     	 	HOO	 	rX   rL   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)rd   rL   registered_routes	route_defs       rY   
add_routeszUrlDispatcher.add_routes  sD      	? 	?I$$Y%7%7%=%=>>>>  rX   r   )6rR   rS   rT   r.  r0  r7  re   r.   r3   rr   r   rU   r	  r
  r  r  r   r  r4   r0  r  r  r   rL   r   r4  r;  r   r5   r?  r   r&   r   r#   r   r8   r   r'   rB  r   rF  rJ  rN  rQ  rT  rW  rZ  r\  r{   r   r1   r   rc  r   r   s   @rY   r2   r2     s       BJx((M@ @ @ @ @ @
2W 21D 2 2 2 2 +(3- + + + +* * * * *1V 1 1 1 1 1+ +(8 + + + +.= . . . .+
 + + + +7.>)>!? 7 7 7 7)*: )t ) ) ) )B @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 
! 
! 
! 
! 
! 
! 
! 
!rX   r2   r?  c                 z    t           dk     r|                     dd          } t          j        | d          j        S )Nrl  rn  ro  Fr  )r?   rr  r   r  r   r?  s    rY   rG  rG    s8    fc5))9%///88rX   c                 8    t          j        | d          j        S r  )r   r  rG   re  s    rY   r<  r<    s    9%...33rX   c                 X    t          |           }d| v r|                    dd          }|S )Nrn  ro  )rG  rr  )r?  r   s     rY   r-  r-    s2     F
e||s++MrX   )wr   r   r  	functoolsr  r  r   r8  r`  r.  r   
contextlibr   r   pathlibr   typesr   typingr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   yarlr   r   yarl_versionr   r    r!   r"   r#   helpersr$   httpr%   typedefsr&   r'   web_exceptionsr(   r)   r*   r+   r,   web_fileresponser-   web_requestr.   web_responser/   r0   web_routedefr1   __all__web_appr<   rU   BaseDictdictr   mapr
  r&  r?   rV   r0  r@   rA   r/  rC   r   r   partialr  rF   r4   ABCr8   r3   r   r   r5   r6   r7   rN  r:   r  rO   r  r  r  r9   r   r;   r  r   r2   rG  r<  r-  rW   rX   rY   <module>r~     s   




           				 				  % % % % % %             " " " " " "                                               2 2 1 1 1 1 1 1 1       @ @ @ @ @ @ @ @ @ @             ' ' ' ' ' ' ' '              + * * * * *             2 2 2 2 2 2 2 2 * * * * * *  $$$$$$CH~HHH',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 ,/ ,/ ,/^N3 N3 N3 N3 N3CG N3 N3 N3b@B @B @B @B @B($5 @B @B @BF
 
 
 
 
( 
 
 
L7 Lt L L L L7" 7" 7" 7" 7" 7" 7" 7"x&6 &6 &6 &6 &6H &6 &6 &6RI
 I
 I
 I
 I
h I
 I
 I
X    %   2K
 K
 K
 K
 K
^ K
 K
 K
\)
 )
 )
 )
 )
^ )
 )
 )
X    37   %( %( %( %( %(! %( %( %(P6 6 6 6 6 6 6 6 M M M M M2 M M M:!) !) !) !) !)M !) !) !)HN N N N N- N N N<I I I I I< I I I(+ + + + +E8$45yAQ7R + + +% % % % %/=1I % % %"M! M! M! M! M!NGC1A,A$B M! M! M!`9s 9s 9 9 9 94 4 4 4 4 4       rX   