o
    m=8jK                  	   @   s  d dl Z d dlZd dlZd dl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mZmZ d dl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/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZI dZJered ZKee:e<f ZLee0 ZMeeeNe0eOf   ZPeQd ZRneZKeZLeZMee ZPeQZRedZSedZTedeBdZUde/d eNd! d"ee:gee< f fd#d$ZVed%d&eVZWG d'd de
eXe'e B ef ZYG d(d) d)eZZ[eeYged f eeYged f B Z\G d*d+ d+ee\ Z]dS ),    N)AsyncIterator	AwaitableCallableIterableIteratorMappingMutableMappingSequence)AbstractAsyncContextManagerasynccontextmanager)	lru_cachepartialupdate_wrapper)TYPE_CHECKINGAnyOptionalTypeVar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CleanupErrorr4   _T_U	_Resource)boundhandlerapps)r4   .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_ rC   V/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/aiohttp/web_app.py_build_middlewaresJ   s
   rE   i   )maxsizec                       s  e Zd Zeg dZeddddddddejdedB d	e	e
 d
eeef dB dedejdB 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 B 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 B d"eddfd&d$Zdeee B ddfd'd(Zdefd)d*Z de!eee B  fd+d,Z"defd-d.Z#eddee d/ddedB fd0d1Z$edee d/e%dee%B fd2d1Z$edded/edefd3d1Z$ddeee B d/edefd4d1Z$e&dejfd5d6Z'dejdB 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Z.dFedCd de/fdGdHZ0dIe1g e2f dCd de2fdJdKZ3dLedCd de4fdMdNZ5dOe	e6 de7e8 fdPdQZ9e&de:fdRdSZ;e&de<fdTdUZ=e&de<fdVdWZ>e&de<fdXdYZ?e&dd[d\Z@e&defd]d^ZAe&deBfd_d`ZCdeDdadejdB dbeeE dcedeFfdddeZGdeDdadejdB dbeeE dcedeFfdfdgZHddhdiZIddjdkZJddldmZKeLfdneMdoeNdpeOdqePdrdsdteeL deLfdudvZQde!eRe
ef  fdwdxZSdyeLdeTfdzd{ZUdd|d}ZVdefd~dZWdefddZX  ZYS )r4   )logger_debug_router_loop_handler_args_middlewaresr?   _has_legacy_middlewares_run_middlewares_state_frozen_pre_frozen_subapps_on_response_prepare_on_startup_on_shutdown_on_cleanup_client_max_size_cleanup_ctxNrC   i   .)rG   routermiddlewareshandler_argsclient_max_sizeloopdebugrG   rY   rZ   r[   r\   r]   r^   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)r3   warningswarnDeprecationWarning
isinstancer   rH   rI   rJ   rK   rG   r   rL   r?   rN   rM   rO   rP   rQ   rR   r   rS   rT   rU   rV   CleanupContextrX   appendrW   )selfrG   rY   rZ   r[   r\   r]   r^   rC   rC   rD   __init__p   sF   





zApplication.__init__clsc                 C   s   t jd| j dtdd d S )NzInheritance class z$ from web.Application is discouraged   r`   )rb   rc   __name__rd   )rj   rC   rC   rD   __init_subclass__   s
   
zApplication.__init_subclass__namevalc                    s4   || j vrtjd| dtdd t || d S )NzSetting custom web.Application.z attribute is discouragedr_   r`   )ATTRSrb   rc   rd   super__setattr__)rh   rn   ro   	__class__rC   rD   rr      s   

