
    3CfĜ                        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,j                  d      dd             ZRee$ePdf      eSd<    e	j                  d      ZUee!eK      eSd<    e	j                  d      ZVee!eK      eSd<    e	j                  d      ZXeeK   eSd<   eeBgee eE      f   ZYe$e d   e"eK   f   ZZ ej                  ej                  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Zvy)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<   y)	_InfoDictpath	formatterpattern	directoryprefixr8   routesr<   appdomainAbstractRuleMatchingrulehttp_exceptionN)	__name__
__module____qualname__str__annotations__r   r   r   r(        Y/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/aiohttp/web_urldispatcher.pyrF   rF   b   sG    
INS\OKC())	K
  !!rX   rF   F)totalc                   b   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y)r4   Nnamer]   returnc                    || _         y N_nameselfr]   s     rY   __init__zAbstractResource.__init__v   s	    
rX   c                     | j                   S r`   ra   rd   s    rY   r]   zAbstractResource.namey       zzrX   c                      y)zWExposes the resource's canonical path.

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

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

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

        Required for subapplications support.
        NrW   rd   rK   s     rY   
add_prefixzAbstractResource.add_prefix   rk   rX   c                      yz;Return a dict with additional info useful for introspectionNrW   rg   s    rY   get_infozAbstractResource.get_info   rk   rX   c                      y r`   rW   rg   s    rY   freezezAbstractResource.freeze   s    rX   rG   c                      y)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   rw   rF   rz   r|   boolr   rW   rX   rY   r4   r4   u   s1   04    hsm   3    	A A A A 	W    	    	J) J J 	/c /d / /rX   r4   r8   c                   @   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y)r8   Nexpect_handlerresourcemethodhandlerr   r   r^   c                `   |t         }t        j                  |      s
J d|       |j                         }t        j                  |      st        | d      t        |      sJ |       t        j                  |      rnt        j                  |      rt        j                  dt               n_t        |t              rt        |t               rn>t        j                  dt               t#        |      dt$        dt&        ffd       }||}|| _        || _        || _        || _        y )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 {   }t        |t              sJ |S 7 wr`   )asyncioiscoroutine
isinstancer0   )ro   resultold_handlers     rY   handler_wrapperz/AbstractRoute.__init__.<locals>.handler_wrapper   s@     $W-&&v.#)\F!&.999 *s   #A?A)_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+x'BCDD )') &&w/((1MMK" &:g|+LMM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                      y)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                      yry   rW   rg   s    rY   rz   zAbstractRoute.get_info   rk   rX   argsrl   c                      y)/Construct url for route with additional params.NrW   rd   r   rl   s      rY   rn   zAbstractRoute.url_for   rk   rX   ro   c                 @   K   | j                  |       d {   S 7 wr`   )r   rq   s     rY   handle_expect_headerz"AbstractRoute.handle_expect_header   s     ))'2222s   )rR   rS   rT   rU   r   r&   r   r#   r   _ExpectHandlerr4   re   r   r   r   r   r   r]   r   rF   rz   r   rn   r.   r0   r   rW   rX   rY   r8   r8      sL    48/31"1" w\ 2231"
 !01" +,1" 
1"f       Ghsm G  G (#34   	J) J J 	>S >C >C > >3' 3h~>V 3rX   c                   
    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| _        y 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                      y r`   rW   rg   s    rY   rQ   z"UrlMappingMatchInfo.http_exception	      rX   c                 6    | j                   j                         S r`   )r   rz   rg   s    rY   rz   zUrlMappingMatchInfo.get_info  s    {{##%%rX   )r<   .c                 ,    t        | j                        S r`   )tupler   rg   s    rY   appszUrlMappingMatchInfo.apps  s    TZZ  rX   rM   r<   c                     | j                   rt        d      | j                  || _        | j                  j	                  d|       y )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrd   rM   s     rY   add_appzUrlMappingMatchInfo.add_app  s=    <<NOO$ #D

!S!rX   c                 &    | j                   }|J |S r`   )r   r   s     rY   current_appzUrlMappingMatchInfo.current_app  s    
rX   )NNNc              #      K   t         r3|| j                  vr%t        dj                  | j                  |            | j                  }|| _        	 d  || _        y # || _        w xY w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!  sf     $**$"GNN

C 
   	% $DDs   AA(A A(	A%%A(c                     d| _         y )NT)r   rg   s    rY   r|   zUrlMappingMatchInfo.freeze1  s	    rX   c                 B    dt         |           d| j                   dS )Nz<MatchInfo z: >)r   __repr__r   rd   r   s    rY   r   zUrlMappingMatchInfo.__repr__4  s%    UW-/04;;-q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   rz   r   r   r   r   r   r   r   r|   r   __classcell__r   s   @rY   r3   r3      s   4S> -  # # # }   0 0 0  7  &) & !e./ ! !"  
 %= %Y?O5P % %B# B BrX   c                   J     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                 Z    || _         t        | 	  i t        | j                                y r`   )
