o
    ADi                     @  s  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mZmZ d dlmZ d dl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! efdkddZ"dldmddZ#ee ee#Z$eeee"Z%ede
dZ&dddnddZ'dodd Z(d!ddd"dpd-d.Z)d/ddd"dqd2d3Z*d!ddd"drd4d5Z+d!ddd"dsd6d7Z,dtd9d:Z-dud=d>Z.dvd?d@Z/edwdCdDZ0edxdIdDZ0edydMdDZ0edzdQdDZ0ed{dUdDZ0ed|dYdDZ0ed}d]dDZ0ed~dadDZ0eddedDZ0eddidDZ0ddjdDZ0dS )    )annotations)Callable)AnyTypeVarcastoverload)Flaskcurrent_appghas_app_context)_AppCtxGlobals)
LocalProxy   )_KEY_CONTAINER_KEY_REGISTRYT1T2T3T4T5T6T7T8T9T10	ContainerRegistryServicePingr
   r   returnr   c                 C  s2   |  td }du rttjt }t| t| |S )z-
    Get the current container from *g*.
    N)getr   r   r	   
extensionsr   setattr)r
   con r#   C/var/www/Datamplify/venv/lib/python3.10/site-packages/svcs/flask.py	svcs_from!   s   r%   NappFlask | Noner   c                 C  s   | du rt } | jt S )z
    Get the registry from *app* or :obj:`flask.current_app`.

    Args:
        app: If None, :obj:`flask.current_app` is used.

    .. versionadded:: 23.21.0
       *app* can be None, in which case :obj:`flask.current_app` is used.
    N)r	   r    r   )r&   r#   r#   r$   get_registry,   s   

