
    `ey                     D   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	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.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eLZK eM eNeO e+jP        d          dd                             ZQee#eOdf                  eRd<    ejS        d          ZTee eJ                  eRd<    ejS        d          ZUee eJ                  eRd<    ejV        d          ZWeeJ         eRd<   eeAgeeeD                  f         ZXe#ed         e!eJ         f         ZY G d  d!e%d"#          ZZ G d$ d%e"ed&                   Z[ G d' d&e j\                  Z] G d( deKe.          Z^ G d) d*e^          Z_d+eAd,dfd-Z` G d. d/e[          Za G d0 d1ea          Zb G d2 d3ea          Zc G d4 d5e[          Zd G d6 d7ed          Ze G d8 d9ed          Zf G d: d;e j\                  Zg G d< d=eg          Zh G d> d?eh          Zi G d@ dAef          Zj G dB dCe]          Zk G dD dEe]          Zl G dF dGe0          Zm G dH dIe"ee[         ee[                   Zn G dJ dKe"ee]         ee]                   Zo G dL dMe/eeJe[f                   ZpdNeJd,eJfdOZqdNeJd,eJfdPZrdNeJd,eJfdQZsdS )R    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   c                       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(        9lib/python3.11/site-packages/aiohttp/web_urldispatcher.pyrE   rE   ^   s         
IIINNNS\OOOKKKC())))	KKK
    !!!!!!rW   rE   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     rX   __init__zAbstractResource.__init__r   s    