_exceptionr   re   SystemRouterd   rQ   r   s     rY   re   zMatchInfoError.__init__9  s"    ([9:rX   c                     | j                   S r`   )r   rg   s    rY   rQ   zMatchInfoError.http_exception=      rX   c                 v    dj                  | j                  j                  | j                  j                        S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrg   s    rY   r   zMatchInfoError.__repr__A  s.    (//OO""DOO$:$:
 	
rX   )
rR   rS   rT   r(   re   r   rQ   rU   r   r   r   s   @rY   r   r   8  s=    ;} ; ;   
# 
rX   r   ro   r^   c                   K   | j                   j                  t        j                  d      }| j                  t
        k(  rF|j                         dk(  r$| j                  j                  d       d{    yt        d|z        y7 w)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  sn      __  b1F-'<<>^+..&&'GHHH'-AF-JKK	 (Hs   A/B	1B2B	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                4    t         |   |       g | _        y )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 ]I  }|j                  |k(  s|j                  t        j                  k(  s0t	        dj                  |             t        ||| |      }| j                  |       |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  sz      	I6)Y-=-=-N"!!'i!8 	 "&'4W	I&rX   c                 n    t        |t              s
J d|       | j                  j                  |       y )Nz)Instance of Route class is required, got )r   r9   r   appendrd   r   s     rY   r   zResource.register_routen  s>    =
 	A6ui@	A 
 	E"rX   ro   c                 <  K   t               }| j                  |j                  j                        }|d |fS | j                  D ]Q  }|j
                  }|j                  |       ||j
                  k(  s|t        j                  k(  sCt        ||      |fc S  d |fS wr`   )
set_matchrel_urlraw_pathr   r   addr    r   r3   )rd   ro   allowed_methodsr   r   route_methods         rY   rr   zResource.resolvet  s     $'E[[!9!9:
(( 	)I$++L-w~~-1N+J	BOTT	) ((s   BBBrG   c                      y 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    DLL!!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  s    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|j                  d      sJ || _        y )Nr\   rB   )r   re   
startswith_path)rd   rG   r]   r   s      rY   re   zPlainResource.__init__  s.    d#4??3///
rX   c                     | j                   S r`   r  rg   s    rY   rj   zPlainResource.canonical  rh   rX   c                 ,    | j                   sd| _         y y )NrB   r  rg   s    rY   r|   zPlainResource.freeze  s    zzDJ rX   rK   c                     |j                  d      sJ |j                  d      rJ t        |      dkD  sJ || j                  z   | _        y NrB   r   )r  endswithr  r  rv   s     rY   rw   zPlainResource.add_prefix  sH      %%%??3'''6{Qdjj(
rX   c                 &    | j                   |k(  ri S y r`   r  r~   s     rY   r   zPlainResource._match  s    ::IrX   c                      | j                   |k(  S r`   r  r~   s     rY   r   zPlainResource.raw_match  s    zzT!!rX   c                     d| j                   iS )NrG   r  rg   s    rY   rz   zPlainResource.get_info  s    

##rX   c                 D    t        j                  | j                  d      S NTrG   encoded)r   buildr  rg   s    rY   rn   zPlainResource.url_for  s    yydjj$77rX   c                 h    | 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__  s8    )-)>sTYY%B a

|155rX   r   )rR   rS   rT   rU   r   re   r   rj   r|   rw   r   r   r   r   rF   rz   r   rn   r   r   r   s   @rY   r6   r6     s    ;? S 8C= D 
 3  ) ) )3 8DcN#; "c "d "$) $8 8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                v   t         	|   |       d}d}t        j                  |      D ]  }| j                  j                  |      }|rI|dj                  |j                  d      | j                        z  }|d|j                  d      z   dz   z  }j| j                  j                  |      }|r>| dj                  di |j                         z  }|d|j                  d      z   dz   z  }d|v sd|v rt        d| d	| d
      t        |      }||z  }|t        j                  |      z  }	 	 t        j                  |      }|j"                  j%                  t&              sJ |j%                  d      sJ || _        || _        y # t        j                   $ r}t        d| d|       d d }~ww xY w)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HH&&t,E<..u{{5/A499MMS5;;u#55;;	$$..t4E3,33Heoo6GHHS5;;u#55;;	d{cTk >$s4&!CDD &DIryy&G%	'(	Jzz'*H **8444##C((( # xx 	J}WIS>?TI	Js   6F F8!F33F8c                     | j                   S r`   r4  rg   s    rY   rj   zDynamicResource.canonical  r   rX   rK   c                     |j                  d      sJ |j                  d      rJ t        |      dkD  sJ t        j                  t        j
                  |      | j                  j                  z         | _        || j                  z   | _        y r  )	r  r  r  r/  r1  r0  r3  rI   r4  rv   s     rY   rw   zDynamicResource.add_prefix  sp      %%%??3'''6{Q

299V#4t}}7L7L#LM 4??2rX   c                     | j                   j                  |      }|y |j                         j                         D ci c]  \  }}|t	        |       c}}S c c}}w r`   )r3  r)  r-  items_unquote_path)rd   rG   r   keyvalues        rY   r   zDynamicResource._match  s\    ''-= =BOO<M<S<S<U.8c5]5))  s    Ac                      | j                   |k(  S r`   r9  r~   s     rY   r   zDynamicResource.raw_match  s    $&&rX   c                 4    | j                   | j                  dS )N)rH   rI   )r4  r3  rg   s    rY   rz   zDynamicResource.get_info  s    !__GGrX   partsc           
          | j                   j                  |j                         D ci c]  \  }}|t        |       c}}      }t	        j
                  |d      S c c}}w r  )r4  
