o
    n~btC                     @   sf  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 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$ 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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@ dZAerddlBmCZC eedge
d f  ZDeee2e4ge
d f  ZEeee2eCge
e4 f edeCge
eC f f ZFeeF ZGeeeeFeHf   ZIed ZJneZDeZEeZFeZGee ZIeZJG dd deeKef ZLG dd deMZNer'eeeLge	d f  ZOneZOG dd deOZPdS )    N)partialupdate_wrapper)TYPE_CHECKINGAnyAsyncIterator	AwaitableCallableDictIterableIteratorListMappingMutableMappingOptionalSequenceTupleTypeUnioncast)Signal)
FrozenList   )hdrs)AbstractAccessLoggerAbstractMatchInfoAbstractRouterAbstractStreamWriter)DEBUG)RawRequestMessage)
web_logger)StreamReader)AccessLogger)_fix_request_current_app)RequestHandler)Request)StreamResponse)AbstractRouteDef)Server)AbstractResourceAbstractRouteDomain
MaskDomainMatchedSubAppResourcePrefixedSubAppResourceUrlDispatcher)ApplicationCleanupError)Handlerr/   c                       sr  e Zd Zeg dZeddddddddejdee	 d	e
e d
eeeef  dedeej deddfddZded  ddfddZerPdededdf fddZdedefddZdedefddZdvddZded eddfd!d"Zdeddfd#d$Zdefd%d&Zdee fd'd(Z e!dejfd)d*Z"deej ddfd+d,Z#e!defd-d.Z$dvd/d0Z%e!defd1d2Z&dvd3d4Z'e!defd5d6Z(dwd8d9Z)d:ed7d de*fd;d<Z+d=e,g e*f d7d de*fd>d?Z-d@ed7d de*fdAdBZ.dCe
e/ de0e1 fdDdEZ2e!de3fdFdGZ4e!de5fdHdIZ6e!de5fdJdKZ7e!de5fdLdMZ8e!dxdOdPZ9e!de	fdQdRZ:e!de;fdSdTZ<de=dUdeej dVee> dWede?fdXdYZ@de=dUdeej dVee> dWede?fdZd[ZAdvd\d]ZBdvd^d_ZCdvd`daZDeEfdbeFdceGddeHdeeIdfdgdheeE deEfdidjZJdeeKeef  fdkdlZLdmeEdeMfdndoZNdydpdqZOdefdrdsZPdefdtduZQ  ZRS )zr/   )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   .)r2   routermiddlewareshandler_argsclient_max_sizeloopdebugr2   rE   rF   rG   rH   rI   rJ   returnc                C   s  |d u rt  }ntjdtdd t|tsJ ||d ur%tjdtdd |dur1t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)r.   warningswarnDeprecationWarning
isinstancer   r3   r4   r5   r6   r2   r   r7   r8   r9   r:   r;   r<   r=   r   r>   r?   r@   rA   CleanupContextrC   appendrB   )selfr2   rE   rF   rG   rH   rI   rJ   rD   rD   :/usr/local/lib/python3.10/dist-packages/aiohttp/web_app.py__init__i   sD   





zApplication.__init__clsc                 C   s   t jd| jtdd d S )Nz8Inheritance class {} from web.Application is discouragedrL   rM   )rO   rP   format__name__rQ   )rX   rD   rD   rV   __init_subclass__   s   
zApplication.__init_subclass__namevalc                    s2   || j vrtjd|tdd t || d S )Nz:Setting custom web.Application.{} attribute is discouragedrL   rM   )ATTRSrO   rP   rY   rQ   super__setattr__)rU   r\   r]   	__class__rD   rV   r`      s   
zApplication.__setattr__otherc                 C   s   | |u S NrD   )rU   rc   rD   rD   rV   __eq__   s   zApplication.__eq__keyc                 C   s
   | j | S rd   )r:   rU   rf   rD   rD   rV   __getitem__      
