o
    ADi                     @  s  d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dl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 z	e
eejZW n eyT   eZY nw eZdeddZdfddZdd ddgddZ e
j!dhddZ"d ddd!did,d-Z#d.ddd!djd0d1Z$dkd2d3Z%dld5d6Z&dmd9d:Z'ednd=d>Z(edodCd>Z(edpdGd>Z(edqdKd>Z(edrdOd>Z(edsdSd>Z(edtdWd>Z(edud[d>Z(edvd_d>Z(edwdcd>Z(dxddd>Z(dS )y    )annotations)Callable)suppress)Anyoverload)webN   )_KEY_CONTAINER_KEY_REGISTRYT1T2T3T4T5T6T7T8T9T10requestweb.Requestreturnsvcs.Containerc                 C     | t  S )z3
    Get the current container from *request*.
    )_AIOHTTP_KEY_CONTAINERr    r   E/var/www/Datamplify/venv/lib/python3.10/site-packages/svcs/aiohttp.py	svcs_from*      r   appweb.Applicationsvcs.Registryc                 C  r   )z&
    Get the registry from *app*.
    )_AIOHTTP_KEY_REGISTRYr    r   r   r   get_registry1   r   r%   )registrymiddleware_posr&   svcs.Registry | Noner'   intc                C  s.   |pt  | t< | j|t | jt | S )z
    Initialize the application.

    Inserts the *svcs* middleware at *middleware_pos* which is 0 by default, so
    you can use :func:`svcs_from` and :func:`aget` in other middlewares.
    )	svcsRegistryr#   middlewaresinsertsvcs_middleware
on_cleanupappendaclose_registry)r    r&   r'   r   r   r   init_app8   s   r2   handlerr   web.Responsec              	     s`   t | jt 4 I d H }|| t< || I d H W  d   I d H  S 1 I d H s)w   Y  d S N)r*   	Containerr    r#   r   )r   r3   	containerr   r   r   r.   K   s
   0r.   Fenterpingon_registry_closesvc_typetypevalueobjectr9   boolr:   Callable | Noner;   Nonec                C     t | j|||||d dS )zY
    Same as :meth:`svcs.Registry.register_value()`, but uses registry on
    *app*.
    r8   N)r%   register_value)r    r<   r>   r9   r:   r;   r   r   r   rD   U      
rD   Tfactoryc                C  rC   )z[
    Same as :meth:`svcs.Registry.register_factory()`, but uses registry on
    *app*.
    r8   N)r%   register_factory)r    r<   rF   r9   r:   r;   r   r   r   rG   k   rE   rG   c                   sB   t t t|  I dH  W d   dS 1 sw   Y  dS )z
    Close the registry on *app*, if present.

    You probably don't have to call this yourself, because it's registered for
    the application as an {attr}`aiohttp.web.Application.on_cleanup` callback.

    See Also:
        :ref:`aiohttp-cleanup`
    N)r   KeyErrorr%   acloser$   r   r   r   r1      s   

"r1   list[svcs.ServicePing]c                 C  s   t |  S )z
    Same as :meth:`svcs.Container.get_pings`, but uses the container from
    *request*.

    See Also:
        :ref:`aiohttp-health`
    )r   	get_pingsr   r   r   r   rK      s   rK   	svc_typesr   c                      t | j| I dH S )z`
    Same as :meth:`svcs.Container.aget_abstract()`, but uses container from
    *request*.
    N)r   aget_abstractr   rL   r   r   r   rN      s   rN   type[T1]r   c                     d S r5   r   )r   r<   r   r   r   aget   s   rR   	svc_type1	svc_type2type[T2]tuple[T1, T2]c                  rQ   r5   r   )r   rS   rT   r   r   r   rR      s   	svc_type3type[T3]tuple[T1, T2, T3]c                  rQ   r5   r   )r   rS   rT   rW   r   r   r   rR      s   	svc_type4type[T4]tuple[T1, T2, T3, T4]c                  rQ   r5   r   )r   rS   rT   rW   rZ   r   r   r   rR      s   	svc_type5type[T5]tuple[T1, T2, T3, T4, T5]c                  rQ   r5   r   )r   rS   rT   rW   rZ   r]   r   r   r   rR      s   		svc_type6type[T6]tuple[T1, T2, T3, T4, T5, T6]c                  rQ   r5   r   )r   rS   rT   rW   rZ   r]   r`   r   r   r   rR      s   
	svc_type7type[T7]!tuple[T1, T2, T3, T4, T5, T6, T7]c                  rQ   r5   r   )r   rS   rT   rW   rZ   r]   r`   rc   r   r   r   rR      s   	svc_type8type[T8]%tuple[T1, T2, T3, T4, T5, T6, T7, T8]c	   	       	        rQ   r5   r   )	r   rS   rT   rW   rZ   r]   r`   rc   rf   r   r   r   rR      s   	svc_type9type[T9])tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9]c
   
       
        rQ   r5   r   )
r   rS   rT   rW   rZ   r]   r`   rc   rf   ri   r   r   r   rR      s   
svc_type10	type[T10].tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]c                  rQ   r5   r   )r   rS   rT   rW   rZ   r]   r`   rc   rf   ri   rl   r   r   r   rR     s   c                   rM   )zU
    Same as :meth:`svcs.Container.aget`, but uses the container from *request*.
    N)r   rR   rO   r   r   r   rR     s   )r   r   r   r   )r    r!   r   r"   )r    r!   r&   r(   r'   r)   r   r!   )r   r   r3   r   r   r4   )r    r!   r<   r=   r>   r?   r9   r@   r:   rA   r;   rA   r   rB   )r    r!   r<   r=   rF   r   r9   r@   r:   rA   r;   rA   r   rB   )r    r!   r   rB   )r   r   r   rJ   )r   r   rL   r=   r   r   )r   r   r<   rP   r   r   )r   r   rS   rP   rT   rU   r   rV   )
r   r   rS   rP   rT   rU   rW   rX   r   rY   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r   r\   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r   r_   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r`   ra   r   rb   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r`   ra   rc   rd   r   re   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r`   ra   rc   rd   rf   rg   r   rh   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r`   ra   rc   rd   rf   rg   ri   rj   r   rk   )r   r   rS   rP   rT   rU   rW   rX   rZ   r[   r]   r^   r`   ra   rc   rd   rf   rg   ri   rj   rl   rm   r   rn   )r   r   rL   r=   r   r?   ))
__future__r   collections.abcr   
contextlibr   typingr   r   aiohttpr   r*   _corer	   r
   r   r   r   r   r   r   r   r   r   r   AppKeyr+   r#   AttributeErrorr   r   r%   r2   
middlewarer.   rD   rG   r1   rK   rN   rR   r   r   r   r   <module>   sl   8





	