format_mapr<  _quote_pathr   r  )rd   rB  kvurls        rY   rn   zDynamicResource.url_for  sK    oo(()V1![^*;)VWyyc400 *Ws   A
c                 |    | j                   d| j                   z   dz   nd}dj                  || j                        S )Nr  r   r   z$<DynamicResource {name} {formatter}>)r]   rH   )r]   r   r4  rc   s     rY   r   zDynamicResource.__repr__  s@    )-)>sTYY%B5<< = 
 	
rX   )rR   rS   rT   r/  r1  r(  r,  r+  rU   r   re   r   rj   rw   r   r   r   r   rF   rz   r   rn   r   r   r   s   @rY   r7   r7     s    
"**;
<C"**NOKD;? $S $8C= $D $B 3  3 3 33 8DcN#; 'c 'd 'H) H1s 1s 1
# 
rX   r7   c                   n     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|j                  d      sJ |       |dv s|j                  d      rJ |       t        |   |       t	        |      | _        | j
                  dz   | _        y )NrB   )r   rB   r\   )r  r  r   re   r.  _prefix_prefix2)rd   rK   r]   r   s      rY   re   zPrefixResource.__init__  sh    V..s3;V;3"&//#*>FF>d#$V,s*rX   c                     | j                   S r`   )rM  rg   s    rY   rj   zPrefixResource.canonical  r   rX   c                     |j                  d      sJ |j                  d      rJ t        |      dkD  sJ || j                  z   | _        | j                  dz   | _        y r  )r  r  r  rM  rN  rv   s     rY   rw   zPrefixResource.add_prefix  sX      %%%??3'''6{Q,s*rX   c                      yr   rW   rv   s     rY   r   zPrefixResource.raw_match  s    rX   )rR   rS   rT   rU   r   re   r   rj   rw   r   r   r   r   s   @rY   rK  rK    se    =A +s +Xc] +d + 3  + + +  rX   rK  c                       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:   rG  N   Fr]   r   
chunk_size
show_indexfollow_symlinksappend_versionrK   rJ   r]   r   rU  rV  rW  rX  r^   c                @   t         
|   ||       	 t        |      }t        |      j	                  d      r1t        t
        j                  j                  t        |                  }|j                         }|j                         st        d      	 || _        || _        || _        || _        || _        || _        t%        d| j&                  | |      t%        d| j&                  | |      d	| _        y # t        t        f$ r}	t        d| d      |	d }	~	ww xY w)
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   rU  rV  rW  rX  r2  r   s             rY   re   zStaticResource.__init__"  s    	d+	QYI9~((- !3!3C	N!CD	!))+I##% !233 & $%% /-- !t||T. "d>	
 ":. 	Q7	{!DE5P	Qs   BC9 9DDD)rX  filenamec                N   || j                   }t        |      j                  d      }t        j                  | j
                  d      }t        dk  r||j                  dd      z  }n||z  }|r| j                  j                  |      }	 | j                  rTt        t        j                  j                  |            }|j                  | j                         |j!                         }n+|j!                         }|j                  | j                         |j'                         rZ|j)                  d      5 }|j+                         }d d d        | j-                        }	|j/                  | j0                  |	i      }|S |S # t"        t$        f$ r |cY S w xY w# 1 sw Y   RxY w)NrB   Tr  r      %%25rb)re  rU   lstripr   r  rM  r?   replacera  joinpathrd  r   r]  rG   normpathrelative_torr   r   r`  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rd   rg  rX  rH  unresolved_pathnormalized_pathfilepathf
