o
    ADi                     @  s  d dl mZ d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
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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! dGddZ"e
j#G dd dZ$e
j#G dd dZ%dHddZ&dIddZ'e	dJddZ(e	dKd$dZ(e	dLd(dZ(e	dMd,dZ(e	dNd0dZ(e	dOd4dZ(e	dPd8dZ(e	dQd<dZ(e	dRd@dZ(e	dSdDdZ(dTdFdZ(dS )U    )annotationsN)AsyncGenerator)AnyCallableoverload)	Starlette)Request)ASGIAppReceiveScopeSend)_KEY_CONTAINER_KEY_REGISTRYT1T2T3T4T5T6T7T8T9T10requestr   returnsvcs.Containerc                 C  s   t | jtS )z3
    Get the current container from *request*.
    )getattrstater   r    r   G/var/www/Datamplify/venv/lib/python3.10/site-packages/svcs/starlette.py	svcs_from%   s   r!   c                   @  sT   e Zd ZU dZded< ejedZded< eje	j
dZded< ejdddZdS )lifespanav  
    Make a Starlette lifespan *svcs*-aware.

    Makes sure that the registry is available to the decorated lifespan
    function as a second parameter and that the registry is closed when the
    application exists.

    Async generators are automatically wrapped into an async context manager.

    Args:
        lifespan: The lifespan function to make *svcs*-aware.
    aG  Callable[[Starlette, svcs.Registry], contextlib.AbstractAsyncContextManager[dict[str, object]]] | Callable[[Starlette, svcs.Registry], contextlib.AbstractAsyncContextManager[None]] | Callable[[Starlette, svcs.Registry], AsyncGenerator[dict[str, object], None]] | Callable[[Starlette, svcs.Registry], AsyncGenerator[None, None]]	_lifespan)factoryzdict[str, object]_statezsvcs.Registryregistryappr   r   'AsyncGenerator[dict[str, object], None]c              
   C s   t | jrt| j}n| j}| j4 I d H ; ||| j4 I d H }|p'i | _| j| jt< | jV  W d   I d H  n1 I d H sCw   Y  W d   I d H  d S 1 I d H sYw   Y  d S N)inspectisasyncgenfunctionr#   
contextlibasynccontextmanagerr&   r%   r   )selfr'   cmr   r   r   r    __call__L   s   &

Xzlifespan.__call__N)r'   r   r   r(   )__name__
__module____qualname____doc____annotations__attrsfielddictr%   svcsRegistryr&   r,   r-   r0   r   r   r   r    r"   ,   s   
 r"   c                   @  s$   e Zd ZU dZded< dddZdS )SVCSMiddlewarez
    Attach a :class:`svcs.Container` to the request state, based on a registry
    that has been put on the request state by :class:`lifespan`. Closes the
    container at the end of a request or websocket connection.
    r	   r'   scoper   receiver
   sendr   r   Nonec              	     s   |d dvr|  |||I d H S t|d t 4 I d H }||d t< |  |||I d H W  d   I d H  S 1 I d H s?w   Y  d S )Ntype)http	websocketr   )r'   r9   	Containerr   r   )r.   r<   r=   r>   conr   r   r    r0   h   s   0zSVCSMiddleware.__call__N)r<   r   r=   r
   r>   r   r   r?   )r1   r2   r3   r4   r5   r0   r   r   r   r    r;   ^   s   
 r;   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    rF   t   s   rF   	svc_typesr@   r   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   rG   r   r   r    rI      s   rI   svc_typetype[T1]r   c                     d S r)   r   )r   rK   r   r   r    aget   s   rN   	svc_type1	svc_type2type[T2]tuple[T1, T2]c                  rM   r)   r   )r   rO   rP   r   r   r    rN      s   	svc_type3type[T3]tuple[T1, T2, T3]c                  rM   r)   r   )r   rO   rP   rS   r   r   r    rN      s   	svc_type4type[T4]tuple[T1, T2, T3, T4]c                  rM   r)   r   )r   rO   rP   rS   rV   r   r   r    rN      s   	svc_type5type[T5]tuple[T1, T2, T3, T4, T5]c                  rM   r)   r   )r   rO   rP   rS   rV   rY   r   r   r    rN      s   		svc_type6type[T6]tuple[T1, T2, T3, T4, T5, T6]c                  rM   r)   r   )r   rO   rP   rS   rV   rY   r\   r   r   r    rN      s   
	svc_type7type[T7]!tuple[T1, T2, T3, T4, T5, T6, T7]c                  rM   r)   r   )r   rO   rP   rS   rV   rY   r\   r_   r   r   r    rN      s   	svc_type8type[T8]%tuple[T1, T2, T3, T4, T5, T6, T7, T8]c	   	       	        rM   r)   r   )	r   rO   rP   rS   rV   rY   r\   r_   rb   r   r   r    rN      s   	svc_type9type[T9])tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9]c
   
       
        rM   r)   r   )
r   rO   rP   rS   rV   rY   r\   r_   rb   re   r   r   r    rN      s   
svc_type10	type[T10].tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]c                  rM   r)   r   )r   rO   rP   rS   rV   rY   r\   r_   rb   re   rh   r   r   r    rN      s   objectc                   rH   )zU
    Same as :meth:`svcs.Container.aget`, but uses the container from *request*.
    N)r!   rN   rJ   r   r   r    rN      s   )r   r   r   r   )r   r   r   rE   )r   r   rG   r@   r   r   )r   r   rK   rL   r   r   )r   r   rO   rL   rP   rQ   r   rR   )
r   r   rO   rL   rP   rQ   rS   rT   r   rU   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   r   rX   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r   r[   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r\   r]   r   r^   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r\   r]   r_   r`   r   ra   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r\   r]   r_   r`   rb   rc   r   rd   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r\   r]   r_   r`   rb   rc   re   rf   r   rg   )r   r   rO   rL   rP   rQ   rS   rT   rV   rW   rY   rZ   r\   r]   r_   r`   rb   rc   re   rf   rh   ri   r   rj   )r   r   rG   r@   r   rk   ))
__future__r   r,   r*   collections.abcr   typingr   r   r   r6   starlette.applicationsr   starlette.requestsr   starlette.typesr	   r
   r   r   r9   
svcs._corer   r   r   r   r   r   r   r   r   r   r   r   r!   definer"   r;   rF   rI   rN   r   r   r   r    <module>   sN   8
1

	
