U
    ;g/L                     @   s  d dl Z d dlZd dlZd dlmZmZ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 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% dd	l&m'Z'm(Z( dd
l)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJ dZKereedged f  ZLeee;e=ged f  ZMee1 ZNeeee1eOf   ZPed ZQneZLeZMeZNee ZPeZQedZRedZSedeCdZTe0ed ee;gee= f ddd ZUed!d"eUZVG d#d deeeWe(e	 f e	f ZXG d$d% d%eYZZereeeXge
d f  Z[neZ[G d&d' d'e[Z\dS )(    N)	lru_cachepartialupdate_wrapper)TYPE_CHECKINGAnyAsyncIterator	AwaitableCallableDictIterableIteratorListMappingMutableMappingOptionalSequenceTupleTypeTypeVarUnioncastoverload)Signal)
FrozenList   )hdrs)AbstractAccessLoggerAbstractMatchInfoAbstractRouterAbstractStreamWriter)DEBUGAppKey)RawRequestMessage)
web_logger)StreamReader)Handler
Middleware)NotAppKeyWarning)AccessLogger)_fix_request_current_app)RequestHandler)Request)StreamResponse)AbstractRouteDef)Server)AbstractResourceAbstractRouteDomain
MaskDomainMatchedSubAppResourcePrefixedSubAppResourceSystemRouteUrlDispatcher)ApplicationCleanupErrorr7   _T_U	_Resource)bound)r7   .)handlerappsreturnc                 C   s:   |ddd D ]&}|j D ]\}}tt|| d| } qq| S )zApply middlewares to handler.Nr=   )_middlewares_handlersr   r   )r=   r>   appm_ rF   O/opt/bot/vods_filmes/script/venv/lib/python3.8/site-packages/aiohttp/web_app.py_build_middlewaresS   s    rH   i   )maxsizec                       s  e Zd Zeddddddddd	d
dddddddddgZedddddddejee	 e
e eeeef  eeej eddddZed  ddddZereedd fd d!Zeed"d#d$Zeee ed%d&d'Zeeed%d(d'Zeeee f ed%d)d'Zdd*d+d,Zeee edd-d.d/Z eeedd-d0d/Z eeee f edd-d1d/Z eeee f dd%d2d3Z!ed*d4d5Z"e#eeee f  d*d6d7Z$ed*d8d9Z%edee dee d:d;d<Z&eee e'eee'f d:d=d<Z&edeeed:d>d<Z&deeee f eed:d?d<Z&e(ejd*d@dAZ)eej ddBdCdDZ*e(ed*dEdFZ+dd*dGdHZ,e(ed*dIdJZ-dd*dKdLZ.e(ed*dMdNZ/d ddOdPdQZ0ed e1dRdSdTZ2e3g e4f d e4dUdVdWZ5ed e6dXdYdZZ7e
e8 e9e: d[d\d]Z;e(e<d*d^d_Z=e(e>d*d`daZ?e(e>d*dbdcZ@e(e>d*dddeZAe(dfd*dgdhZBe(e	d*didjZCe(eDd*dkdlZEdeFdmeej eeG eeHdndodpZIdeFdmeej eeG eeHdndqdrZJdd*dsdtZKdd*dudvZLdd*dwdxZMeNfeOePeQeRdyeeN eNdzd{d|ZSe#eTeef  d*d}d~ZUeNeVdddZWd d*ddZXed*ddZYed*ddZZ  Z[S )r7   logger_debug_router_loop_handler_args_middlewaresrB   _has_legacy_middlewares_run_middlewares_state_frozen_pre_frozen_subapps_on_response_prepare_on_startup_on_shutdown_on_cleanup_client_max_size_cleanup_ctxNrF   i   .)rJ   routermiddlewareshandler_argsclient_max_sizeloopdebug)rJ   r\   r]   r^   r_   r`   ra   r?   c                C   s  |d krt  }ntjdtdd t|ts2t||d k	rJtjdtdd |dk	rbtjdtdd || _|| _|| _	|| _
|| _t|| _d | _d | _d| _i | _d| _d| _g | _t| | _t| | _t| | _t| | _t | _| j| jj | j| jj || _d S )	Nzrouter argument is deprecated   
stacklevelzloop argument is deprecated.zdebug argument is deprecatedTF)r6   warningswarnDeprecationWarning
isinstancer   AssertionErrorrK   rL   rM   rN   rJ   r   rO   rB   rQ   rP   rR   rS   rT   rU   r   rV   rW   rX   rY   CleanupContextr[   appendrZ   )selfrJ   r\   r]   r^   r_   r`   ra   rF   rF   rG   __init__y   sR          




zApplication.__init__)clsr?   c                 C   s   t jd| jtdd d S )Nz8Inheritance class {} from web.Application is discouraged   rc   )re   rf   format__name__rg   )rn   rF   rF   rG   __init_subclass__   s    zApplication.__init_subclass__)namevalr?   c                    s2   || j kr tjd|tdd t || d S )Nz:Setting custom web.Application.{} attribute is discouragedrb   rc   )ATTRSre   rf   rp   rg   super__setattr__)rl   rs   rt   	__class__rF   rG   rw      s    
zApplication.__setattr__)otherr?   c                 C   s   | |kS NrF   )rl   rz   rF   rF   rG   __eq__   s    zApplication.__eq__)keyr?   c                 C   s   d S r{   rF   rl   r}   rF   rF   rG   __getitem__   s    zApplication.__getitem__c                 C   s   d S r{   rF   r~   rF   rF   rG   r      s    c                 C   s
   | j | S r{   )rR   r~   rF   rF   rG   r      s    r?   c                 C   s   | j rtjdtdd d S )Nz=Changing state of started or joined application is deprecatedro   rc   )rS   re   rf   rg   rl   rF   rF   rG   _check_frozen   s    zApplication._check_frozen)r}   valuer?   c                 C   s   d S r{   rF   rl   r}   r   rF   rF   rG   __setitem__   s    zApplication.__setitem__c                 C   s   d S r{   rF   r   rF   rF   rG   r      s    c                 C   s0   |    t|ts"tjdtdd || j|< d S )NzIt is recommended to use web.AppKey instances for keys.
https://docs.aiohttp.org/en/stable/web_advanced.html#application-s-configrb   )categoryrd   )r   rh   r!   re   rf   r'   rR   r   rF   rF   rG   r      s    
c                 C   s   |    | j|= d S r{   )r   rR   r~   rF   rF   rG   __delitem__   s    zApplication.__delitem__c                 C   s
   t | jS r{   )lenrR   r   rF   rF   rG   __len__   s    zApplication.__len__c                 C   s
   t | jS r{   )iterrR   r   rF   rF   rG   __iter__   s    zApplication.__iter__c                 C   s   t | S r{   idr   rF   rF   rG   __hash__   s    zApplication.__hash__)r}   defaultr?   c                 C   s   d S r{   rF   rl   r}   r   rF   rF   rG   get   s    zApplication.getc                 C   s   d S r{   rF   r   rF   rF   rG   r      s    c                 C   s   d S r{   rF   r   rF   rF   rG   r      s    c                 C   s   | j ||S r{   )rR   r   r   rF   rF   rG   r     s    c                 C   s   t jdtdd ttj| jS )Nzloop property is deprecatedrb   rc   )re   rf   rg   r   asyncioAbstractEventLooprM   r   rF   rF   rG   r`     s    zApplication.loop)r`   r?   c                 C   s`   |d krt  }| jd k	r,| j|k	r,td|| _| jdkrF| | _| jD ]}|| qLd S )Nz8web.Application instance initialized with different loop.)r   get_event_looprM   RuntimeErrorrK   	get_debugrU   	_set_loop)rl   r`   subapprF   rF   rG   r     s    


zApplication._set_loopc                 C   s   | j S r{   )rT   r   rF   rF   rG   
pre_frozen!  s    zApplication.pre_frozenc                 C   s   | j r
d S d| _ | j  | j  | j  | j  | j  | j  | j  t	| 
 | _tdd | jD | _| jrdnd| _| jD ]}|  | jp|j| _qd S )NTc                 s   s   | ]\}}| V  qd S r{   rF   ).0rE   	new_stylerF   rF   rG   	<genexpr>2  s    z)Application.pre_freeze.<locals>.<genexpr>F)rT   rO   freezerL   rV   r[   rW   rX   rY   tuple_prepare_middlewarerB   anyrP   r]   rQ   rU   
pre_freezerl   r   rF   rF   rG   r   %  s$    







	
zApplication.pre_freezec                 C   s   | j S r{   )rS   r   rF   rF   rG   frozenA  s    zApplication.frozenc                 C   s0   | j r
d S |   d| _ | jD ]}|  qd S NT)rS   r   rU   r   r   rF   rF   rG   r   E  s    
zApplication.freezec                 C   s   t jdtdd | jS )Nzdebug property is deprecatedrb   rc   )re   rf   rg   rK   r   rF   rF   rG   ra   N  s    zApplication.debug)r   r?   c                    s2   t d d fdd}|d |d |d d S )N)signamer?   c                    s8   t |  dd d fdd}t | }|| d S )Nr7   rC   r?   c                    s     I d H  d S r{   )send)rC   )r   subsigrF   rG   r=   W  s    zEApplication._reg_subapp_signals.<locals>.reg_handler.<locals>.handler)getattrrk   )r   r=   Zappsigr   )r   rG   reg_handlerT  s    

z4Application._reg_subapp_signals.<locals>.reg_handler
on_startupon_shutdown
on_cleanup)str)rl   r   r   rF   r   rG   _reg_subapp_signalsS  s    	zApplication._reg_subapp_signals)prefixr   r?   c                 C   s@   t |tstd|d}|s(tdtt||}| ||S )NzPrefix must be str/zPrefix cannot be empty)rh   r   	TypeErrorrstrip
ValueErrorr   r4   _add_subapp)rl   r   r   factoryrF   rF   rG   
add_subappa  s    

zApplication.add_subapp)resource_factoryr   r?   c                 C   sf   | j rtd|j rtd| }| j| | | | j| |  | jd k	rb|	| j |S )Nz0Cannot add sub application to frozen applicationzCannot add frozen application)
r   r   r\   Zregister_resourcer   rU   rk   r   rM   r   )rl   r   r   resourcerF   rF   rG   r   j  s    

zApplication._add_subapp)domainr   r?   c                 C   sF   t |tstdnd|kr&t|}nt|}tt||}| ||S )NzDomain must be str*)rh   r   r   r2   r1   r   r3   r   )rl   r   r   ruler   rF   rF   rG   
add_domainz  s    


zApplication.add_domain)routesr?   c                 C   s   | j |S r{   )r\   
add_routes)rl   r   rF   rF   rG   r     s    zApplication.add_routesc                 C   s   | j S r{   )rV   r   rF   rF   rG   on_response_prepare  s    zApplication.on_response_preparec                 C   s   | j S r{   )rW   r   rF   rF   rG   r     s    zApplication.on_startupc                 C   s   | j S r{   )rX   r   rF   rF   rG   r     s    zApplication.on_shutdownc                 C   s   | j S r{   )rY   r   rF   rF   rG   r     s    zApplication.on_cleanuprj   c                 C   s   | j S r{   )r[   r   rF   rF   rG   cleanup_ctx  s    zApplication.cleanup_ctxc                 C   s   | j S r{   )rL   r   rF   rF   rG   r\     s    zApplication.routerc                 C   s   | j S r{   )rO   r   rF   rF   rG   r]     s    zApplication.middlewaresr`   access_log_class)r`   r   kwargsr?   c                K   sz   t |tstd|| | |   | j|d< ||d< | jr^| j D ]\}}|||< qLt	| j
f| j| jd|S )NzMaccess_log_class must be subclass of aiohttp.abc.AbstractAccessLogger, got {}ra   r   )Zrequest_factoryr`   )
issubclassr   r   rp   r   r   rK   rN   itemsr.   _handle_make_requestrM   )rl   r`   r   r   kvrF   rF   rG   _make_handler  s*    



zApplication._make_handlerc                K   s&   t jdtdd | jf ||d|S )NzFApplication.make_handler(...) is deprecated, use AppRunner API insteadrb   rc   r   )re   rf   rg   r   )rl   r`   r   r   rF   rF   rG   make_handler  s     zApplication.make_handlerc                    s   | j | I dH  dS )zmCauses on_startup signal

        Should be called in the event loop along with the request handler.
        N)r   r   r   rF   rF   rG   startup  s    zApplication.startupc                    s   | j | I dH  dS )zMCauses on_shutdown signal

        Should be called before cleanup()
        N)r   r   r   rF   rF   rG   shutdown  s    zApplication.shutdownc                    s2   | j jr| j | I dH  n| j| I dH  dS )zLCauses on_cleanup signal

        Should be called after shutdown()
        N)r   r   r   r[   rY   r   rF   rF   rG   cleanup  s    zApplication.cleanupzasyncio.Task[None])messagepayloadprotocolwritertask_clsr?   c              	   C   s   ||||||| j | jdS )N)r_   )rM   rZ   )rl   r   r   r   r   r   r   rF   rF   rG   r     s    	zApplication._make_requestc                 c   s^   t | jD ]@}t|dd dkr*|dfV  q