file_byteshs
             rY   rn   zStaticResource.url_forH  sr    !!11Nx='',iiT\\48& ((e44C.C"oo66x@O((&*277+;+;O+L&MO#//@.668H.668H((9
 ! ]]4( *A!"J*''
3nnd&6&6%:;

  12  
* *s   BF 9FFFF$
byte_arrayc                     t        j                         }|j                  |        t        j                  |j                               }|j                  d      S )Nascii)hashlibsha256updatebase64urlsafe_b64encodedigestdecode)r  mb64s      rY   rv  zStaticResource._get_file_hashq  s?    NN	&&qxxz2zz'""rX   c                 J    | j                   | j                  | j                  dS )N)rJ   rK   rL   )ra  rM  r   rg   s    rY   rz   zStaticResource.get_infox  s!    llll
 	
rX   r   c                     d| j                   v rt        d      t        d|| | j                        | j                   d<   y )NOPTIONSzOPTIONS route was set alreadyr   )r   r   r9   r   )rd   r   s     rY   set_options_routez StaticResource.set_options_route  s<    $>??"/wT5I5I#
YrX   ro   c                 v  K   |j                   j                  }|j                  }t        | j                        }|j                  | j                        s|| j                  k7  rd t               fS ||vrd |fS dt        |t        | j                        dz   d        i}t        || j                  |         |fS w)Nrg  r   )r   r   r   r   r   r  rN  rM  r=  r  r3   )rd   ro   rG   r   r   r   s         rY   rr   zStaticResource.resolve  s     ''dll+t}}-$$,,2F;((( -S5F5J5L0M"NO
#JV0DEWWs   B7B9c                 ,    t        | j                        S r`   r  rg   s    rY   r  zStaticResource.__len__  r  rX   c                 H    t        | j                  j                               S r`   )r	  r   valuesrg   s    rY   r
  zStaticResource.__iter__  s    DLL'')**rX   c                   K   |j                   d   }	 t        |      }|j                  r
t               | j                  j                  |      }| j                  rTt        t        j                  j                  |            }|j                  | j                         |j                         }n+|j                         }|j                  | j                         |j'                         r3| j(                  r	 t+        | j-                  |      d      S t               |j1                         rt3        || j4                        S t        # t        t        f$ r}t               |d }~wt        $ r  t        $ r5}|j                   j"                  j%                  |       t               |d }~ww xY w# t.        $ r t               w xY ww)Nrg  z	text/html)r   content_type)rU  )
match_infor   anchorr*   ra  rp  rd  r]  rG   rq  rr  rr   r   r`  r,   	ExceptionrM   logger	exceptionr_  rb  r/   _directory_as_htmlPermissionErrorrs  r-   rc  )rd   ro   r   rg  ry  rz  r{  r2  s           rY   rf  zStaticResource._handle  s    $$Z0	,G}H $o%"oo66x@O$$"&rww'7'7'H"I++DOO<*224*224$$T__5 ??*#!44X>[  $o%T5E5EFF1 -. 	,.e+ 	 	,KK((/.e+	, ' *'/)*sM   GCE
 G7F1 8G
F.E$$F.90F))F..G1GGr{  c           	      x   |j                         sJ |j                  | j                        j                         }dt	        |       }d| d}g }|j                         }t        |      D ]  }|j                  | j                        j                         }t        | j                   d|       }	|j                         r|j                   d}
n|j                  }
|j                  d|	 dt	        |
       d        dj                  d	j                  |            }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>)r_  rr  ra  as_posixhtml_escapeiterdirsortedrE  rM  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  sR       '33DOODMMO,@ ABCH:U#
$$&	I& 	E((9BBDH)T\\N!H:*FGO ||~$zzl!,	!JJ	0;y3I2J)T	 %%dii
&;<"Rt9-$XJ.?@(2dV95rX   c                     | j                   d| j                   z   dz   nd}dj                  || j                  | j                        S )Nr  r   z/<StaticResource {name} {path} -> {directory!r}>)r]   rG   rJ   )r]   r   rM  ra  rc   s     rY   r   zStaticResource.__repr__  sG    (,		(=sTYY$2@GGDLLDOO H 
 	
rX   )!rR   rS   rT   rx  rU   r'   r   r   r  r   re   r   rn   staticmethodbytesrv  rF   rz   r&   r  r.   r   rr   r  r   r8   r
  r0   rf  r   r  r   r   r   s   @rY   r:   r:     sX   K #37$  %$$
$
 $

 sm$
 !0$
 $
 $
 $
 $
 
$
T *.	' ' !	'
 
'R #5 #S # #
) 

 
T 
XW 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                  j	                         D ]  }|j                  |        y r`   )r   re   _approuter	resourcesrw   )rd   rK   rM   r   r   s       rY   re   zPrefixedSubAppResource.__init__  sA     	