r(   	FlaskAppT)bound)registryr+   Registry | Nonec                C  s   |pt  | jt< | t | S )z`
    Initialize *app* for *svcs*.

    Creates a registry for you if you don't provide one.
    )r   r    r   teardown_appcontextteardown)r&   r+   r#   r#   r$   init_appA   s   
r/   	svc_typestyper   c                  G  s   t |  S )zb
    Same as :meth:`svcs.Container.get_abstract()`, but uses container on
    :obj:`flask.g`.
    )r   r0   r#   r#   r$   get_abstractM   s   r3   Tenterpingon_registry_closer   svc_typefactoryr   r5   boolr6   Callable | Noner7   Nonec                C     | j t j|||||d dS )z
    Same as :meth:`svcs.Registry.register_factory()`, but uses registry on
    *app* that has been put there by :func:`init_app()`.
    r4   N)r    r   register_factory)r&   r8   r9   r5   r6   r7   r#   r#   r$   r>   U      

r>   Fvalueobjectc                C  r=   )z
    Same as :meth:`svcs.Registry.register_value()`, but uses registry on *app*
    that has been put there by :func:`init_app()`.
    r4   N)r    r   register_value)r&   r8   r@   r5   r6   r7   r#   r#   r$   rB   k   r?   rB   c                C  (   t  }|jj| ||||d |  dS )a
  
    Obtain the currently active container on ``g`` and overwrite the factory
    for *svc_type*.

    Afterwards resets the instantiation cache on ``g``.

    See Also:
        - :meth:`svcs.Registry.register_factory()`
        - :meth:`svcs.Container.close()`
    r4   N)r%   r+   r>   close)r8   r9   r5   r6   r7   	containerr#   r#   r$   overwrite_factory      rF   c                C  rC   )a  
    Obtain the currently active container on ``g`` and overwrite the value
    for *svc_type*.

    Afterwards resets the instantiation cache on ``g``.

    See Also:
        - :meth:`svcs.Registry.register_factory()`
        - :meth:`svcs.Container.close()`
    r4   N)r%   r+   rB   rD   )r8   r@   r5   r6   r7   rE   r#   r#   r$   overwrite_value   rG   rH   list[ServicePing]c                   C  s   t t S )z\
    See :meth:`svcs.Container.get_pings()`.

    See Also:
        :ref:`flask-health`
    )r%   r
   	get_pingsr#   r#   r#   r$   rJ      s   rJ   excBaseException | Nonec                 C  s*   t  rttd }r|  dS dS dS )z
    To be used with :meth:`flask.Flask.teardown_appcontext` that requires to
    take an exception.

    The app context is torn down after the response is sent.
    N)r   r
   popr   rD   )rK   rE   r#   r#   r$   r.      s   r.   c                 C  s"   | j td }r|  dS dS )z2
    Close the registry on *app*, if present.
    N)r    rM   r   rD   )r&   regr#   r#   r$   close_registry   s   rO   type[T1]r   c                C     d S Nr#   )r8   r#   r#   r$   r         r   	svc_type1	svc_type2type[T2]tuple[T1, T2]c                C  rQ   rR   r#   )rT   rU   r#   r#   r$   r      rS   	svc_type3type[T3]tuple[T1, T2, T3]c                C  rQ   rR   r#   )rT   rU   rX   r#   r#   r$   r      s   	svc_type4type[T4]tuple[T1, T2, T3, T4]c                C  rQ   rR   r#   )rT   rU   rX   r[   r#   r#   r$   r      s   	svc_type5type[T5]tuple[T1, T2, T3, T4, T5]c                C  rQ   rR   r#   )rT   rU   rX   r[   r^   r#   r#   r$   r      s   	svc_type6type[T6]tuple[T1, T2, T3, T4, T5, T6]c                C  rQ   rR   r#   )rT   rU   rX   r[   r^   ra   r#   r#   r$   r      s   		svc_type7type[T7]!tuple[T1, T2, T3, T4, T5, T6, T7]c                C  rQ   rR   r#   )rT   rU   rX   r[   r^   ra   rd   r#   r#   r$   r     s   
	svc_type8type[T8]%tuple[T1, T2, T3, T4, T5, T6, T7, T8]c                C  rQ   rR   r#   )rT   rU   rX   r[   r^   ra   rd   rg   r#   r#   r$   r     s   	svc_type9type[T9])tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9]c	   	       	      C  rQ   rR   r#   )	rT   rU   rX   r[   r^   ra   rd   rg   rj   r#   r#   r$   r   "  s   
svc_type10	type[T10].tuple[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]c
   
       
      C  rQ   rR   r#   )
rT   rU   rX   r[   r^   ra   rd   rg   rj   rm   r#   r#   r$   r   1  s   c                  G  s   t tj|  S )zU
    Same as :meth:`svcs.Container.get()`, but uses container on :obj:`flask.g`.
    )r%   r
   r   r2   r#   r#   r$   r   A  s   )r
   r   r   r   rR   )r&   r'   r   r   )r&   r)   r+   r,   r   r)   )r0   r1   r   r   )r&   r   r8   r1   r9   r   r5   r:   r6   r;   r7   r;   r   r<   )r&   r   r8   r1   r@   rA   r5   r:   r6   r;   r7   r;   r   r<   )r8   r1   r9   r   r5   r:   r6   r;   r7   r;   r   r<   )r8   r1   r@   rA   r5   r:   r6   r;   r7   r;   r   r<   )r   rI   )rK   rL   r   r<   )r&   r   r   r<   )r8   rP   r   r   )rT   rP   rU   rV   r   rW   )rT   rP   rU   rV   rX   rY   r   rZ   )
rT   rP   rU   rV   rX   rY   r[   r\   r   r]   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   r   r`   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   ra   rb   r   rc   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   ra   rb   rd   re   r   rf   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   ra   rb   rd   re   rg   rh   r   ri   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   ra   rb   rd   re   rg   rh   rj   rk   r   rl   )rT   rP   rU   rV   rX   rY   r[   r\   r^   r_   ra   rb   rd   re   rg   rh   rj   rk   rm   rn   r   ro   )r0   r1   r   rA   )1
__future__r   collections.abcr   typingr   r   r   r   flaskr   r	   r
   r   	flask.ctxr   werkzeug.localr   _corer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r(   r+   rE   r)   r/   r3   r>   rB   rF   rH   rJ   r.   rO   r   r#   r#   r#   r$   <module>   sl   D
!



	