tjd|tdd |dfV  q
t| dfV  d S )NZ__middleware_version__r   Tz1old-style middleware "{!r}" deprecated, see #2252rb   rc   F)reversedrO   r   re   rf   rp   rg   r)   )rl   rD   rF   rF   rG   r     s    zApplication._prepare_middleware)requestr?   c           
         s  t  }| }| j|I d H }|r>t|ts>td||	|  |
  ||_|jtjr||I d H }|j I d H  |d k	r|S |j}| jr| jst|jtst||j}nN|jd d d D ]<}|jD ]0\}}	|	rtt||d|}q|||I d H }qq||I d H S )Nz9match_info should be AbstractMatchInfo instance, not {!r}r@   rA   )r   r   r   rL   resolverh   r   r   rp   Zadd_appr   Z_match_infoheadersr   r   ZEXPECTZexpect_handlerr   Zdrainr=   rQ   rP   Zrouter5   _cached_build_middlewarer>   rB   r   r   )
rl   r   r`   ra   Z
match_inforespr=   rC   rD   r   rF   rF   rG   r     sD    

 
 zApplication._handlec                 C   s   | S )zgunicorn compatibilityrF   r   rF   rF   rG   __call__9  s    zApplication.__call__c                 C   s   dt | ddS )Nz<Application 0xx>r   r   rF   rF   rG   __repr__=  s    zApplication.__repr__c                 C   s   dS r   rF   r   rF   rF   rG   __bool__@  s    zApplication.__bool__).).)N)\rq   
__module____qualname__	frozensetru   r#   loggingLoggerr   r6   r   r&   r   r   r   intr   r   rm   r   rr   r    rw   objectboolr|   r   r!   r9   r   r   r   r   r   r   r   r   r   r   r:   propertyr`   r   r   r   r   r   ra   r   r4   r   r	   r;   r   r3   r   r-   r   r0   r   _RespPrepareSignalr   
_AppSignalr   r   r   r   r\   _Middlewaresr]   r(   r   r.   r   r   r   r   r   r+   r"   r$   r*   r   r   r   r   r,   r   r   r   r   __classcell__rF   rF   rx   rG   r7   `   s  8  	

 
!,c                   @   s"   e Zd Zeee dddZdS )r8   r   c                 C   s   t tt | jd S )Nr   )r   r   BaseExceptionargsr   rF   rF   rG   
exceptionsE  s    zCleanupError.exceptionsN)rq   r   r   r   r   r   r   rF   rF   rF   rG   r8   D  s   r8   c                       sB   e Zd Zdd fddZeddddZedddd	Z  ZS )
rj   Nr   c                    s   t    g | _d S r{   )rv   rm   _exitsr   rx   rF   rG   rm   Q  s    
zCleanupContext.__init__r   c                    s4   | D ]*}||  }| I d H  | j| qd S r{   )	__aiter__	__anext__r   rk   )rl   rC   cbitrF   rF   rG   rW   U  s    zCleanupContext._on_startupc                    s   g }t | jD ]p}z| I d H  W nD tk
r8   Y q ttjfk
rh } z|| W 5 d }~X Y qX |t|d q|rt	|dkr|d n
t
d|d S )Nz has more than one 'yield'r   r   z Multiple errors on cleanup stage)r   r   r   StopAsyncIteration	Exceptionr   ZCancelledErrorrk   r   r   r8   )rl   rC   errorsr   excrF   rF   rG   rY   [  s    
zCleanupContext._on_cleanup)rq   r   r   rm   r7   rW   rY   r   rF   rF   rx   rG   rj   P  s   rj   )]r   r   re   	functoolsr   r   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	aiosignalr   Z
frozenlistr    r   abcr   r   r   r   Zhelpersr    r!   Zhttp_parserr"   logr#   streamsr$   Ztypedefsr%   r&   Zweb_exceptionsr'   Zweb_logr(   Zweb_middlewaresr)   Zweb_protocolr*   Zweb_requestr+   Zweb_responser,   Zweb_routedefr-   Z
web_serverr.   Zweb_urldispatcherr/   r0   r1   r2   r3   r4   r5   r6   __all__r   r   r   r   Z_MiddlewaresHandlersZ_Subappsr9   r:   r;   rH   r   r   r7   r   r8   Z_CleanupContextBaserj   rF   rF   rF   rG   <module>   sf   T(
 
$   g