,,. 	(H'	(rX   c                     t         |   |       | j                  j                  j	                         D ]  }|j                  |        y r`   )r   rw   r  r  r  )rd   rK   r   r   s      rY   rw   z!PrefixedSubAppResource.add_prefix  s@    6"		((22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TrX   c                 4    | j                   | j                  dS )N)rM   rK   )r  rM  rg   s    rY   rz   zPrefixedSubAppResource.get_info  s    yyDLL99rX   ro   c                   K   |j                   j                  j                  | j                        s/|j                   j                  | j                  k7  rd t               fS | j                  j                  j                  |       d {   }|j                  | j                         t        |j                  t              r|j                  j                  }||fS t               }||fS 7 awr`   )rH  r   r  rN  rM  r   r  r  rr   r   r   rQ   r+   r   rd   ro   r  methodss       rY   rr   zPrefixedSubAppResource.resolve  s     $$//>$$4;99++33G<<
499%j//1EF //??G 7"" eG7"" =s   BC-	C+
A"C-c                 \    t        | j                  j                  j                               S r`   )r  r  r  rL   rg   s    rY   r  zPrefixedSubAppResource.__len__  s     499##**,--rX   c                 \    t        | j                  j                  j                               S r`   )r	  r  r  rL   rg   s    rY   r
  zPrefixedSubAppResource.__iter__  s     DII$$++-..rX   c                 P    dj                  | j                  | j                        S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rK   rM   )r   rM  r  rg   s    rY   r   zPrefixedSubAppResource.__repr__  s(    =DD<<TYY E 
 	
rX   )rR   rS   rT   rU   re   rw   r   rn   rF   rz   r.   r   rr   r  r  r   r8   r
  r   r   r   s   @rY   r  r    s    (s ( (4 (( ( (
US UC UC 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y)rO   ro   r^   c                    K   yw)z1Return bool if the request satisfies the criteriaNrW   rq   s     rY   r   zAbstractRuleMatching.match  rs   rt   c                      yry   rW   rg   s    rY   rz   zAbstractRuleMatching.get_info  rk   rX   c                      y)zReturn a strNrW   rg   s    rY   rj   zAbstractRuleMatching.canonical"  rk   rX   N)rR   rS   rT   r   r   r.   r   r   rF   rz   r   rU   rj   rW   rX   rY   rO   rO     sy    @7 @t @ @ 	J) J J 3   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                 N    t         |           | j                  |      | _        y r`   )r   re   
validation_domain)rd   rN   r   s     rY   re   zDomain.__init__+  s    v.rX   c                     | j                   S r`   r  rg   s    rY   rj   zDomain.canonical/  r   rX   c                     t        |t              st        d      |j                  d      j	                         }|st        d      d|v rt        d      t        d|z         }|j                  J t         fd|j                  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   T   K   | ]  }j                   j                  |       ! y wr`   )re_partr)  ).0xrd   s     rY   	<genexpr>z$Domain.validation.<locals>.<genexpr>=  s      N4<<))!,Ns   %(zDomain not validP   :)r   rU   	TypeErrorrstripr   r   r   raw_hostallr'  port)rd   rN   rH  s   `  rY   r  zDomain.validation3  s    &#&011s#))+566f_344)f$%||'''Ncll6H6H6MNN/0088r><<,,q
++rX   ro   c                    K   |j                   j                  t        j                        }|sy| j	                  |      S wr   )r   r   r    HOSTmatch_domain)rd   ro   hosts      rY   r   zDomain.matchC  s5     ""499-  &&s   >A r  c                 <    |j                         | 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   rz   zDomain.get_infoL  s    $,,''rX   )rR   rS   rT   r/  r1  r  rU   re   r   rj   r  r.   r   r   r  rF   rz   r   r   s   @rY   r  r  (  s    bjj56G/s /t / 3  , , , '7 't ', , ,() (rX   r  c                   r     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                  j                  dd      j                  dd      }t	        j
                  |      | _        y )Nr=   z\.*z.*)r   re   r  ro  r/  r1  _mask)rd   rN   maskr   s      rY   re   zMaskDomain.__init__S  sC     ||##C/77TBZZ%