rW   c                     | j         S r_   r`   rc   s    rX   r\   zAbstractResource.nameu   
    zrW   c                     dS )zWExposes the resource's canonical path.

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

        NrV   rf   s    rX   	canonicalzAbstractResource.canonicaly         rW   kwargsc                     dS )z2Construct url for resource with additional params.NrV   )rc   rk   s     rX   url_forzAbstractResource.url_for   rj   rW   requestc                 
   K   dS )zWResolve resource.

        Return (UrlMappingMatchInfo, allowed_methods) pair.
        NrV   rc   rn   s     rX   resolvezAbstractResource.resolve   
        rW   rJ   c                     dS )zWAdd a prefix to processed URLs.

        Required for subapplications support.
        NrV   rc   rJ   s     rX   
add_prefixzAbstractResource.add_prefix   rj   rW   c                     dS z;Return a dict with additional info useful for introspectionNrV   rf   s    rX   get_infozAbstractResource.get_info   rj   rW   c                     d S r_   rV   rf   s    rX   freezezAbstractResource.freeze   s    rW   rF   c                     dS )z Perform a raw match against pathNrV   rc   rF   s     rX   	raw_matchzAbstractResource.raw_match   rj   rW   r]   N)rQ   rR   rS   r   rT   rd   propertyr\   abcabstractmethodri   r   rm   r.   _Resolverq   ru   rE   rx   rz   boolr}   rV   rW   rX   r4   r4   q   s       04         hsm    X 3     X 	A A A A A A 	W      	      	J) J J J J    	/c /d / / / / / /rW   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 onesrn   r]   c                    K    |           }t          j        |          r| d {V }t          |t                    sJ |S r_   )asyncioiscoroutine
isinstancer0   )rn   resultold_handlers     rX   handler_wrapperz/AbstractRoute.__init__.<locals>.handler_wrapper   sU      $W--&v.. *#)\\\\\\F!&.99999rW   )_default_expect_handlerr   iscoroutinefunctionupperr@   match
ValueErrorcallableinspectisgeneratorfunctionwarningswarnDeprecationWarningr   type
issubclassr#   r   r.   r0   _method_handler_expect_handler	_resource)rc   r   r   r   r   r   r   s         @rX   rd   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-!rW   c                     | j         S r_   )r   rf   s    rX   r   zAbstractRoute.method   
    |rW   c                     | j         S r_   )r   rf   s    rX   r   zAbstractRoute.handler   s
    }rW   c                     dS )z8Optional route's name, always equals to resource's name.NrV   rf   s    rX   r\   zAbstractRoute.name   rj   rW   c                     | j         S r_   )r   rf   s    rX   r   zAbstractRoute.resource   s
    ~rW   c                     dS rw   rV   rf   s    rX   rx   zAbstractRoute.get_info   rj   rW   argsrk   c                     dS )/Construct url for route with additional params.NrV   rc   r   rk   s      rX   rm   zAbstractRoute.url_for   rj   rW   rn   c                 <   K   |                      |           d {V S r_   )r   rp   s     rX   handle_expect_headerz"AbstractRoute.handle_expect_header   s,      ))'222222222rW   )rQ   rR   rS   rT   r   r&   r   r#   r   _ExpectHandlerr4   rd   r   r   r   r   r   r\   r   rE   rx   r   rm   r.   r0   r   rV   rW   rX   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 3rW   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)superrd   _route_apps_current_app_frozen)rc   r   r   	__class__s      rX   rd   zUrlMappingMatchInfo.__init__   s<    $$$(*
37rW   r]   c                     | j         j        S r_   )r   r   rf   s    rX   r   zUrlMappingMatchInfo.handler   s    {""rW   c                     | j         S r_   )r   rf   s    rX   r   zUrlMappingMatchInfo.route   s
    {rW   c                     | j         j        S r_   )r   r   rf   s    rX   r   z"UrlMappingMatchInfo.expect_handler  s    {//rW   c                     d S r_   rV   rf   s    rX   rP   z"UrlMappingMatchInfo.http_exception      trW   c                 4    | j                                         S r_   )r   rx   rf   s    rX   rx   zUrlMappingMatchInfo.get_info	  s    {##%%%rW   )r<   .c                 *    t          | j                  S r_   )tupler   rf   s    rX   appszUrlMappingMatchInfo.apps  s    TZ   rW   rL   r<   Nc                     | j         rt          d          | j        || _        | j                            d|           d S )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrc   rL   s     rX   add_appzUrlMappingMatchInfo.add_app  sK    < 	PNOOO$ #D
!S!!!!!rW   c                     | j         }|J |S r_   )r   r   s     rX   current_appzUrlMappingMatchInfo.current_app  s    
rW   )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   )rc   rL   prevs      rX   set_current_appz#UrlMappingMatchInfo.set_current_app  s       	$*$$"GNN
C   
  	%EEE $DD$$$$s   
A 	A c                     d| _         d S )NT)r   rf   s    rX   rz   zUrlMappingMatchInfo.freeze-  s    rW   c                 \    dt                                                       d| j         dS )Nz<MatchInfo z: >)r   __repr__r   rc   r   s    rX   r   zUrlMappingMatchInfo.__repr__0  s.    AUWW--//AA4;AAAArW   )rL   r<   r]   N)r]   r<   r~   )rQ   rR   rS   r   rT   r8   rd   r   r&   r   r   r   r   r   r(   rP   rE   rx   r   r   r   r   r   r   r   rz   r   __classcell__r   s   @rX   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rW   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 )MatchInfoErrorrP   r]   Nc                 ~    || _         t                                          i t          | j                              d S r_   )
_exceptionr   rd   SystemRouterc   rP   r   s     rX   rd   zMatchInfoError.__init__5  s4    ([99:::::rW   c                     | j         S r_   )r   rf   s    rX   rP   zMatchInfoError.http_exception9  
    rW   c                 V    d                     | j        j        | j        j                  S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrf   s    rX   r   zMatchInfoError.__repr__=  s)    (//O"DO$:
 
 	
rW   )
rQ   rR   rS   r(   rd   r   rP   rT   r   r   r   s   @rX   r   r   4  s        ;} ; ; ; ; ; ; ;     X
# 
 
 
 
 
 
 
 
rW   r   rn   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)   )rn   expects     rX   r   r   C  s       _  b11F-''<<>>^++.&&'GHHHHHHHHHHH'-AF-JKKKK	 ('rW   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   rd   _routes)rc   r\   r   s     rX   rd   zResource.__init__R  s)    d###,.rW   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)rc   r   r   r   	route_objs        rX   	add_routezResource.add_routeV  s      	 	I6))Y-=-N-N"!!'i!8!8   .O "&'4WWW	I&&&rW   r   c                 ~    t          |t                    sJ d|            | j                            |           d S )Nz)Instance of Route class is required, got )r   r9   r   appendrc   r   s     rX   r   zResource.register_routej  s[    =
 
 	A 	A@u@@	A 	A 	A 	E"""""rW   rn   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   )rc   rn   allowed_methodsr   r   route_methods         rX   rq   zResource.resolvep  s      $'EE[[!9::
(( 	) 	)I$+L---w~--1N1N+J	BBOTTTT 2O ((rW   rF   c                     d S r_   rV   r|   s     rX   r   zResource._match  s    rW   c                 *    t          | j                  S r_   lenr   rf   s    rX   __len__zResource.__len__      4<   rW   c                 *    t          | j                  S r_   )iterr   rf   s    rX   __iter__zResource.__iter__  s    DL!!!rW   )r   r9   r]   N)rQ   rR   rS   r   rT   rd   r   r   r#   r&   r   r   r   r.   r   rq   r   r   r   r   intr  r   r  r   r   s   @rX   r5   r5   Q  si       04 / / / / / / / / / / 48   tL)723
 !0 
   (# # # #)W ) ) ) ) )  	3 8DcN#;    ! ! ! ! !"(?3 " " " " " " " "rW   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[   rF   r\   r]   c                    t                                          |           |r|                    d          sJ || _        d S )Nr[   rB   )r   rd   
startswith_path)rc   rF   r\   r   s      rX   rd   zPlainResource.__init__  sF    d###/4??3/////


rW   c                     | j         S r_   r  rf   s    rX   ri   zPlainResource.canonical  rg   rW   c                 &    | j         s	d| _         d S d S )NrB   r  rf   s    rX   rz   zPlainResource.freeze  s!    z 	DJJJ	 	rW   rJ   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        d S NrB   r   )r  endswithr  r  rt   s     rX   ru   zPlainResource.add_prefix  sY      %%%%%??3'''''6{{Qdj(


rW   c                      | j         |k    ri S d S r_   r  r|   s     rX   r   zPlainResource._match  s    :I4rW   c                     | j         |k    S r_   r  r|   s     rX   r}   zPlainResource.raw_match  s    zT!!rW   c                     d| j         iS )NrF   r  rf   s    rX   rx   zPlainResource.get_info  s    
##rW   c                 8    t          j        | j        d          S NTrF   encoded)r   buildr  rf   s    rX   rm   zPlainResource.url_for  s    ydj$7777rW   c                 J    | j         d| j         z   dz   nd}d| d| j         dS )N'' r   z<PlainResource  r   )r\   r  rb   s     rX   r   zPlainResource.__repr__  s9    )-)>sTY%%B555
5555rW   r~   )rQ   rR   rS   rT   r   rd   r   ri   rz   ru   r   r   r   r}   rE   rx   r   rm   r   r   r   s   @rX   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 6rW   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[   rF   r\   r]   c                   t                                          |           d}d}t                              |          D ]}| j                            |          }|rP|d                    |                    d          | j                  z  }|d|                    d          z   dz   z  }o| j	                            |          }|rA| dj        di |
                                z  }|d|                    d          z   dz   z  }d|v sd|v rt          d| d	| d
          t          |          }||z  }|t          j        |          z  }	 t          j        |          }n-# t          j        $ r}t          d| d|           d d }~ww xY w|j                            t&                    sJ |                    d          sJ || _        || _        d S )Nr[   r   z
(?P<{}>{})var{}z(?P<{var}>{re})zInvalid path 'z'['z']zBad pattern 'z': rB   rV   )r   rd   rA   splitDYN	fullmatchr   groupGOODDYN_WITH_RE	groupdictr   _requote_pathreescapecompileerrorrH   r  rC   _pattern
_formatter)
rc   rF   r\   rH   rG   partr   compiledexcr   s
            rX   rd   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_   r2  rf   s    rX   ri   zDynamicResource.canonical  r   rW   rJ   c                    |                     d          sJ |                    d          rJ t          |          dk    sJ t          j        t          j        |          | j        j        z             | _        || j        z   | _        d S r  )	r  r  r  r-  r/  r.  r1  rH   r2  rt   s     rX   ru   zDynamicResource.add_prefix  s~      %%%%%??3'''''6{{Q
29V#4#4t}7L#LMM 4?2rW   c                     | j                             |          }|d S d |                                                                D             S )Nc                 4    i | ]\  }}|t          |          S rV   )_unquote_path).0keyvalues      rX   
<dictcomp>z*DynamicResource._match.<locals>.<dictcomp>  s3       .8c5]5))  rW   )r1  r'  r+  items)rc   rF   r   s      rX   r   zDynamicResource._match  sX    ''--=4 <AOO<M<M<S<S<U<U   rW   c                     | j         |k    S r_   r7  r|   s     rX   r}   zDynamicResource.raw_match  s    $&&rW   c                      | j         | j        dS )N)rG   rH   )r2  r1  rf   s    rX   rx   zDynamicResource.get_info  s    !_GGGrW   partsc                     | j                             d |                                D                       }t          j        |d          S )Nc                 4    i | ]\  }}|t          |          S rV   )_quote_path)r<  kvs      rX   r?  z+DynamicResource.url_for.<locals>.<dictcomp>  s$    )V)V)V1![^^)V)V)VrW   Tr  )r2  
format_mapr@  r   r  )rc   rC  urls      rX   rm   zDynamicResource.url_for  sC    o(()V)V)V)V)VWWyc40000rW   c                 f    | j         d| j         z   dz   nd}d                    || j                  S )Nr  r  r   z$<DynamicResource {name} {formatter}>)r\   rG   )r\   r   r2  rb   s     rX   r   zDynamicResource.__repr__  sB    )-)>sTY%%B5<< = 
 
 	
rW   )rQ   rR   rS   r-  r/  r&  r*  r)  rT   r   rd   r   ri   ru   r   r   r   r}   rE   rx   r   rm   r   r   r   s   @rX   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
# 
 
 
 
 
 
 
 
rW   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[   rJ   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   rd   r,  _prefix_prefix2)rc   rJ   r\   r   s      rX   rd   zPrefixResource.__init__  s    ;V..s33;;V;;;""&//#*>*>"""""d###$V,,s*rW   c                     | j         S r_   )rO  rf   s    rX   ri   zPrefixResource.canonical
  r   rW   c                     |                     d          sJ |                    d          rJ t          |          dk    sJ || j        z   | _        | j        dz   | _        d S r  )r  r  r  rO  rP  rt   s     rX   ru   zPrefixResource.add_prefix  sg      %%%%%??3'''''6{{Q,s*rW   c                     dS r   rV   rt   s     rX   r}   zPrefixResource.raw_match  s    urW   )rQ   rR   rS   rT   r   rd   r   ri   ru   r   r}   r   r   s   @rX   rM  rM    s        =A + + +s +Xc] +d + + + + + + 3    X+ + + + + +         rW   rM  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:   rH  N   Fr\   r   
chunk_size
show_indexfollow_symlinksappend_versionrJ   rI   r\   r   rW  rX  rY  rZ  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   rd   r   rT   r  osrF   
expanduserrq   is_dirr   FileNotFoundError
_directory_show_index_chunk_size_follow_symlinksr   _append_versionr9   _handler   )rc   rJ   rI   r\   r   rW  rX  rY  rZ  r0  r   s             rX   rd   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)rZ  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)rg  rT   lstripr   r  rO  r?   replacerc  joinpathrf  r   r_  rF   normpathrelative_torq   r   rb  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rc   ri  rZ  rJ  unresolved_pathnormalized_pathfilepathf
file_byteshs
             rX   rm   zStaticResource.url_forD  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      rX   rx  zStaticResource._get_file_hashm  sK    N	&qxxzz22zz'"""rW   c                 ,    | j         | j        | j        dS )N)rI   rJ   rK   )rc  rO  r   rf   s    rX   rx   zStaticResource.get_infot  s     ll
 
 	
rW   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   )rc   r   s     rX   set_options_routez StaticResource.set_options_route{  sK    $$>???"/wT5I#
 #
 #
YrW   rn   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 )Nri  r   )r   r   r   r   r   r  rP  rO  r;  r  r3   )rc   rn   rF   r   r   r   s         rX   rq   zStaticResource.resolve  s      'dl++t}-- 	$$,2F2F;(((( -S5F5F5J5L5L0M"N"NO
#JV0DEEWWrW   c                 *    t          | j                  S r_   r  rf   s    rX   r  zStaticResource.__len__  r  rW   c                 N    t          | j                                                  S r_   )r  r   valuesrf   s    rX   r  zStaticResource.__iter__  s    DL''))***rW   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          )Nri  z	text/html)r   content_type)rW  )
match_infor   anchorr*   rc  rr  rf  r_  rF   rs  rt  rq   r   rb  r,   	ExceptionrL   logger	exceptionra  rd  r/   _directory_as_htmlPermissionErrorru  r-   re  )rc   rn   r   ri  r{  r|  r}  r0  s           rX   rh  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| }d| d}g }|                                }t          |          D ]}|                    | j                                                  }| j        dz   |z   }	|                                 r|j         d}
n|j        }
|                    d	                    |	|
                     d	                    d
                    |                    }d	| d| d
}d| d}d| d| d}|S )Nz
Index of /z<h1>z</h1>rB   z#<li><a href="{url}">{name}</a></li>)rJ  r\   z<ul>
{}
</ul>
z<body>
z
</body>z<head>
<title>z</title>
</head>z<html>
z
</html>)ra  rt  rc  as_posixiterdirsortedrO  r\   r   r   join)rc   r}  relative_path_to_dirindex_ofh1
index_list	dir_index_filerel_pathfile_url	file_nameulbodyhead_strhtmls                  rX   r  z!StaticResource._directory_as_html  s         '33DODDMMOO6 466#H###
$$&&	I&& 	 	E((99BBDDH|c)H4H ||~~ '$z,,,		!J	5<< y =     
 %%dii
&;&;<<-"-----@X@@@5(55d555rW   c                 r    | j         d| j         z   dz   nd}d                    || j        | j                  S )Nr  r   z/<StaticResource {name} {path} -> {directory!r}>)r\   rF   rI   )r\   r   rO  rc  rb   s     rX   r   zStaticResource.__repr__  sG    (,	(=sTY$$2@GGDLDO H 
 
 	
rW   )!rQ   rR   rS   rz  rT   r'   r   r   r	  r   rd   r   rm   staticmethodbytesrx  rE   rx   r&   r  r.   r   rq   r  r   r8   r  r0   rh  r   r  r   r   r   s   @rX   r:   r:     s7       K #37$  %$$
 $
 $
$
 $

 sm$
 !0$
 $
 $
 $
 $
 
$
 $
 $
 $
 $
 $
T *.	' ' ' ' !	'
 
' ' ' 'R #5 #S # # # \#
) 
 
 
 

 
T 
 
 
 
XW X X X X X! ! ! ! !+(=1 + + + +)W ) ) ) ) )V"4 "C " " " "H
# 
 
 
 
 
 
 
 
rW   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 )PrefixedSubAppResourcerJ   rL   r<   r]   Nc                     t                                          |           || _        |j                                        D ]}|                    |           d S r_   )r   rd   _approuter	resourcesru   )rc   rJ   rL   r   r   s       rX   rd   zPrefixedSubAppResource.__init__  s`       	
,,.. 	( 	(H''''	( 	(rW   c                     t                                          |           | j        j                                        D ]}|                    |           d S r_   )r   ru   r  r  r  )rc   rJ   r   r   s      rX   ru   z!PrefixedSubAppResource.add_prefix  s\    6"""	(2244 	( 	(H''''	( 	(rW   r   rk   c                      t          d          )Nz3.url_for() is not supported by sub-application rootr   r   s      rX   rm   zPrefixedSubAppResource.url_for  s    STTTrW   c                      | j         | j        dS )N)rL   rJ   )r  rO  rf   s    rX   rx   zPrefixedSubAppResource.get_info  s    yDL999rW   rn   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_   )rJ  r   r  rP  rO  r   r  r  rq   r   r   rP   r+   r   rc   rn   r  methodss       rX   rq   zPrefixedSubAppResource.resolve  s      $//>>	$44;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rW   c                 X    t          | j        j                                                  S r_   )r  r  r  rK   rf   s    rX   r  zPrefixedSubAppResource.__len__  s!    49#**,,---rW   c                 X    t          | j        j                                                  S r_   )r  r  r  rK   rf   s    rX   r  zPrefixedSubAppResource.__iter__  s!    DI$++--...rW   c                 D    d                     | j        | j                  S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rJ   rL   )r   rO  r  rf   s    rX   r   zPrefixedSubAppResource.__repr__  s)    =DD<TY E 
 
 	
rW   )rQ   rR   rS   rT   rd   ru   r   rm   rE   rx   r.   r   rq   r	  r  r   r8   r  r   r   r   s   @rX   r  r    sA       (s ( (4 ( ( ( ( ( (( ( ( ( ( ( ( (
US UC UC U U U U:) : : : :#W # # # # #. . . . ./(=1 / / / /
# 
 
 
 
 
 
 
 
rW   r  c                       e Zd Zej        dedefd            Zej        defd            Z	e
ej        defd                        ZdS )rN   rn   r]   c                 
   K   dS )z1Return bool if the request satisfies the criteriaNrV   rp   s     rX   r   zAbstractRuleMatching.match  rr   rW   c                     dS rw   rV   rf   s    rX   rx   zAbstractRuleMatching.get_info  rj   rW   c                     dS )zReturn a strNrV   rf   s    rX   ri   zAbstractRuleMatching.canonical   rj   rW   N)rQ   rR   rS   r   r   r.   r   r   rE   rx   r   rT   ri   rV   rW   rX   rN   rN     s        @7 @t @ @ @ @ 	J) J J J J 3     X  rW   rN   c                        e Zd Z ej        d          Zdeddf fdZedefd            Z	dedefdZ
dedefd	Zd
edefdZdefdZ xZS )Domainz(?!-)[a-z\d-]{1,63}(?<!-)rM   r]   Nc                 |    t                                                       |                     |          | _        d S r_   )r   rd   
validation_domain)rc   rM   r   s     rX   rd   zDomain.__init__)  s0    v..rW   c                     | j         S r_   r  rf   s    rX   ri   zDomain.canonical-  r   rW   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<  xrc   s     rX   	<genexpr>z$Domain.validation.<locals>.<genexpr>;  s3      NN4<))!,,NNNNNNrW   zDomain not validP   :)r   rT   	TypeErrorrstripr   r   r   raw_hostallr%  port)rc   rM   rJ  s   `  rX   r  zDomain.validation1  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>><,+++++rW   rn   c                    K   |j                             t          j                  }|sdS |                     |          S r   )r   r   r    HOSTmatch_domain)rc   rn   hosts      rX   r   zDomain.matchA  s>      ""49-- 	5  &&&rW   r  c                 <    |                                 | j        k    S r_   )r   r  rc   r  s     rX   r  zDomain.match_domainG  s    zz||t|++rW   c                     d| j         iS )NrM   r  rf   s    rX   rx   zDomain.get_infoJ  s    $,''rW   )rQ   rR   rS   r-  r/  r  rT   rd   r   ri   r  r.   r   r   r  rE   rx   r   r   s   @rX   r  r  &  s       bj566G/s /t / / / / / / 3    X, , , , , , '7 't ' ' ' ', , , , , ,() ( ( ( ( ( ( ( (rW   r  c                   t     e Zd Z ej        d          Zdeddf fdZedefd            Z	dede
fdZ xZS )	
MaskDomainz(?!-)[a-z\d\*-]{1,63}(?<!-)rM   r]   Nc                     t                                          |           | j                            dd                              dd          }t	          j        |          | _        d S )Nr=   z\.*z.*)r   rd   r  rq  r-  r/  _mask)rc   rM   maskr   s      rX   rd   zMaskDomain.__init__Q  sW       |##C//77TBBZ%%


rW   c                     | j         j        S r_   )r  rH   rf   s    rX   ri   zMaskDomain.canonicalV  s    z!!rW   r  c                 :    | j                             |          d uS r_   )r  r'  r  s     rX   r  zMaskDomain.match_domainZ  s    z##D))55rW   )rQ   rR   rS   r-  r/  r  rT   rd   r   ri   r   r  r   r   s   @rX   r  r  N  s        bj788G&s &t & & & & & &
 "3 " " " X"6 6 6 6 6 6 6 6 6 6rW   r  c                   f    e Zd ZdeddddfdZedefd            ZdefdZ	d	e
defd
ZdefdZdS )MatchedSubAppResourcerO   rL   r<   r]   Nc                 d    t                               |            d| _        || _        || _        d S )Nr   )r4   rd   rO  r  _rule)rc   rO   rL   s      rX   rd   zMatchedSubAppResource.__init___  s/    !!$'''	


rW   c                     | j         j        S r_   )r  ri   rf   s    rX   ri   zMatchedSubAppResource.canonicale  s    z##rW   c                      | j         | j        dS )N)rL   rO   )r  r  rf   s    rX   rx   zMatchedSubAppResource.get_infoi  s    y$*555rW   rn   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  rq   r   r   rP   r+   r   r  s       rX   rq   zMatchedSubAppResource.resolvel  s      Z%%g........ 	;9+33G<<<<<<<<
49%%%j/1EFF 	 /?GGeeG7""rW   c                 8    d                     | j                  S )Nz"<MatchedSubAppResource -> {app!r}>)rL   )r   r  rf   s    rX   r   zMatchedSubAppResource.__repr__w  s    6==$)=LLLrW   )rQ   rR   rS   rN   rd   r   rT   ri   rE   rx   r.   r   rq   r   rV   rW   rX   r  r  ^  s        1  $     $3 $ $ $ X$6) 6 6 6 6	#W 	# 	# 	# 	# 	#M# M M M M M MrW   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   rd   )rc   r   r   r   r   r   s        rX   rd   zResourceRoute.__init__~  s9     	GNX 	 	
 	
 	
 	
 	
rW   c                 P    d                     | j        | j        | j                  S )Nz3<ResourceRoute [{method}] {resource} -> {handler!r})r   r   r   )r   r   r   r   rf   s    rX   r   zResourceRoute.__repr__  s-    DKK; L 
 
 	
rW   c                 ,    | j         d S | j         j        S r_   )r   r\   rf   s    rX   r\   zResourceRoute.name  s    >!4~""rW   r   rk   c                 8    | j         J  | j         j        |i |S )r   )r   rm   r   s      rX   rm   zResourceRoute.url_for  s*    ~)))%t~%t6v666rW   c                 F    | j         J | j                                         S r_   )r   rx   rf   s    rX   rx   zResourceRoute.get_info  s$    ~)))~&&(((rW   )rQ   rR   rS   __doc__rT   r   r&   r   r#   r4   r   r   rd   r   r   r\   r   rm   rE   rx   r   r   s   @rX   r9   r9   {  s         48

 

 



 w\ 223

 #	

 !0

 


 

 

 

 

 


# 
 
 
 

 #hsm # # # X#
7S 7C 7C 7 7 7 7
)) ) ) ) ) ) ) ) )rW   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   rP   r]   Nc                 x    t                                          t          j        | j                   || _        d S r_   )r   rd   r    r   rh  _http_exceptionr   s     rX   rd   zSystemRoute.__init__  s/    555-rW   r   rk   c                      t          d          )Nz).url_for() is not allowed for SystemRouter  r   s      rX   rm   zSystemRoute.url_for  s    FGGGrW   c                     d S r_   rV   rf   s    rX   r\   zSystemRoute.name  r   rW   c                     d| j         iS )NrP   r  rf   s    rX   rx   zSystemRoute.get_info  s     $"677rW   rn   c                    K   | j         r_   r  rp   s     rX   rh  zSystemRoute._handle  s      ""rW   c                     | j         j        S r_   )r  r   rf   s    rX   r   zSystemRoute.status      #**rW   c                     | j         j        S r_   )r  r   rf   s    rX   r   zSystemRoute.reason  r  rW   c                 .    d                     |           S )Nz*<SystemRoute {self.status}: {self.reason}>rf   )r   rf   s    rX   r   zSystemRoute.__repr__  s    ;BBBMMMrW   )rQ   rR   rS   r(   rd   rT   r   rm   r   r   r\   rE   rx   r.   r0   rh  r	  r   r   r   r   r   s   @rX   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rW   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_   )	rn   r   r    METH_ALL_raise_allowed_methodsgetattrr   r   r0   )rc   r   rets      rX   _iterz
View._iter  s      <dm33'')))t|288::DAA>'')))FHHnnnnnn#~.....
rW   Nc                 N    |                                                                  S r_   )r  	__await__rf   s    rX   r  zView.__await__  s    zz||%%'''rW   c                 h      fdt           j        D             }t           j        j        |          )Nc                 X    h | ]&}t          |                                          $|'S rV   )hasattrr   )r<  r  rc   s     rX   	<setcomp>z.View._raise_allowed_methods.<locals>.<setcomp>  s0    PPPwtQWWYY7O7OP1PPPrW   )r    r  r+   rn   r   )rc   r   s   ` rX   r  zView._raise_allowed_methods  s3    PPPPdmPPP"4<#6HHHrW   )
rQ   rR   rS   r0   r  r   r   r  r   r  rV   rW   rX   r;   r;     sx        	^ 	 	 	 	(9S$%>? ( ( ( (I I I I I I IrW   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)rc   r  s     rX   rd   zResourcesView.__init__  s    #rW   c                 *    t          | j                  S r_   )r  r  rf   s    rX   r  zResourcesView.__len__  s    4?###rW   c              #   $   K   | j         E d {V  d S r_   r  rf   s    rX   r  zResourcesView.__iter__  s&      ?"""""""""rW   r   c                     || j         v S r_   r  rc   r   s     rX   __contains__zResourcesView.__contains__  s    4?**rW   )rQ   rR   rS   r   r4   rd   r	  r  r   r  objectr   r  rV   rW   rX   r  r    s        $$'7"8 $T $ $ $ $$ $ $ $ $#(#34 # # # #+V + + + + + + +rW   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   )rc   r  r   r   s       rX   rd   zRoutesView.__init__  sO    ,.! 	+ 	+H! + +##E****+	+ 	+rW   r]   c                 *    t          | j                  S r_   r  rf   s    rX   r  zRoutesView.__len__  r  rW   c              #   $   K   | j         E d {V  d S r_   r   rf   s    rX   r  zRoutesView.__iter__  s&      <rW   r   c                     || j         v S r_   r"  r   s     rX   r  zRoutesView.__contains__  s    $$rW   N)rQ   rR   rS   r   r4   rd   r	  r  r   r8   r  r  r   r  rV   rW   rX   r  r    s        +$'7"8 + + + +! ! ! ! ! (=1        %& %T % % % % % %rW   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   rd   r  _named_resourcesr   s    rX   rd   zUrlDispatcher.__init__  s.    24=?rW   rn   c                 
  K   |j         }t                      }| j        D ]+}|                    |           d {V \  }}||c S ||z  },|rt	          t          ||                    S t	          t                                S r_   )r   r   r  rq   r   r+   r,   )rc   rn   r   r   r   r   alloweds          rX   rq   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1rW   c                 *    t          | j                  S r_   )r  r&  rf   s    rX   r  zUrlDispatcher.__iter__	  s    D)***rW   c                 *    t          | j                  S r_   )r  r&  rf   s    rX   r  zUrlDispatcher.__len__  s    4()))rW   r   c                     || j         v S r_   r&  r  s     rX   r  zUrlDispatcher.__contains__  s    4000rW   r\   c                     | j         |         S r_   r,  rb   s     rX   __getitem__zUrlDispatcher.__getitem__  s    $T**rW   c                 *    t          | j                  S r_   )r  r  rf   s    rX   r  zUrlDispatcher.resources  s    T_---rW   c                 *    t          | j                  S r_   )r  r  rf   s    rX   rK   zUrlDispatcher.routes  s    $/***rW   c                 *    t          | j                  S r_   )r   r&  rf   s    rX   named_resourceszUrlDispatcher.named_resources  s     5666rW   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   )rc   r   r\   rC  r3  s        rX   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(((((rW   r[   rF   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,  r9  r7   )rc   rF   r\   r   s       rX   add_resourcezUrlDispatcher.add_resource?  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(((rW   )r\   r   r   r   r   c                `    |                      ||          }|                    |||          S )Nr[   r   )r=  r   )rc   r   rF   r   r\   r   r   s          rX   r   zUrlDispatcher.add_routeO  s7     $$T$55!!&'.!QQQrW   rU  FrV  rJ   rW  rX  rY  rZ  c          
          |                     d          sJ |                    d          r
|dd         }t          ||||||||          }	|                     |	           |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        rB   Nr;  rV  )r  r  r:   r9  )
rc   rJ   rF   r\   r   rW  rX  rY  rZ  r   s
             rX   
add_staticzUrlDispatcher.add_static[  s    $   %%%%%??3 	!CRC[F!)!!+)	
 	
 	
 	x(((rW   rk   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method HEAD.)r   r    	METH_HEADrc   rF   r   rk   s       rX   add_headzUrlDispatcher.add_head}  "    t~dndGFFvFFFrW   c                 6     | j         t          j        ||fi |S )z+Shortcut for add_route with method OPTIONS.)r   r    METH_OPTIONSrC  s       rX   add_optionszUrlDispatcher.add_options  s#    t~d/wII&IIIrW   T)r\   
allow_headrI  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    rB  METH_GET)rc   rF   r   r\   rI  rk   r   s          rX   add_getzUrlDispatcher.add_get  sc     $$T$55 	BHt~wAA&AAA!x!$-CCFCCCrW   c                 6     | j         t          j        ||fi |S )z(Shortcut for add_route with method POST.)r   r    	METH_POSTrC  s       rX   add_postzUrlDispatcher.add_post  rE  rW   c                 6     | j         t          j        ||fi |S )z'Shortcut for add_route with method PUT.)r   r    METH_PUTrC  s       rX   add_putzUrlDispatcher.add_put  s"    t~dmT7EEfEEErW   c                 6     | j         t          j        ||fi |S )z)Shortcut for add_route with method PATCH.)r   r    
METH_PATCHrC  s       rX   	add_patchzUrlDispatcher.add_patch  s"    t~dotWGGGGGrW   c                 6     | j         t          j        ||fi |S )z*Shortcut for add_route with method DELETE.)r   r    METH_DELETErC  s       rX   
add_deletezUrlDispatcher.add_delete  s#    t~d.gHHHHHrW   c                 6     | j         t          j        ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r   r    r   rC  s       rX   add_viewzUrlDispatcher.add_view  s$     t~dmT7EEfEEErW   c                     t                                                       | j        D ]}|                                 d S r_   )r   rz   r  )rc   r   r   s     rX   rz   zUrlDispatcher.freeze  sE     	 	HOO	 	rW   rK   c                 d    g }|D ]*}|                     |                    |                      +|S )zAppend routes to route table.

        Parameter should be a sequence of RouteDef objects.

        Returns a list of registered AbstractRoute instances.
        )extendregister)rc   rK   registered_routes	route_defs       rX   
add_routeszUrlDispatcher.add_routes  sD      	? 	?I$$Y%7%7%=%=>>>>  rW   r~   )6rQ   rR   rS   r-  r/  r5  rd   r.   r3   rq   r   rT   r  r	  r  r  r   r  r4   r.  r  r  r  rK   r   r2  r9  r   r5   r=  r   r&   r   r#   r   r8   r   r'   r@  r   rD  rH  rL  rO  rR  rU  rX  rZ  rz   r   r1   r   ra  r   r   s   @rX   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 
! 
! 
! 
! 
! 
! 
! 
!rW   r2   r>  c                 z    t           dk     r|                     dd          } t          j        | d          j        S )Nrk  rm  rn  Fr  )r?   rq  r   r  r   r>  s    rX   rF  rF    s8    fc5))9%///88rW   c                 8    t          j        | d          j        S r  )r   r  rF   rc  s    rX   r;  r;    s    9%...33rW   c                 X    t          |           }d| v r|                    dd          }|S )Nrm  rn  )rF  rq  )r>  r   s     rX   r,  r,    s2     F
e||s++MrW   )tr   r   r  r  r   r6  r_  r-  r   
contextlibr   	functoolsr   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<   rT   BaseDictdictr   mapr	  r%  r?   rU   r/  r@   rA   r.  rC   r   r   rE   r4   ABCr8   r3   r   r   r5   r6   r7   rM  r:   r  rN   r  r  r  r9   r   r;   r  r  r2   rF  r;  r,  rV   rW   rX   <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(:;" " " " "	 " " " "&,/ ,/ ,/ ,/ ,/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    %   2M
 M
 M
 M
 M
^ M
 M
 M
`)
 )
 )
 )
 )
^ )
 )
 )
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       rW   