zApplication.__setattr__otherc                 C   s   | |u S NrC   )rh   ru   rC   rC   rD   __eq__      zApplication.__eq__keyc                 C      d S rv   rC   rh   ry   rC   rC   rD   __getitem__      zApplication.__getitem__c                 C   rz   rv   rC   r{   rC   rC   rD   r|      r}   c                 C   s
   | j | S rv   )rO   r{   rC   rC   rD   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 deprecatedrk   r`   )rP   rb   rc   rd   rh   rC   rC   rD   _check_frozen   s   
zApplication._check_frozenvaluec                 C   rz   rv   rC   rh   ry   r   rC   rC   rD   __setitem__   r}   zApplication.__setitem__c                 C   rz   rv   rC   r   rC   rC   rD   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-configr_   )categoryra   )r   re   r   rb   rc   r$   rO   r   rC   rC   rD   r      s   
c                 C   s   |    | j|= d S rv   )r   rO   r{   rC   rC   rD   __delitem__   s   zApplication.__delitem__c                 C   
   t | jS rv   )lenrO   r   rC   rC   rD   __len__   r~   zApplication.__len__c                 C   r   rv   )iterrO   r   rC   rC   rD   __iter__   r~   zApplication.__iter__c                 C   s   t | S rv   idr   rC   rC   rD   __hash__   rx   zApplication.__hash__defaultc                 C   rz   rv   rC   rh   ry   r   rC   rC   rD   get   r}   zApplication.getc                 C   rz   rv   rC   r   rC   rC   rD   r      r}   c                 C   rz   rv   rC   r   rC   rC   rD   r      r}   c                 C   s   | j ||S rv   )rO   r   r   rC   rC   rD   r      s   c                 C   s   t jdtdd ttj| jS )Nzloop property is deprecatedr_   r`   )rb   rc   rd   r   asyncioAbstractEventLooprJ   r   rC   rC   rD   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_looprJ   RuntimeErrorrH   	get_debugrR   	_set_loop)rh   r]   subapprC   rC   rD   r     s   


zApplication._set_loopc                 C      | j S rv   )rQ   r   rC   rC   rD   
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 rv   rC   ).0rB   	new_stylerC   rC   rD   	<genexpr>(  s    

z)Application.pre_freeze.<locals>.<genexpr>F)rQ   rL   freezerI   rS   rX   rT   rU   rV   tuple_prepare_middlewarer?   anyrM   rZ   rN   rR   
pre_freezerh   r   rC   rC   rD   r     s&   







	
zApplication.pre_freezec                 C   r   rv   )rP   r   rC   rC   rD   frozen7  r   zApplication.frozenc                 C   s0   | j rd S |   d| _ | jD ]}|  qd S NT)rP   r   rR   r   r   rC   rC   rD   r   ;  s   

zApplication.freezec                 C   s   t jdtdd | jS )Nzdebug property is deprecatedr_   r`   )rb   rc   rd   rH   r   rC   rC   rD   r^   D  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 )Nr@   r4   r<   c                    s     I d H  d S rv   )send)r@   )r   subsigrC   rD   r:   M  s   zEApplication._reg_subapp_signals.<locals>.reg_handler.<locals>.handler)r@   r4   r<   N)getattrrg   )r   r:   appsigr   )r   rD   reg_handlerJ  s   

z4Application._reg_subapp_signals.<locals>.reg_handler
on_startupon_shutdown
on_cleanup)str)rh   r   r   rC   r   rD   _reg_subapp_signalsI  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)re   r   	TypeErrorrstrip
ValueErrorr   r1   _add_subapp)rh   r   r   factoryrC   rC   rD   
add_subappW  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   rY   register_resourcer   rR   rg   r   rJ   r   )rh   r   r   resourcerC   rC   rD   r   `  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*)re   r   r   r/   r.   r   r0   r   )rh   r   r   ruler   rC   rC   rD   
add_domainp  s   