rX   c                 .    | j                   j                  S r`   )r  rI   rg   s    rY   rj   zMaskDomain.canonicalX  s    zz!!!rX   r  c                 <    | j                   j                  |      d uS r`   )r  r)  r  s     rY   r  zMaskDomain.match_domain\  s    zz##D)55rX   )rR   rS   rT   r/  r1  r  rU   re   r   rj   r   r  r   r   s   @rY   r  r  P  sU    bjj78G&s &t &
 "3 " "6 6 6rX   r  c                   ^    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y)MatchedSubAppResourcerP   rM   r<   r^   Nc                 X    t         j                  |        d| _        || _        || _        y )Nr   )r4   re   rM  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    zz###rX   c                 4    | j                   | j                  dS )N)rM   rP   )r  r  rg   s    rY   rz   zMatchedSubAppResource.get_infok  s    yy$**55rX   ro   c                   K   | j                   j                  |       d {   sd t               fS | j                  j                  j                  |       d {   }|j                  | j                         t        |j                  t              r|j                  j                  }||fS t               }||fS 7 7 cwr`   )r  r   r   r  r  rr   r   r   rQ   r+   r   r  s       rY   rr   zMatchedSubAppResource.resolven  s     ZZ%%g...;99++33G<<
499%j//1EF //??G 7"" eG7"" /<s"   C B<8C B>A"C >C c                 :    dj                  | j                        S )Nz"<MatchedSubAppResource -> {app!r}>)rM   )r   r  rg   s    rY   r   zMatchedSubAppResource.__repr__y  s    6==$))=LLrX   )rR   rS   rT   rO   re   r   rU   rj   rF   rz   r.   r   rr   r   rW   rX   rY   r  r  `  se    1  $  $3 $ $6) 6	#W 	# 	#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                ,    t         |   ||||       y )Nr   )r   re   )rd   r   r   r   r   r   s        rY   re   zResourceRoute.__init__  s      	GNX 	 	
rX   c                 f    dj                  | 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                 H    | j                   y | j                   j                  S r`   )r   r]   rg   s    rY   r]   zResourceRoute.name  s    >>!~~"""rX   r   rl   c                 V    | j                   J  | j                   j                  |i |S )r   )r   rn   r   s      rY   rn   zResourceRoute.url_for  s.    ~~)))%t~~%%t6v66rX   c                 R    | j                   J | j                   j                         S r`   )r   rz   rg   s    rY   rz   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   rz   r   r   s   @rY   r9   r9   }  s     48



 w\ 223

 #	

 !0

 



# 

 #hsm # #
7S 7C 7C 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                 d    t         |   t        j                  | j                         || _        y r`   )r   re   r    r   rf  _http_exceptionr   s     rY   re   zSystemRoute.__init__  s"    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GrX   c                      y r`   rW   rg   s    rY   r]   zSystemRoute.name  r   rX   c                     d| j                   iS )NrQ   r  rg   s    rY   rz   zSystemRoute.get_info  s     $"6"677rX   ro   c                 "   K   | j                   wr`   r  rq   s     rY   rf  zSystemRoute._handle  s     """s   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j                  |       S )Nz*<SystemRoute {self.status}: {self.reason}>rg   )r   rg   s    rY   r   zSystemRoute.__repr__  s    ;BBBMMrX   )rR   rS   rT   r(   re   rU   r   rn   r   r   r]   rF   rz   r.   r0   rf  r  r   r   r   r   r   s   @rY   r   r     s    .} . .HS HC HC H hsm  8) 8#W # # + + + + + +N# NrX   r   c                   <    e Zd ZdefdZdeedef   fdZdefdZ	y)r;   r^   c                 B  K   | j                   j                  t        j                  vr| j	                          t        | | j                   j                  j                         d       }|| j	                           |        d {   }t        |t              sJ |S 7 wr`   )	ro   r   r    METH_ALL_raise_allowed_methodsgetattrr   r   r0   )rd   r   rets      rY   _iterz
View._iter  s}     <<dmm3'')t||2288:DA>'')Hn#~...
 s   BBBBNc                 >    | j                         j                         S r`   )r  	__await__rg   s    rY   r  zView.__await__  s    zz|%%''rX   c                     t         j                  D ch c]  }t        | |j                               s|! }}t	        | j
                  j                  |      c c}w r`   )r    r  hasattrr   r+   ro   r   )rd   r  r   s      rY   r  zView._raise_allowed_methods  sE    &*mmPwtQWWY7O1PP"4<<#6#6HH Qs
   AA)
