
    yiy                     Z   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+j                  d      dd             ZQee#eOdf      eRd<    ej                  d      ZTee eJ      eRd<    ej                  d      ZUee eJ      eRd<    ej                  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Zsy)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<   y)	_InfoDictpath	formatterpattern	directoryprefixr8   routesr<   appdomainAbstractRuleMatchingrulehttp_exceptionN)	__name__
__module____qualname__str__annotations__r   r   r   r(        T/root/polymarket_arb/.venv/lib/python3.12/site-packages/aiohttp/web_urldispatcher.pyrE   rE   ^   sG    
INS\OKC())	K
  !!rW   rE   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     rX   __init__zAbstractResource.__init__r   s	    
rW   c                     | j                   S r_   r`   rc   s    rX   r\   zAbstractResource.nameu       zzrW   c                      y)zWExposes the resource's canonical path.

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

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

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

        Required for subapplications support.
        NrV   rc   rJ   s     rX   
add_prefixzAbstractResource.add_prefix   rj   rW   c                      yz;Return a dict with additional info useful for introspectionNrV   rf   s    rX   get_infozAbstractResource.get_info   rj   rW   c                      y r_   rV   rf   s    rX   freezezAbstractResource.freeze   s    rW   rF   c                      y)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   rv   rE   ry   r{   boolr~   rV   rW   rX   r4   r4   q   s1   04    hsm   3    	A A A A 	W    	    	J) J J 	/c /d / /rW   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 onesrn   r]   c                    K    |       }t        j                  |      r
| d {   }t        |t              sJ |S 7 wr_   )asyncioiscoroutine
isinstancer0   )rn   resultold_handlers     rX   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)rc   r   r   r   r   r   r   s         @rX   rd   zAbstractRoute.__init__   s&    !4N**
 	<((:;	< 
 ##F+x'BCDD )') &&w/((1MMK" &:g|+LMM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                      y)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                      yrx   rV   rf   s    rX   ry   zAbstractRoute.get_info   rj   rW   argsrk   c                      y)/Construct url for route with additional params.NrV   rc   r   rk   s      rX   rm   zAbstractRoute.url_for   rj   rW   rn   c                 @   K   | j                  |       d {   S 7 wr_   )r   rp   s     rX   handle_expect_headerz"AbstractRoute.handle_expect_header   s     ))'2222s   )rQ   rR   rS   rT   r   r&   r   r#   r   _ExpectHandlerr4   rd   r   r   r   r   r   r\   r   rE   ry   r   rm   r.   r0   r   rV   rW   rX   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 3rW   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)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                      y r_   rV   rf   s    rX   rP   z"UrlMappingMatchInfo.http_exception      rW   c                 6    | j                   j                         S r_   )r   ry   rf   s    rX   ry   zUrlMappingMatchInfo.get_info	  s    {{##%%rW   )r<   .c                 ,    t        | j                        S r_   )tupler   rf   s    rX   appszUrlMappingMatchInfo.apps  s    TZZ  rW   rL   r<   c                     | j                   rt        d      | j                  || _        | j                  j	                  d|       y )Nz-Cannot change apps stack after .freeze() callr   )r   RuntimeErrorr   r   insertrc   rL   s     rX   add_appzUrlMappingMatchInfo.add_app  s=    <<NOO$ #D

!S!rW   c                 &    | j                   }|J |S r_   )r   r   s     rX   current_appzUrlMappingMatchInfo.current_app  s    
rW   )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   )rc   rL   prevs      rX   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   rf   s    rX   r{   zUrlMappingMatchInfo.freeze-  s	    rW   c                 B    dt         |           d| j                   dS )Nz<MatchInfo z: >)r   __repr__r   rc   r   s    rX   r   zUrlMappingMatchInfo.__repr__0  s%    UW-/04;;-q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   ry   r   r   r   r   r   r   r   r{   r   __classcell__r   s   @rX   r3   r3      s   4S> -  # # # }   0 0 0  7  &) & !e./ ! !"  
 %= %Y?O5P % %B# B BrW   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 )MatchInfoErrorrP   r]   Nc                 Z    || _         t        | 	  i t        | j                                y r_   )
_exceptionr   rd   SystemRouterc   rP   r   s     rX   rd   zMatchInfoError.__init__5  s"    ([9:rW   c                     | j                   S r_   )r   rf   s    rX   rP   zMatchInfoError.http_exception9      rW   c                 v    dj                  | j                  j                  | j                  j                        S )Nz<MatchInfoError {}: {}>)r   r   statusreasonrf   s    rX   r   zMatchInfoError.__repr__=  s.    (//OO""DOO$:$:
 	
rW   )
rQ   rR   rS   r(   rd   r   rP   rT   r   r   r   s   @rX   r   r   4  s=    ;} ; ;   
# 
rW   r   rn   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)   )rn   expects     rX   r   r   C  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   rd   _routes)rc   r\   r   s     rX   rd   zResource.__init__R  s    d#,.rW   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)rc   r   r   r   	route_objs        rX   	add_routezResource.add_routeV  sz      	I6)Y-=-=-N"!!'i!8 	 "&'4W	I&rW   c                 n    t        |t              s
J d|       | j                  j                  |       y )Nz)Instance of Route class is required, got )r   r9   r   appendrc   r   s     rX   r   zResource.register_routej  s>    =
 	A6ui@	A 
 	E"rW   rn   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   )rc   rn   allowed_methodsr   r   route_methods         rX   rq   zResource.resolvep  s     $'E[[!9!9:
(( 	)I$++L-w~~-1N+J	BOTT	) ((s   BBBrF   c                      y 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    DLL!!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  s    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|j                  d      sJ || _        y )Nr[   rB   )r   rd   
startswith_path)rc   rF   r\   r   s      rX   rd   zPlainResource.__init__  s.    d#4??3///
rW   c                     | j                   S r_   r  rf   s    rX   ri   zPlainResource.canonical  rg   rW   c                 ,    | j                   sd| _         y y )NrB   r  rf   s    rX   r{   zPlainResource.freeze  s    zzDJ rW   rJ   c                     |j                  d      sJ |j                  d      rJ t        |      dkD  sJ || j                  z   | _        y NrB   r   )r  endswithr  r  ru   s     rX   rv   zPlainResource.add_prefix  sH      %%%??3'''6{Qdjj(
rW   c                 &    | j                   |k(  ri S y r_   r  r}   s     rX   r   zPlainResource._match  s    ::IrW   c                      | j                   |k(  S r_   r  r}   s     rX   r~   zPlainResource.raw_match  s    zzT!!rW   c                     d| j                   iS )NrF   r  rf   s    rX   ry   zPlainResource.get_info  s    

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

|155rW   r   )rQ   rR   rS   rT   r   rd   r   ri   r{   rv   r   r   r   r~   rE   ry   r   rm   r   r   r   s   @rX   r6   r6     s    ;? S 8C= D 
 3  ) ) )3 8DcN#; "c "d "$) $8 8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                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   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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_   r3  rf   s    rX   ri   zDynamicResource.canonical  r   rW   rJ   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.  r0  r/  r2  rH   r3  ru   s     rX   rv   zDynamicResource.add_prefix  sp      %%%??3'''6{Q

299V#4t}}7L7L#LM 4??2rW   c                     | j                   j                  |      }|y |j                         j                         D ci c]  \  }}|t	        |       c}}S c c}}w r_   )r2  r(  r,  items_unquote_path)rc   rF   r   keyvalues        rX   r   zDynamicResource._match  s\    ''-= =BOO<M<S<S<U.8c5]5))  s    Ac                      | j                   |k(  S r_   r8  r}   s     rX   r~   zDynamicResource.raw_match  s    $&&rW   c                 4    | j                   | j                  dS )N)rG   rH   )r3  r2  rf   s    rX   ry   zDynamicResource.get_info  s    !__GGrW   partsc           
          | j                   j                  |j                         D ci c]  \  }}|t        |       c}}      }t	        j
                  |d      S c c}}w r  )r3  
format_mapr;  _quote_pathr   r  )rc   rA  kvurls        rX   rm   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\   rG   )r\   r   r3  rb   s     rX   r   zDynamicResource.__repr__  s@    )-)>sTYY%B5<< = 
 	
rW   )rQ   rR   rS   r.  r0  r'  r+  r*  rT   r   rd   r   ri   rv   r   r   r   r~   rE   ry   r   rm   r   r   r   s   @rX   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
# 
rW   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[   rJ   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   rd   r-  _prefix_prefix2)rc   rJ   r\   r   s      rX   rd   zPrefixResource.__init__  sh    V..s3;V;3"&//#*>FF>d#$V,s*rW   c                     | j                   S r_   )rL  rf   s    rX   ri   zPrefixResource.canonical
  r   rW   c                     |j                  d      sJ |j                  d      rJ t        |      dkD  sJ || j                  z   | _        | j                  dz   | _        y r  )r  r  r  rL  rM  ru   s     rX   rv   zPrefixResource.add_prefix  sX      %%%??3'''6{Q,s*rW   c                      yr   rV   ru   s     rX   r~   zPrefixResource.raw_match  s    rW   )rQ   rR   rS   rT   r   rd   r   ri   rv   r   r~   r   r   s   @rX   rJ  rJ    se    =A +s +Xc] +d + 3  + + +  rW   rJ  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:   rF  N   Fr\   r   
chunk_size
show_indexfollow_symlinksappend_versionrJ   rI   r\   r   rT  rU  rV  rW  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)rZ  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   rT  rU  rV  rW  r1  r   s             rX   rd   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)rW  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)rd  rT   lstripr   r  rL  r?   replacer`  joinpathrc  r   r\  rF   normpathrelative_torq   r   r_  is_fileopenread_get_file_hash
with_queryVERSION_KEY)
rc   rf  rW  rG  unresolved_pathnormalized_pathfilepathf
file_byteshs
             rX   rm   zStaticResource.url_forD  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      rX   ru  zStaticResource._get_file_hashm  s?    NN	&&qxxz2zz'""rW   c                 J    | j                   | j                  | j                  dS )N)rI   rJ   rK   )r`  rL  r   rf   s    rX   ry   zStaticResource.get_infot  s!    llll
 	