zApplication.__getitem__c                 C   s   | j rtjdtdd d S d S )Nz=Changing state of started or joined application is deprecated   rM   )r;   rO   rP   rQ   rU   rD   rD   rV   _check_frozen   s   
zApplication._check_frozenvaluec                 C   s   |    || j|< d S rd   rl   r:   )rU   rf   rm   rD   rD   rV   __setitem__   s   zApplication.__setitem__c                 C   s   |    | j|= d S rd   rn   rg   rD   rD   rV   __delitem__   s   zApplication.__delitem__c                 C   
   t | jS rd   )lenr:   rk   rD   rD   rV   __len__   ri   zApplication.__len__c                 C   rq   rd   )iterr:   rk   rD   rD   rV   __iter__   ri   zApplication.__iter__c                 C   s   t jdtdd ttj| jS )Nzloop property is deprecatedrL   rM   )rO   rP   rQ   r   asyncioAbstractEventLoopr5   rk   rD   rD   rV   rI      s   zApplication.loopc                 C   s`   |d u rt  }| jd ur| j|urtd|| _| jdu r#| | _| jD ]}|| q&d S )Nz8web.Application instance initialized with different loop.)rv   get_event_loopr5   RuntimeErrorr3   	get_debugr=   	_set_loop)rU   rI   subapprD   rD   rV   r{      s   


zApplication._set_loopc                 C      | j S rd   )r<   rk   rD   rD   rV   
pre_frozen      zApplication.pre_frozenc                 C   s   | j rd S d| _ | j  | j  | j  | j  | j  | j  | j  t	| 
 | _| jr7dnd| _| jD ]}|  | jpH|j| _q=d S )NTF)r<   r7   freezer4   r>   rC   r?   r@   rA   tuple_prepare_middlewarer8   rF   r9   r=   
pre_freezerU   r|   rD   rD   rV   r      s    







zApplication.pre_freezec                 C   r}   rd   )r;   rk   rD   rD   rV   frozen
  r   zApplication.frozenc                 C   s0   | j rd S |   d| _ | jD ]}|  qd S NT)r;   r   r=   r   r   rD   rD   rV   r     s   

zApplication.freezec                 C   s   t jdtdd | jS )Nzdebug property is deprecatedrL   rM   )rO   rP   rQ   r3   rk   rD   rD   rV   rJ     s   zApplication.debugr|   c                    s4   dt dd f fdd}|d |d |d d S )NsignamerK   c                    s2   t |  d fdd}t | }|| d S )Nappr/   rK   c                    s     I d H  d S rd   )send)r   )r|   subsigrD   rV   handler   s   zEApplication._reg_subapp_signals.<locals>.reg_handler.<locals>.handler)r   r/   rK   N)getattrrT   )r   r   Zappsigr   )r   rV   reg_handler  s   

z4Application._reg_subapp_signals.<locals>.reg_handler
on_startupon_shutdown
on_cleanup)str)rU   r|   r   rD   r   rV   _reg_subapp_signals  s   	zApplication._reg_subapp_signalsprefixc                 C   s@   t |ts	td|d}|stdtt||}| ||S )NzPrefix must be str/zPrefix cannot be empty)rR   r   	TypeErrorrstrip
ValueErrorr   r-   _add_subapp)rU   r   r|   factoryrD   rD   rV   
add_subapp*  s   

zApplication.add_subappresource_factoryc                 C   sf   | j rtd|j rtd| }| j| | | | j| |  | jd ur1|	| j |S )Nz0Cannot add sub application to frozen applicationzCannot add frozen application)
r   ry   rE   Zregister_resourcer   r=   rT   r   r5   r{   )rU   r   r|   resourcerD   rD   rV   r   3  s   

zApplication._add_subappdomainc                 C   sD   t |ts	tdd|v rt|}nt|}tt||}| ||S )NzDomain must be str*)rR   r   r   r+   r*   r   r,   r   )rU   r   r|   ruler   rD   rD   rV   
add_domainC  s   

zApplication.add_domainroutesc                 C   s   | j |S rd   )rE   
add_routes)rU   r   rD   rD   rV   r   M  s   zApplication.add_routesc                 C   r}   rd   )r>   rk   rD   rD   rV   on_response_prepareP  r   zApplication.on_response_preparec                 C   r}   rd   )r?   rk   rD   rD   rV   r   T  r   zApplication.on_startupc                 C   r}   rd   )r@   rk   rD   rD   rV   r   X  r   zApplication.on_shutdownc                 C   r}   rd   )rA   rk   rD   rD   rV   r   \  r   zApplication.on_cleanuprS   c                 C   r}   rd   )rC   rk   rD   rD   rV   cleanup_ctx`  r   zApplication.cleanup_ctxc                 C   r}   rd   )r4   rk   rD   rD   rV   rE   d  r   zApplication.routerc                 C   r}   rd   )r7   rk   rD   rD   rV   rF   h  r   zApplication.middlewaresrI   access_log_classr   kwargsc                K   sz   t |tstd|| | |   | j|d< ||d< | jr/| j D ]\}}|||< q&t	| j
f| j| jd|S )NzMaccess_log_class must be subclass of aiohttp.abc.AbstractAccessLogger, got {}rJ   r   )Zrequest_factoryrI   )
issubclassr   r   rY   r{   r   r3   r6   itemsr'   _handle_make_requestr5   )rU   rI   r   r   kvrD   rD   rV   _make_handlerl  s(   



zApplication._make_handlerc                K   s&   t jdtdd | jd||d|S )NzFApplication.make_handler(...) is deprecated, use AppRunner API insteadrL   rM   r   rD   )rO   rP   rQ   r   )rU   rI   r   r   rD   rD   rV   make_handler  s   zApplication.make_handlerc                       | 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   rk   rD   rD   rV   startup     zApplication.startupc                    r   )zMCauses on_shutdown signal

        Should be called before cleanup()
        N)r   r   rk   rD   rD   rV   shutdown  r   zApplication.shutdownc                    s6   | j jr| j | I dH  dS | j| I dH  dS )zLCauses on_cleanup signal

        Should be called after shutdown()
        N)r   r   r   rC   rA   rk   rD   rD   rV   cleanup  s   zApplication.cleanupmessagepayloadprotocolwritertaskzasyncio.Task[None]_clsc              	   C   s   ||||||| j | jdS )N)rH   )r5   rB   )rU   r   r   r   r   r   r   rD   rD   rV   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 #2252rL   rM   F)reversedr7   r   rO   rP   rY   rQ   r"   )rU   mrD   rD   rV   r     s   zApplication._prepare_middlewarerequestc                    s  t  }| }| j|I d H }|r t|ts td||	|  |
  d }||_|jtj}|rG||I d H }|j I d H  |d u r|j}| jrx|jd d d D ]}|jD ]\}	}