rR   rS   rT   r0   r  r   r   r  r   r  rW   rX   rY   r;   r;     s4    	^ 	(9S$%>? (I IrX   r;   c                   P    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y)	ResourcesViewr  r^   Nc                     || _         y 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              #   8   K   | j                   E d {    y 7 wr`   r  rg   s    rY   r
  zResourcesView.__iter__  s     ??""   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    sL    $$'7"8 $T $$ $#(#34 #+V + +rX   r  c                   L    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y)	
RoutesViewr  c                 d    g | _         |D ]$  }|D ]  }| j                   j                  |        & y r`   )r   r   )rd   r  r   r   s       rY   re   zRoutesView.__init__  s9    ,.! 	+H! +##E*+	+rX   r^   c                 ,    t        | j                        S r`   r  rg   s    rY   r  zRoutesView.__len__  r  rX   c              #   8   K   | j                   E d {    y 7 wr`   r   rg   s    rY   r
  zRoutesView.__iter__  s     <<r  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    sD    +$'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                 >    t         |           g | _        i | _        y r`   )r   re   r  _named_resourcesr   s    rY   re   zUrlDispatcher.__init__  s    24=?rX   ro   c                    K   |j                   }t               }| j                  D ])  }|j                  |       d {   \  }}||c S ||z  }+ |rt	        t        ||            S t	        t                     S 7 >wr`   )r   r   r  rr   r   r+   r,   )rd   ro   r   r   r   r   alloweds          rY   rr   zUrlDispatcher.resolve  s     $'E 	+H(0(8(8(A"AJ%!!7*	+ !"6v"OPP!,.11 #Bs   :A=A;?A=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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 566rX   c                 "   t        |t              s
J d|       | j                  rt        d      |j                  }|| j
                  j                  |      }|D ]P  }t        j                  |      rt        d|d      |j                         r8t        dj                  |             || j                  v r(t        dj                  || j                  |               || j                  |<   | j                  j                  |       y )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]   rB  r5  s        rY   register_resourcezUrlDispatcher.register_resource   s)   &
 	OA(N	O 
 ;;OPP}}&&,,T2E $$T*$/x 8) ) 
 ((*$1 28	  t,,, ..4fT4;P;PQU;V.W  +3D!!$'x(rX   r\   rG   c                   |r|j                  d      st        d      | j                  r?| j                  d   }|j                  |k(  r!|j	                  |      rt        t        |      S d|v sBd|v s>t        j                  |      s)t        t        |      |      }| j                  |       |S t        ||      }| j                  |       |S )NrB   z)path should be started with / or be emptyr%  r&  r\   )r  r   r  r]   r   r   r5   rA   searchr6   r.  r8  r7   )rd   rG   r]   r   s       rY   add_resourcezUrlDispatcher.add_resourceA  s    ,HII??r*H}}$););D)AHh//tsd{hood.C$]4%8tDH""8,O"4d3x(rX   )r]   r   r   r   r   c                P    | j                  ||      }|j                  |||      S )Nr\   r   )r<  r   )rd   r   rG   r   r]   r   r   s          rY   r   zUrlDispatcher.add_routeQ  s1     $$T$5!!&'.!QQrX   rS  FrT  rK   rU  rV  rW  rX  c          
          |j                  d      sJ |j                  d      r|dd }t        ||||||||      }	| j                  |	       |	S )z^Add static files view.

        prefix - url prefix
        path - folder with files

        rB   Nr:  rT  )r  r  r:   r8  )
rd   rK   rG   r]   r   rU  rV  rW  rX  r   s
             rY   
