o
    zsgbL                  	   @   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ZTde0ded d ee;gee= f fd!d"ZUed#d$eUZVG d%d deeeWe(e	 f e	f ZXG d&d' d'eYZZerPe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handlerapps)r7   .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   K/var/www/html/minecraft/env/lib/python3.10/site-packages/aiohttp/web_app.py_build_middlewaresS   s
   rH   i   )maxsizec                       s  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edee defddZededefddZdeeee f defddZdd d!Zedee d"eddfd#d$Z eded"eddfd%d$Z deeee f d"eddfd&d$Z deeee f ddfd'd(Z!defd)d*Z"de#eeee f  fd+d,Z$defd-d.Z%eddee d/ddee fd0d1Z&edee d/e'deee'f fd2d1Z&edded/edefd3d1Z&ddeeee f d/edefd4d1Z&e(dejfd5d6Z)deej ddfd7d8Z*e(defd9d:Z+dd;d<Z,e(defd=d>Z-dd?d@Z.e(defdAdBZ/ddDdEZ0dFedCd de1fdGdHZ2dIe3g e4f dCd de4fdJdKZ5dLedCd de6fdMdNZ7dOe
e8 de9e: fdPdQZ;e(de<fdRdSZ=e(de>fdTdUZ?e(de>fdVdWZ@e(de>fdXdYZAe(dd[d\ZBe(de	fd]d^ZCe(deDfd_d`ZEdeFdadeej dbeeG dcedeHfdddeZIdeFdadeej dbeeG dcedeHfdfdgZJddhdiZKddjdkZLddldmZMeNfdneOdoePdpeQdqeRdrdsdteeN deNfdudvZSde#eTeef  fdwdxZUdyeNdeVfdzd{ZWdd|d}ZXdefd~dZYdef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debugrJ   r\   r]   r^   r_   r`   ra   r?   c                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 | _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   rK   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   sF   





zApplication.__init__clsc                 C   s   t jd| jtdd d S )Nz8Inheritance class {} from web.Application is discouraged   rc   )re   rf   format__name__rg   )rm   rF   rF   rG   __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 discouragedrb   rc   )ATTRSre   rf   ro   rg   super__setattr__)rk   rr   rs   	__class__rF   rG   rv      s   
zApplication.__setattr__otherc                 C   s   | |u S NrF   )rk   ry   rF   rF   rG   __eq__      zApplication.__eq__keyc                 C      d S rz   rF   rk   r}   rF   rF   rG   __getitem__      zApplication.__getitem__c                 C   r~   rz   rF   r   rF   rF   rG   r      r   c                 C   s
   | j | S rz   )rR   r   rF   rF   rG   r         