|
rntt|	|d|}q^|	||I d H }q^qY||I d H }|S )Nz9match_info should be AbstractMatchInfo instance, not {!r})r   )rv   rx   rz   r4   resolverR   r   r   rY   Zadd_appr   Z_match_infoheadersgetr   ZEXPECTZexpect_handlerr   drainr   r9   Zappsr8   r   r   )rU   r   rI   rJ   Z
match_inforespexpectr   r   r   	new_stylerD   rD   rV   r     s>   

zApplication._handlec                 C   s   | S )zgunicorn compatibilityrD   rk   rD   rD   rV   __call__  s   zApplication.__call__c                 C   s   dt | ddS )Nz<Application 0xx>)idrk   rD   rD   rV   __repr__   s   zApplication.__repr__c                 C   s   dS r   rD   rk   rD   rD   rV   __bool__  s   zApplication.__bool__rK   N)r|   r/   rK   N)rK   rS   )rK   r/   )SrZ   
__module____qualname__	frozensetr^   r   loggingLoggerr   r.   r
   _Middlewarer   r   r   intrv   rw   rW   r   r[   r   r`   objectboolre   rh   rl   ro   rp   rs   r   ru   propertyrI   r{   r~   r   r   r   rJ   r   r(   r   r   r   r   r&   r   r)   r   _RespPrepareSignalr   
_AppSignalr   r   r   r   rE   _MiddlewaresrF   r!   r   r'   r   r   r   r   r   r$   r   r    r#   r   r   r   r   r%   r   r   r   r   __classcell__rD   rD   ra   rV   r/   Q   s    	

7


	
	



!





&c                   @   s"   e Zd Zedee fddZdS )r0   rK   c                 C   s   t tt | jd S )Nr   )r   r   BaseExceptionargsrk   rD   rD   rV   
exceptions  s   zCleanupError.exceptionsN)rZ   r   r   r   r   r   r   rD   rD   rD   rV   r0     s    r0   c                       sB   e Zd Zd
 fddZdeddfddZdeddfdd	Z  ZS )rS   rK   Nc                    s   t    g | _d S rd   )r_   rW   _exitsrk   ra   rD   rV   rW     s   

zCleanupContext.__init__r   c                    s6   | D ]}||  }| I d H  | j| qd S rd   )	__aiter__	__anext__r   rT   )rU   r   cbitrD   rD   rV   r?     s   zCleanupContext._on_startupc                    s   g }t | jD ]5}z	| I d H  W n ty   Y q ty2 } z|| W Y d }~qd }~ww |t|d q|rOt|dkrJ|d td|d S )Nz has more than one 'yield'r   r   z Multiple errors on cleanup stage)	r   r   r   StopAsyncIteration	ExceptionrT   ry   rr   r0   )rU   r   errorsr   excrD   rD   rV   rA     s"   
zCleanupContext._on_cleanupr   )rZ   r   r   rW   r/   r?   rA   r   rD   rD   ra   rV   rS     s    rS   )Qrv   r   rO   	functoolsr   r   typingr   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   helpersr   Zhttp_parserr   logr   streamsr    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*   r+   r,   r-   r.   __all__Ztypedefsr1   r   r   r   r   r   Z_MiddlewaresHandlersZ_Subappsr   r/   ry   r0   Z_CleanupContextBaserS   rD   rD   rD   rV   <module>   sb    L$

   9