add_staticzUrlDispatcher.add_static]  sf    $   %%%??3CR[F!)!!+)	
 	x(rX   rl   c                 H     | 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~~dnndGFvFFrX   c                 H     | j                   t        j                  ||fi |S )z+Shortcut for add_route with method OPTIONS.)r   r    METH_OPTIONSrB  s       rY   add_optionszUrlDispatcher.add_options  s"    t~~d//wI&IIrX   T)r]   
allow_headrH  c                    | j                  ||      }|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    rA  METH_GET)rd   rG   r   r]   rH  rl   r   s          rY   add_getzUrlDispatcher.add_get  sU     $$T$5Ht~~wA&A!x!!$--CFCCrX   c                 H     | j                   t        j                  ||fi |S )z(Shortcut for add_route with method POST.)r   r    	METH_POSTrB  s       rY   add_postzUrlDispatcher.add_post  rD  rX   c                 H     | j                   t        j                  ||fi |S )z'Shortcut for add_route with method PUT.)r   r    METH_PUTrB  s       rY   add_putzUrlDispatcher.add_put  s     t~~dmmT7EfEErX   c                 H     | j                   t        j                  ||fi |S )z)Shortcut for add_route with method PATCH.)r   r    
METH_PATCHrB  s       rY   	add_patchzUrlDispatcher.add_patch  s     t~~dootWGGGrX   c                 H     | j                   t        j                  ||fi |S )z*Shortcut for add_route with method DELETE.)r   r    METH_DELETErB  s       rY   
add_deletezUrlDispatcher.add_delete  s"    t~~d..gHHHrX   c                 H     | j                   t        j                  ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r   r    r   rB  s       rY   add_viewzUrlDispatcher.add_view  s"     t~~dmmT7EfEErX   c                 d    t         |           | j                  D ]  }|j                           y r`   )r   r|   r  )rd   r   r   s     rY   r|   zUrlDispatcher.freeze  s*     	HOO	rX   rL   c                 X    g }|D ]"  }|j                  |j                  |              $ |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  s8      	?I$$Y%7%7%=>	?  rX   r   )6rR   rS   rT   r/  r1  r4  re   r.   r3   rr   r   rU   r
  r  r  r  r   r  r4   r-  r  r  r  rL   r   r1  r8  r   r5   r<  r   r&   r   r#   r   r8   r   r'   r?  r   rC  rG  rK  rN  rQ  rT  rW  rY  r|   r   r1   r   r`  r   r   s   @rY   r2   r2     sB   BJJx(M@
2W 21D 2 +(3- +* *1V 1 1+ +(8 +.= .+
 +7.>)>!? 7)*: )t )B @D  x}  , #37
R
R 
R w\ 223	
R sm
R !0
R 

R" #37$  %$    
 sm  !0          
 DGS G7 Gc Gm GJ Jg J J J #DD D
 smD D D 
D&GS G7 Gc Gm GFC F' FS F] FHc HG Hs H} HIs IW I I IFF"&|"4F@CF	F

!*:!; 
!]@S 
!rX   r2   r?  c                 z    t         dk  r| j                  dd      } t        j                  | d      j                  S )Nri  rk  rl  Fr  )r?   ro  r   r  r   r?  s    rY   rE  rE    s1    fc5)99%/888rX   c                 D    t        j                  | d      j                  S r  )r   r  rG   rb  s    rY   r=  r=    s    99%.333rX   c                 H    t        |       }d| v r|j                  dd      }|S )Nrk  rl  )rE  ro  )r?  r   s     rY   r.  r.    s*     F
e|s+MrX   )wr   r   r  	functoolsr  r  r   r5  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   r1  r@   rA   r0  rC   r   r   partialr  rF   r4   ABCr8   r3   r   r   r5   r6   r7   rK  r:   r  rO   r  r  r  r9   r   r;   r  r  r2   rE  r=  r.  rW   rX   rY   <module>r{     s4   
        	 	  %   "     2 2  @ @   '  +   2 * $CH~HH',S6Hl6H6H6Mbq6Q-R'SeE#s(O$ S&0bjj+'gcl#  !+

1!%
  !ryy~%* % 7)Yx/G%HHI/0#c(:;i48"	 "&,/uh7 ,/^N3CGG N3b@B($5 @BF
( 
L7 Lt L7" 7"x&6H &6RI
h I
X% 2K
^ K
\)
^ )
X377 %(! %(P6 6 M2 M:!)M !)HN- N<I< I(+E8$45yAQ7R +%/=1I %"M!NGC1A,A$B M!`9s 9s 94 4 4  rX   