c                 C   s   | j rtjdtdd d S d S )Nz=Changing state of started or joined application is deprecatedrn   rc   )rS   re   rf   rg   rk   rF   rF   rG   _check_frozen   s   
zApplication._check_frozenvaluec                 C   r~   rz   rF   rk   r}   r   rF   rF   rG   __setitem__   r   zApplication.__setitem__c                 C   r~   rz   rF   r   rF   rF   rG   r      r   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 rz   )r   rR   r   rF   rF   rG   __delitem__   s   zApplication.__delitem__c                 C   
   t | jS rz   )lenrR   r   rF   rF   rG   __len__   r   zApplication.__len__c                 C   r   rz   )iterrR   r   rF   rF   rG   __iter__   r   zApplication.__iter__c                 C   s   t | S rz   idr   rF   rF   rG   __hash__   r|   zApplication.__hash__defaultc                 C   r~   rz   rF   rk   r}   r   rF   rF   rG   get   r   zApplication.getc                 C   r~   rz   rF   r   rF   rF   rG   r      r   c                 C   r~   rz   rF   r   rF   rF   rG   r      r   c                 C   s   | j ||S rz   )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.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.)r   get_event_looprM   RuntimeErrorrK   	get_debugrU   	_set_loop)rk   r`   subapprF   rF   rG   r     s   


zApplication._set_loopc                 C      | j S rz   )rT   r   rF   rF   rG   
pre_frozen!     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rBdnd| _| jD ]}|  | jpS|j| _qHd S )NTc                 s   s    | ]\}}| V  qd S rz   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rk   r   rF   rF   rG   r   %  s&   







	
zApplication.pre_freezec                 C   r   rz   )rS   r   rF   rF   rG   frozenA  r   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.debugr   c                    s4   dt dd f fdd}|d |d |d d S )Nsignamer?   c                    s2   t |  d fdd}t | }|| d S )NrC   r7   r?   c                    s     I d H  d S rz   )send)rC   )r   subsigrF   rG   r=   W  s   zEApplication._reg_subapp_signals.<locals>.reg_handler.<locals>.handler)rC   r7   r?   N)getattrrj   )r   r=   appsigr   )r   rG   reg_handlerT  s   

z4Application._reg_subapp_signals.<locals>.reg_handler
on_startupon_shutdown
on_cleanup)str)rk   r   r   rF   r   rG   _reg_subapp_signalsS  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)rh   r   	TypeErrorrstrip
ValueErrorr   r4   _add_subapp)rk   r   r   factoryrF   rF   rG   
add_subappa  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   r   r\   register_resourcer   rU   rj   r   rM   r   )rk   r   r   resourcerF   rF   rG   r   j  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*)rh   r   r   r2   r1   r   r3   r   )rk   r   r   ruler   rF   rF   rG   
add_domainz  s   

zApplication.add_domainroutesc                 C   s   | j |S rz   )r\   
add_routes)rk   r   rF   rF   rG   r     s   zApplication.add_routesc                 C   r   rz   )rV   r   rF   rF   rG   on_response_prepare  r   zApplication.on_response_preparec                 C   r   rz   )rW   r   rF   rF   rG   r     r   zApplication.on_startupc                 C   r   rz   )rX   r   rF   rF   rG   r     r   zApplication.on_shutdownc                 C   r   rz   )rY   r   rF   rF   rG   r     r   zApplication.on_cleanupri   c                 C   r   rz   )r[   r   rF   rF   rG   cleanup_ctx  r   zApplication.cleanup_ctxc                 C   r   rz   )rL   r   rF   rF   rG   r\     r   zApplication.routerc                 C   r   rz   )rO   r   rF   rF   rG   r]     r   zApplication.middlewaresr`   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 {}ra   r   )request_factoryr`   )
issubclassr   r   ro   r   r   rK   rN   itemsr.   _handle_make_requestrM   )rk   r`   r   r   kvrF   rF   rG   _make_handler  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 insteadrb   rc   r   rF   )re   rf   rg   r   )rk   r`   r   r   rF   rF   rG   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   r   rF   rF   rG   startup     zApplication.startupc                    r   )zMCauses on_shutdown signal

        Should be called before cleanup()
        N)r   r   r   rF   rF   rG   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   r[   rY   r   rF   rF   rG   cleanup  s   zApplication.cleanupmessagepayloadprotocolwritertaskzasyncio.Task[None]_clsc              	   C   s,   t r	| jd us	J ||||||| j| jdS )N)r_   )r   rM   rZ   )rk   r   r   r   r   r   r   rF   rF   rG   r     s   	zApplication._make_requestc                 c   sb    t | jD ]!}t|dd dkr|dfV  qtjd|dtdd |dfV  qt| dfV  d S )	N__middleware_version__r   Tzold-style middleware "z" deprecated, see #2252rb   rc   F)reversedrO   r   re   rf   rg   r)   )rk   rD   rF   rF   rG   r     s   
zApplication._prepare_middlewarerequestc           
         s  t  }| }| j|I d H }|r t|ts td||	|  |
  ||_|jtjrI||I d H }|j I d H  |d urI|S |j}| jr| js_t|jts_t||j}n'|jd d d D ]}|jD ]\}}	|	r|tt||d|}ql|||I d H }qlqg||I d H S )Nz9match_info should be AbstractMatchInfo instance, not {!r}r@   rA   )r   r   r   rL   resolverh   r   r   ro   add_appr   _match_infoheadersr   r   EXPECTexpect_handlerr   drainr=   rQ   rP   router5   _cached_build_middlewarer>   rB   r   r   )
rk   r   r`   ra   
match_inforespr=   rC   rD   r   rF   rF   rG   r     sB   

zApplication._handlec                 C   s   | S )zgunicorn compatibilityrF   r   rF   rF   rG   __call__;  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__B  r   zApplication.__bool__r?   N).rz   )r   r7   r?   N)r?   ri   )r?   r7   )\rp   
__module____qualname__	frozensetrt   r#   loggingLoggerr   r6   r   r&   r   r   r   intr   r   rl   r   rq   r    rv   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   rw   rG   r7   `   s   	

8
""$$

	
	



!





,c                   @   s"   e Zd Zedee fddZdS )r8   r?   c                 C   s   t tt | jd S )Nr   )r   r   BaseExceptionargsr   rF   rF   rG   
exceptionsG  s   zCleanupError.exceptionsN)rp   r   r   r   r   r   r  rF   rF   rF   rG   r8   F  s    r8   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 )ri   r?   Nc                    s   t    g | _d S rz   )ru   rl   _exitsr   rw   rF   rG   rl   S  s   

zCleanupContext.__init__rC   c                    s6   | D ]}||  }| I d H  | j| qd S rz   )	__aiter__	__anext__r  rj   )rk   rC   cbitrF   rF   rG   rW   W  s   zCleanupContext._on_startupc                    s   g }t | jD ]8}z	| I d H  W n" ty   Y q ttjfy5 } z|| W Y d }~qd }~ww |t|d q|rRt	|dkrM|d t
d|d S )Nz has more than one 'yield'r   r   z Multiple errors on cleanup stage)r   r  r  StopAsyncIteration	Exceptionr   CancelledErrorrj   r   r   r8   )rk   rC   errorsr  excrF   rF   rG   rY   ]  s"   
zCleanupContext._on_cleanupr   )rp   r   r   rl   r7   rW   rY   r   rF   rF   rw   rG   ri   R  s    ri   )]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   	aiosignalr   
frozenlistr    r   abcr   r   r   r   helpersr    r!   http_parserr"   logr#   streamsr$   typedefsr%   r&   web_exceptionsr'   web_logr(   web_middlewaresr)   web_protocolr*   web_requestr+   web_responser,   web_routedefr-   
web_serverr.   web_urldispatcherr/   r0   r1   r2   r3   r4   r5   r6   __all__r   r   r   r   _MiddlewaresHandlers_Subappsr9   r:   r;   rH   r   r   r7   r   r8   _CleanupContextBaseri   rF   rF   rF   rG   <module>   sn    T(


$   i