rW   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   )rc   r   s     rX   set_options_routez StaticResource.set_options_route{  s<    $>??"/wT5I5I#
YrW   rn   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)Nrf  r   )r   r   r   r   r   r  rM  rL  r<  r  r3   )rc   rn   rF   r   r   r   s         rX   rq   zStaticResource.resolve  s     ''dll+t}}-$$,,2F;((( -S5F5J5L0M"NO
#JV0DEWWs   B7B9c                 ,    t        | j                        S r_   r  rf   s    rX   r  zStaticResource.__len__  r  rW   c                 H    t        | j                  j                               S r_   )r  r   valuesrf   s    rX   r	  zStaticResource.__iter__  s    DLL'')**rW   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)Nrf  z	text/html)r   content_type)rT  )
match_infor   anchorr*   r`  ro  rc  r\  rF   rp  rq  rq   r   r_  r,   	ExceptionrL   logger	exceptionr^  ra  r/   _directory_as_htmlPermissionErrorrr  r-   rb  )rc   rn   r   rf  rx  ry  rz  r1  s           rX   re  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rz  c                 X   |j                         sJ |j                  | j                        j                         }d| }d| d}g }|j	                         }t        |      D ]  }|j                  | j                        j                         }| j                  dz   |z   }	|j                         r|j                   d}
n|j                  }
|j                  dj                  |	|
              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="{url}">{name}</a></li>)rG  r\   z<ul>
{}
</ul>
z<body>
z
</body>z<head>
<title>z</title>
</head>z<html>
z
</html>)r^  rq  r`  as_posixiterdirsortedrL  r\   r   r   join)rc   rz  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  sF       '33DOODMMO 456H:U#
$$&	I& 	E((9BBDH||c)H4H ||~$zzl!,	!JJ	5<< y = 	  %%dii
&;<"Rt9-$XJ.?@(2dV95rW   c                     | j                   d| j                   z   dz   nd}dj                  || j                  | j                        S )Nr  r   z/<StaticResource {name} {path} -> {directory!r}>)r\   rF   rI   )r\   r   rL  r`  rb   s     rX   r   zStaticResource.__repr__  sG    (,		(=sTYY$2@GGDLLDOO H 
 	
rW   )!rQ   rR   rS   rw  rT   r'   r   r   r
  r   rd   r   rm   staticmethodbytesru  rE   ry   r&   r  r.   r   rq   r  r   r8   r	  r0   re  r   r  r   r   r   s   @rX   r:   r:     sX   K #37$  %$$
$
 $

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

,,. 	(H'	(rW   c                     t         |   |       | j                  j                  j	                         D ]  }|j                  |        y r_   )r   rv   r  r  r  )rc   rJ   r   r   s      rX   rv   z!PrefixedSubAppResource.add_prefix  s@    6"		((22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TrW   c                 4    | j                   | j                  dS )N)rL   rJ   )r  rL  rf   s    rX   ry   zPrefixedSubAppResource.get_info  s    yyDLL99rW   rn   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_   )rG  r   r  rM  rL  r   r  r  rq   r   r   rP   r+   r   rc   rn   r  methodss       rX   rq   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  rK   rf   s    rX   r  zPrefixedSubAppResource.__len__  s     499##**,--rW   c                 \    t        | j                  j                  j                               S r_   )r  r  r  rK   rf   s    rX   r	  zPrefixedSubAppResource.__iter__  s     DII$$++-..rW   c                 P    dj                  | j                  | j                        S )Nz,<PrefixedSubAppResource {prefix} -> {app!r}>)rJ   rL   )r   rL  r  rf   s    rX   r   zPrefixedSubAppResource.__repr__  s(    =DD<<TYY E 
 	
rW   )rQ   rR   rS   rT   rd   rv   r   rm   rE   ry   r.   r   rq   r
  r  r   r8   r	  r   r   r   s   @rX   r  r    s    (s ( (4 (( ( (
US UC UC 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y)rN   rn   r]   c                    K   yw)z1Return bool if the request satisfies the criteriaNrV   rp   s     rX   r   zAbstractRuleMatching.match  rr   rs   c                      yrx   rV   rf   s    rX   ry   zAbstractRuleMatching.get_info  rj   rW   c                      y)zReturn a strNrV   rf   s    rX   ri   zAbstractRuleMatching.canonical   rj   rW   N)rQ   rR   rS   r   r   r.   r   r   rE   ry   r   rT   ri   rV   rW   rX   rN   rN     sy    @7 @t @ @ 	J) J J 3   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                 N    t         |           | j                  |      | _        y r_   )r   rd   
validation_domain)rc   rM   r   s     rX   rd   zDomain.__init__)  s    v.rW   c                     | j                   S r_   r  rf   s    rX   ri   zDomain.canonical-  r   rW   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xrc   s     rX   	<genexpr>z$Domain.validation.<locals>.<genexpr>;  s      N4<<))!,Ns   %(zDomain not validP   :)r   rT   	TypeErrorrstripr   r   r   raw_hostallr&  port)rc   rM   rG  s   `  rX   r  zDomain.validation1  s    &#&011s#))+566f_344)f$%||'''Ncll6H6H6MNN/0088r><<,,q
++rW   rn   c                    K   |j                   j                  t        j                        }|sy| j	                  |      S wr   )r   r   r    HOSTmatch_domain)rc   rn   hosts      rX   r   zDomain.matchA  s5     ""499-  &&s   >A r  c                 <    |j                         | 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   ry   zDomain.get_infoJ  s    $,,''rW   )rQ   rR   rS   r.  r0  r  rT   rd   r   ri   r  r.   r   r   r  rE   ry   r   r   s   @rX   r  r  &  s    bjj56G/s /t / 3  , , , '7 't ', , ,() (rW   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}(?<!-)rM   r]   Nc                     t         |   |       | j                  j                  dd      j                  dd      }t	        j
                  |      | _        y )Nr=   z\.*z.*)r   rd   r  rn  r.  r0  _mask)rc   rM   maskr   s      rX   rd   zMaskDomain.__init__Q  sC     ||##C/77TBZZ%
rW   c                 .    | j                   j                  S r_   )r  rH   rf   s    rX   ri   zMaskDomain.canonicalV  s    zz!!!rW   r  c                 <    | j                   j                  |      d uS r_   )r  r(  r  s     rX   r  zMaskDomain.match_domainZ  s    zz##D)55rW   )rQ   rR   rS   r.  r0  r  rT   rd   r   ri   r   r  r   r   s   @rX   r  r  N  sU    bjj78G&s &t &
 "3 " "6 6 6rW   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)MatchedSubAppResourcerO   rL   r<   r]   Nc                 X    t         j                  |        d| _        || _        || _        y )Nr   )r4   rd   rL  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    zz###rW   c                 4    | j                   | j                  dS )N)rL   rO   )r  r  rf   s    rX   ry   zMatchedSubAppResource.get_infoi  s    yy$**55rW   rn   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  rq   r   r   rP   r+   r   r  s       rX   rq   zMatchedSubAppResource.resolvel  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}>)rL   )r   r  rf   s    rX   r   zMatchedSubAppResource.__repr__w  s    6==$))=LLrW   )rQ   rR   rS   rN   rd   r   rT   ri   rE   ry   r.   r   rq   r   rV   rW   rX   r  r  ^  se    1  $  $3 $ $6) 6	#W 	# 	#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                ,    t         |   ||||       y )Nr   )r   rd   )rc   r   r   r   r   r   s        rX   rd   zResourceRoute.__init__~  s      	GNX 	 	
rW   c                 f    dj                  | 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                 H    | j                   y | j                   j                  S r_   )r   r\   rf   s    rX   r\   zResourceRoute.name  s    >>!~~"""rW   r   rk   c                 V    | j                   J  | j                   j                  |i |S )r   )r   rm   r   s      rX   rm   zResourceRoute.url_for  s.    ~~)))%t~~%%t6v66rW   c                 R    | j                   J | j                   j                         S r_   )r   ry   rf   s    rX   ry   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   ry   r   r   s   @rX   r9   r9   {  s     48



 w\ 223

 #	

 !0

 



# 

 #hsm # #
7S 7C 7C 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                 d    t         |   t        j                  | j                         || _        y r_   )r   rd   r    r   re  _http_exceptionr   s     rX   rd   zSystemRoute.__init__  s"    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GrW   c                      y r_   rV   rf   s    rX   r\   zSystemRoute.name  r   rW   c                     d| j                   iS )NrP   r  rf   s    rX   ry   zSystemRoute.get_info  s     $"6"677rW   rn   c                 "   K   | j                   wr_   r  rp   s     rX   re  zSystemRoute._handle  s     """s   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j                  |       S )Nz*<SystemRoute {self.status}: {self.reason}>rf   )r   rf   s    rX   r   zSystemRoute.__repr__  s    ;BBBMMrW   )rQ   rR   rS   r(   rd   rT   r   rm   r   r   r\   rE   ry   r.   r0   re  r
  r   r   r   r   r   s   @rX   r   r     s    .} . .HS HC HC H hsm  8) 8#W # # + + + + + +N# NrW   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_   )	rn   r   r    METH_ALL_raise_allowed_methodsgetattrr   r   r0   )rc   r   rets      rX   _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__rf   s    rX   r  zView.__await__  s    zz|%%''rW   c                     t         j                  D ch c]  }t        | |j                               s|! }}t	        | j
                  j                  |      c c}w r_   )r    r  hasattrr   r+   rn   r   )rc   r  r   s      rX   r  zView._raise_allowed_methods  sE    &*mmPwtQWWY7O1PP"4<<#6#6HH Qs
   AA)
rQ   rR   rS   r0   r	  r   r   r  r   r  rV   rW   rX   r;   r;     s4    	^ 	(9S$%>? (I IrW   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)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              #   8   K   | j                   E d {    y 7 wr_   r  rf   s    rX   r	  zResourcesView.__iter__  s     ??""   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    sL    $$'7"8 $T $$ $#(#34 #+V + +rW   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   )rc   r  r   r   s       rX   rd   zRoutesView.__init__  s9    ,.! 	+H! +##E*+	+rW   r]   c                 ,    t        | j                        S r_   r  rf   s    rX   r  zRoutesView.__len__  r  rW   c              #   8   K   | j                   E d {    y 7 wr_   r   rf   s    rX   r	  zRoutesView.__iter__  s     <<r  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    sD    +$'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                 >    t         |           g | _        i | _        y r_   )r   rd   r  _named_resourcesr   s    rX   rd   zUrlDispatcher.__init__  s    24=?rW   rn   c                    K   |j                   }t               }| j                  D ])  }|j                  |       d {   \  }}||c S ||z  }+ |rt	        t        ||            S t	        t                     S 7 >wr_   )r   r   r  rq   r   r+   r,   )rc   rn   r   r   r   r   alloweds          rX   rq   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#  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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 566rW   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   )rc   r   r\   rA  r4  s        rX   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(rW   r[   rF   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-  r6  r7   )rc   rF   r\   r   s       rX   add_resourcezUrlDispatcher.add_resource?  s    ,HII??r*H}}$););D)AHh//tsd{hood.C$]4%8tDH""8,O"4d3x(rW   )r\   r   r   r   r   c                P    | j                  ||      }|j                  |||      S )Nr[   r   )r:  r   )rc   r   rF   r   r\   r   r   s          rX   r   zUrlDispatcher.add_routeO  s1     $$T$5!!&'.!QQrW   rR  FrS  rJ   rT  rU  rV  rW  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   Nr8  rS  )r  r  r:   r6  )
rc   rJ   rF   r\   r   rT  rU  rV  rW  r   s
             rX   
add_staticzUrlDispatcher.add_static[  sf    $   %%%??3CR[F!)!!+)	
 	x(rW   rk   c                 H     | 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~~dnndGFvFFrW   c                 H     | j                   t        j                  ||fi |S )z+Shortcut for add_route with method OPTIONS.)r   r    METH_OPTIONSr@  s       rX   add_optionszUrlDispatcher.add_options  s"    t~~d//wI&IIrW   T)r\   
allow_headrF  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    r?  METH_GET)rc   rF   r   r\   rF  rk   r   s          rX   add_getzUrlDispatcher.add_get  sU     $$T$5Ht~~wA&A!x!!$--CFCCrW   c                 H     | j                   t        j                  ||fi |S )z(Shortcut for add_route with method POST.)r   r    	METH_POSTr@  s       rX   add_postzUrlDispatcher.add_post  rB  rW   c                 H     | j                   t        j                  ||fi |S )z'Shortcut for add_route with method PUT.)r   r    METH_PUTr@  s       rX   add_putzUrlDispatcher.add_put  s     t~~dmmT7EfEErW   c                 H     | j                   t        j                  ||fi |S )z)Shortcut for add_route with method PATCH.)r   r    
METH_PATCHr@  s       rX   	add_patchzUrlDispatcher.add_patch  s     t~~dootWGGGrW   c                 H     | j                   t        j                  ||fi |S )z*Shortcut for add_route with method DELETE.)r   r    METH_DELETEr@  s       rX   
add_deletezUrlDispatcher.add_delete  s"    t~~d..gHHHrW   c                 H     | j                   t        j                  ||fi |S )z?Shortcut for add_route with ANY methods for a class-based view.)r   r    r   r@  s       rX   add_viewzUrlDispatcher.add_view  s"     t~~dmmT7EfEErW   c                 d    t         |           | j                  D ]  }|j                           y r_   )r   r{   r  )rc   r   r   s     rX   r{   zUrlDispatcher.freeze  s*     	HOO	rW   rK   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)rc   rK   registered_routes	route_defs       rX   
add_routeszUrlDispatcher.add_routes  s8      	?I$$Y%7%7%=>	?  rW   r   )6rQ   rR   rS   r.  r0  r2  rd   r.   r3   rq   r   rT   r	  r
  r  r  r   r  r4   r+  r  r  r  rK   r   r/  r6  r   r5   r:  r   r&   r   r#   r   r8   r   r'   r=  r   rA  rE  rI  rL  rO  rR  rU  rW  r{   r   r1   r   r^  r   r   s   @rX   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 
!rW   r2   r>  c                 z    t         dk  r| j                  dd      } t        j                  | d      j                  S )Nrh  rj  rk  Fr  )r?   rn  r   r  r   r>  s    rX   rD  rD    s1    fc5)99%/888rW   c                 D    t        j                  | d      j                  S r  )r   r  rF   r`  s    rX   r<  r<    s    99%.333rW   c                 H    t        |       }d| v r|j                  dd      }|S )Nrj  rk  )rD  rn  )r>  r   s     rX   r-  r-    s*     F
e|s+MrW   )tr   r   r  r  r   r3  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   r0  r@   rA   r/  rC   r   r   rE   r4   ABCr8   r3   r   r   r5   r6   r7   rJ  r:   r  rN   r  r  r  r9   r   r;   r  r  r2   rD  r<  r-  rV   rW   rX   <module>rx     s   
      	 	  %   "     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(:;"	 "&,/uh7 ,/^N3CGG N3b@B($5 @BF
( 
L7 Lt L7" 7"x&6H &6RI
h I
X% 2M
^ M
`)
^ )
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  rW   