zApplication.add_domainroutesc                 C   s   | j |S rv   )rY   
add_routes)rh   r   rC   rC   rD   r   z  s   zApplication.add_routesc                 C   r   rv   )rS   r   rC   rC   rD   on_response_prepare}  r   zApplication.on_response_preparec                 C   r   rv   )rT   r   rC   rC   rD   r     r   zApplication.on_startupc                 C   r   rv   )rU   r   rC   rC   rD   r     r   zApplication.on_shutdownc                 C   r   rv   )rV   r   rC   rC   rD   r     r   zApplication.on_cleanuprf   c                 C   r   rv   )rX   r   rC   rC   rD   cleanup_ctx  r   zApplication.cleanup_ctxc                 C   r   rv   )rI   r   rC   rC   rD   rY     r   zApplication.routerc                 C   r   rv   )rL   r   rC   rC   rD   rZ     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 )NzKaccess_log_class must be subclass of aiohttp.abc.AbstractAccessLogger, got r^   r   )request_factoryr]   )
issubclassr   r   r   r   rH   rK   itemsr+   _handle_make_requestrJ   )rh   r]   r   r   kvrC   rC   rD   _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 insteadr_   r`   r   rC   )rb   rc   rd   r   )rh   r]   r   r   rC   rC   rD   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   rC   rC   rD   startup     zApplication.startupc                    r   )zMCauses on_shutdown signal

        Should be called before cleanup()
        N)r   r   r   rC   rC   rD   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   rX   rV   r   rC   rC   rD   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   rJ   rW   )rh   r   r   r   r   r   r   rC   rC   rD   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 #2252r_   r`   F)reversedrL   r   rb   rc   rd   r&   )rh   rA   rC   rC   rD   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 )Nz5match_info should be AbstractMatchInfo instance, not r=   r>   )r   r   r   rI   resolvere   r   r   add_appr   _match_infoheadersr   r   EXPECTexpect_handlerr   drainr:   rN   rM   router2   _cached_build_middlewarer;   r?   r   r   )
rh   r   r]   r^   
match_inforespr:   r@   rA   r   rC   rC   rD   r     sD   

zApplication._handlec                 C   s   | S )zgunicorn compatibilityrC   r   rC   rC   rD   __call__1  s   zApplication.__call__c                 C   s   dt | ddS )Nz<Application 0xx>r   r   rC   rC   rD   __repr__5  s   zApplication.__repr__c                 C   s   dS r   rC   r   rC   rC   rD   __bool__8  r}   zApplication.__bool__r<   N).rv   )r   r4   r<   N)r<   rf   )r<   r4   )Zrl   
__module____qualname__	frozensetrp   r    loggingLoggerr3   r   r#   r   r   r   intr   r   ri   typerm   r   rr   objectboolrw   r   r   r6   r|   r   r   r   r   r   r   r   r   r7   propertyr]   r   r   r   r   r   r^   r   r1   r   r   r8   r   r0   r   r*   listr-   r   _RespPrepareSignalr   
_AppSignalr   r   r   r   rY   _MiddlewaresrZ   r%   r   r+   r   r   r   r   r   r(   r   r!   r'   r   r   r   r   r)   r   r   r   r   __classcell__rC   rC   rs   rD   r4   W   s   	

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





,c                   @   s"   e Zd Zedee fddZdS )r5   r<   c                 C   s   t tt | jd S )Nr   )r   r   BaseExceptionargsr   rC   rC   rD   
exceptions=  s   zCleanupError.exceptionsN)rl   r   r   r   r   r   r   rC   rC   rC   rD   r5   <  s    r5   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 )rf   r<   Nc                    s   t    g | _d S rv   )rq   ri   _exitsr   rs   rC   rD   ri   I  s   

zCleanupContext.__init__r@   c                    sH   | D ]}||}t |tst||}| I d H  | j| qd S rv   )re   r
   r   
__aenter__r  rg   )rh   r@   cbctxrC   rC   rD   rT   M  s   
zCleanupContext._on_startupc                    s   g }t | jD ](}z|d d d I d H  W q ttjfy0 } z|| W Y d }~qd }~ww |rBt|dkr=|d td|d S )Nr   r   z Multiple errors on cleanup stage)	r   r  	__aexit__	Exceptionr   CancelledErrorrg   r   r5   )rh   r@   errorsitexcrC   rC   rD   rV   W  s   
zCleanupContext._on_cleanupr   )rl   r   r   ri   r4   rT   rV   r   rC   rC   rs   rD   rf   H  s    
rf   )^r   r   rb   collections.abcr   r   r   r   r   r   r   r	   
contextlibr
   r   	functoolsr   r   r   typingr   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,   r-   r.   r/   r0   r1   r2   r3   __all__r   r   r   r   r   _MiddlewaresHandlersr   _Subappsr6   r7   r8   rE   r   r   r4   r   r5   _CleanupContextCallablerf   rC   rC   rC   rD   <module>   st    (
 (


    h