a
    nJhG                     @   sl  d dl Z d dlZd dlZd dl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.m/Z/ ddl0m1Z1 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@mAZAmBZBmCZCmDZDmEZEmFZFmGZG dZHereedge
d f  ZIeee9e;ge
d f  ZJee/ ZKeeee/eLf   ZMed ZNneZIeZJeZKee ZMeZNedZOedZPG dd deeeQe'e f ef ZRG dd deSZTerTeeeRge	d f  ZUneZUG dd deUZVdS )     N)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)
Middleware)NotAppKeyWarning)AccessLogger)_fix_request_current_app)RequestHandler)Request)StreamResponse)AbstractRouteDef)Server)AbstractResourceAbstractRouteDomain
MaskDomainMatchedSubAppResourcePrefixedSubAppResourceUrlDispatcher)ApplicationCleanupErrorr4   _T_Uc                
       sV  e Zd Zeg d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ddZ eeee f eddddZ eeee f ddd d!Z!edd"d#Z"e#eeee f  dd$d%Z$edtee dee d&d'd(Z%eee e&eee&f d&d)d(Z%edueeed&d*d(Z%dveeee f eed&d+d(Z%e'ejdd,d-Z(eej dd.d/d0Z)e'edd1d2Z*ddd3d4Z+e'edd5d6Z,ddd7d8Z-e'edd9d:Z.d dd;d<d=Z/ed e0d>d?d@Z1e2g e0f d e0dAdBdCZ3ed e0dDdEdFZ4e
e5 e6e7 dGdHdIZ8e'e9ddJdKZ:e'e;ddLdMZ<e'e;ddNdOZ=e'e;ddPdQZ>e'dRddSdTZ?e'e	ddUdVZ@e'eAddWdXZBdeCdYeej eeD eeEdZd[d\ZFdeCdYeej eeD eeEdZd]d^ZGddd_d`ZHdddadbZIdddcddZJeKfeLeMeNeOdeeeK eKdfdgdhZPe#eQeef  ddidjZReKeSdkdldmZTd ddndoZUeddpdqZVeddrdsZW  ZXS )wr4   )logger_debug_router_loop_handler_args_middlewares_middlewares_handlers_run_middlewares_state_frozen_pre_frozen_subapps_on_response_prepare_on_startup_on_shutdown_on_cleanup_client_max_size_cleanup_ctxN i   .)r8   routermiddlewareshandler_argsclient_max_sizeloopdebug)r8   rK   rL   rM   rN   rO   rP   returnc                C   s  |d u rt  }ntjdtdd t|ts2J ||d urJtjdtdd |durbtjdtdd || _|| _|| _|| _	|| _
t|| _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 deprecatedF)r3   warningswarnDeprecationWarning
isinstancer   r9   r:   r;   r<   r8   r   r=   r>   r?   r@   rA   rB   rC   r   rD   rE   rF   rG   CleanupContextrI   appendrH   )selfr8   rK   rL   rM   rN   rO   rP   rJ   rJ   A/var/www/shaz/venv/lib/python3.9/site-packages/aiohttp/web_app.py__init__i   sD    




zApplication.__init__)clsrQ   c                 C   s   t jd| jtdd d S )Nz8Inheritance class {} from web.Application is discouraged   rS   )rU   rV   format__name__rW   )r^   rJ   rJ   r\   __init_subclass__   s    zApplication.__init_subclass__)namevalrQ   c                    s2   || j vr tjd|tdd t || d S )Nz:Setting custom web.Application.{} attribute is discouragedrR   rS   )ATTRSrU   rV   r`   rW   super__setattr__)r[   rc   rd   	__class__rJ   r\   rg      s    
zApplication.__setattr__)otherrQ   c                 C   s   | |u S NrJ   )r[   rj   rJ   rJ   r\   __eq__   s    zApplication.__eq__)keyrQ   c                 C   s   d S rk   rJ   r[   rm   rJ   rJ   r\   __getitem__   s    zApplication.__getitem__c                 C   s   d S rk   rJ   rn   rJ   rJ   r\   ro      s    c                 C   s
   | j | S rk   )r@   rn   rJ   rJ   r\   ro      s    rQ   c                 C   s   | j rtjdtdd d S )Nz=Changing state of started or joined application is deprecatedr_   rS   )rA   rU   rV   rW   r[   rJ   rJ   r\   _check_frozen   s    zApplication._check_frozen)rm   valuerQ   c                 C   s   d S rk   rJ   r[   rm   rs   rJ   rJ   r\   __setitem__   s    zApplication.__setitem__c                 C   s   d S rk   rJ   rt   rJ   rJ   r\   ru      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-configrR   )categoryrT   )rr   rX   r    rU   rV   r%   r@   rt   rJ   rJ   r\   ru      s    
c                 C   s   |    | j|= d S rk   )rr   r@   rn   rJ   rJ   r\   __delitem__   s    zApplication.__delitem__c                 C   s
   t | jS rk   )lenr@   rq   rJ   rJ   r\   __len__   s    zApplication.__len__c                 C   s
   t | jS rk   )iterr@   rq   rJ   rJ   r\   __iter__   s    zApplication.__iter__)rm   defaultrQ   c                 C   s   d S rk   rJ   r[   rm   r|   rJ   rJ   r\   get   s    zApplication.getc                 C   s   d S rk   rJ   r}   rJ   rJ   r\   r~      s    c                 C   s   d S rk   rJ   r}   rJ   rJ   r\   r~      s    c                 C   s   | j ||S rk   )r@   r~   r}   rJ   rJ   r\   r~      s    c                 C   s   t jdtdd ttj| jS )Nzloop property is deprecatedrR   rS   )rU   rV   rW   r   asyncioAbstractEventLoopr;   rq   rJ   rJ   r\   rO      s    zApplication.loop)rO   rQ   c                 C   s`   |d u rt  }| jd ur,| j|ur,td|| _| jdu rF| | _| jD ]}|| qLd S )Nz8web.Application instance initialized with different loop.)r   get_event_loopr;   RuntimeErrorr9   	get_debugrC   	_set_loop)r[   rO   subapprJ   rJ   r\   r     s    


zApplication._set_loopc                 C   s   | j S rk   )rB   rq   rJ   rJ   r\   
pre_frozen  s    zApplication.pre_frozenc                 C   s   | j r
d S d| _ | j  | j  | j  | j  | j  | j  | j  t	| 
 | _| jrndnd| _| jD ]}|  | jp|j| _qzd S )NTF)rB   r=   freezer:   rD   rI   rE   rF   rG   tuple_prepare_middlewarer>   rL   r?   rC   
pre_freezer[   r   rJ   rJ   r\   r     s    







zApplication.pre_freezec                 C   s   | j S rk   )rA   rq   rJ   rJ   r\   frozen1  s    zApplication.frozenc                 C   s0   | j r
d S |   d| _ | jD ]}|  qd S NT)rA   r   rC   r   r   rJ   rJ   r\   r   5  s    
zApplication.freezec                 C   s   t jdtdd | jS )Nzdebug property is deprecatedrR   rS   )rU   rV   rW   r9   rq   rJ   rJ   r\   rP   >  s    zApplication.debug)r   rQ   c                    s2   t d d fdd}|d |d |d d S )N)signamerQ   c                    s8   t |  dd d fdd}t | }|| d S )Nr4   apprQ   c                    s     I d H  d S rk   )send)r   )r   subsigrJ   r\   handlerG  s    zEApplication._reg_subapp_signals.<locals>.reg_handler.<locals>.handler)getattrrZ   )r   r   Zappsigr   )r   r\   reg_handlerD  s    

z4Application._reg_subapp_signals.<locals>.reg_handler
on_startupon_shutdown
on_cleanup)str)r[   r   r   rJ   r   r\   _reg_subapp_signalsC  s    	zApplication._reg_subapp_signals)prefixr   rQ   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)rX   r   	TypeErrorrstrip
ValueErrorr   r2   _add_subapp)r[   r   r   factoryrJ   rJ   r\   
add_subappQ  s    

zApplication.add_subapp)resource_factoryr   rQ   c                 C   sf   | j rtd|j rtd| }| j| | | | j| |  | jd urb|	| j |S )Nz0Cannot add sub application to frozen applicationzCannot add frozen application)
r   r   rK   Zregister_resourcer   rC   rZ   r   r;   r   )r[   r   r   resourcerJ   rJ   r\   r   Z  s    

zApplication._add_subapp)domainr   rQ   c                 C   sF   t |tstdnd|v r&t|}nt|}tt||}| ||S )NzDomain must be str*)rX   r   r   r0   r/   r   r1   r   )r[   r   r   ruler   rJ   rJ   r\   
add_domainj  s    


zApplication.add_domain)routesrQ   c                 C   s   | j |S rk   )rK   
add_routes)r[   r   rJ   rJ   r\   r   t  s    zApplication.add_routesc                 C   s   | j S rk   )rD   rq   rJ   rJ   r\   on_response_preparew  s    zApplication.on_response_preparec                 C   s   | j S rk   )rE   rq   rJ   rJ   r\   r   {  s    zApplication.on_startupc                 C   s   | j S rk   )rF   rq   rJ   rJ   r\   r     s    zApplication.on_shutdownc                 C   s   | j S rk   )rG   rq   rJ   rJ   r\   r     s    zApplication.on_cleanuprY   c                 C   s   | j S rk   )rI   rq   rJ   rJ   r\   cleanup_ctx  s    zApplication.cleanup_ctxc                 C   s   | j S rk   )r:   rq   rJ   rJ   r\   rK     s    zApplication.routerc                 C   s   | j S rk   )r=   rq   rJ   rJ   r\   rL     s    zApplication.middlewaresrO   access_log_class)rO   r   kwargsrQ   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 {}rP   r   )Zrequest_factoryrO   )
issubclassr   r   r`   r   r   r9   r<   itemsr,   _handle_make_requestr;   )r[   rO   r   r   kvrJ   rJ   r\   _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 insteadrR   rS   r   )rU   rV   rW   r   )r[   rO   r   r   rJ   rJ   r\   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   rq   rJ   rJ   r\   startup  s    zApplication.startupc                    s   | j | I dH  dS )zMCauses on_shutdown signal

        Should be called before cleanup()
        N)r   r   rq   rJ   rJ   r\   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   rI   rG   rq   rJ   rJ   r\   cleanup  s    zApplication.cleanupzasyncio.Task[None])messagepayloadprotocolwritertask_clsrQ   c              	   C   s   ||||||| j | jdS )N)rN   )r;   rH   )r[   r   r   r   r   r   r   rJ   rJ   r\   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 #2252rR   rS   F)reversedr=   r   rU   rV   r`   rW   r'   )r[   mrJ   rJ   r\   r     s    zApplication._prepare_middleware)requestrQ   c                    s   t  }| }| j|I d H }|r>t|ts>td||	|  |
  d }||_|jtj}|r||I d H }|j I d H  |d u r|j}| jr|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   )r   r   r   r:   resolverX   r   r   r`   Zadd_appr   Z_match_infoheadersr~   r   ZEXPECTZexpect_handlerr   Zdrainr   r?   Zappsr>   r   r   )r[   r   rO   rP   Z
match_inforespexpectr   r   r   	new_stylerJ   rJ   r\   r     s<    

zApplication._handlec                 C   s   | S )zgunicorn compatibilityrJ   rq   rJ   rJ   r\   __call__#  s    zApplication.__call__c                 C   s   dt | ddS )Nz<Application 0xx>)idrq   rJ   rJ   r\   __repr__'  s    zApplication.__repr__c                 C   s   dS r   rJ   rq   rJ   rJ   r\   __bool__*  s    zApplication.__bool__).).)N)Yra   
__module____qualname__	frozensetre   r"   loggingLoggerr   r3   r
   r$   r   r   r   intr   r   r]   r   rb   r   rg   objectboolrl   r   r    r6   ro   r   rr   ru   rw   ry   r   r{   r~   r7   propertyrO   r   r   r   r   r   rP   r   r-   r   r   r   r   r+   r   r.   r   _RespPrepareSignalr   
_AppSignalr   r   r   r   rK   _MiddlewaresrL   r&   r   r,   r   r   r   r   r   r)   r!   r#   r(   r   r   r   r   r*   r   r   r   r   __classcell__rJ   rJ   rh   r\   r4   Q   s   7  	

!&c                   @   s"   e Zd Zeee dddZdS )r5   rp   c                 C   s   t tt | jd S )Nr   )r   r   BaseExceptionargsrq   rJ   rJ   r\   
exceptions/  s    zCleanupError.exceptionsN)ra   r   r   r   r   r   r   rJ   rJ   rJ   r\   r5   .  s   r5   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 )
rY   Nrp   c                    s   t    g | _d S rk   )rf   r]   _exitsrq   rh   rJ   r\   r]   ;  s    
zCleanupContext.__init__r   c                    s4   | D ]*}||  }| I d H  | j| qd S rk   )	__aiter__	__anext__r   rZ   )r[   r   cbitrJ   rJ   r\   rE   ?  s    zCleanupContext._on_startupc                    s   g }t | jD ]j}z| I d H  W n> ty6   Y q tyb } z|| W Y d }~qd }~0 0 |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	ExceptionrZ   r   rx   r5   )r[   r   errorsr   excrJ   rJ   r\   rG   E  s     
zCleanupContext._on_cleanup)ra   r   r   r]   r4   rE   rG   r   rJ   rJ   rh   r\   rY   :  s   rY   )Wr   r   rU   	functoolsr   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$   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-   r.   r/   r0   r1   r2   r3   __all__r   r   r   r   Z_MiddlewaresHandlersZ_Subappsr6   r7   r   r4   r   r5   Z_CleanupContextBaserY   rJ   rJ   rJ   r\   <module>   sZ   T$

$   `