
    tni                         d Z 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 e G d d                      Z ed	          Zd
 Zd Zd Zedd            ZddZdS )z
NOTE: All classes and functions in this module are considered private and are
subject to abrupt breaking changes. Please do not use them directly.
    )contextmanager)
ContextVar)deepcopy)	dataclassfieldwrapsc                   B    e Zd ZU dZ ee          Zee         ed<   dS )ClientContexta
  
    Encapsulation of objects tracked within the ``_context`` context variable.

    ``features`` is a set responsible for storing features used during
    preparation of an AWS request. ``botocore.useragent.register_feature_id``
    is used to add to this set.
    )default_factoryfeaturesN)	__name__
__module____qualname____doc__r   setr   str__annotations__     M/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/botocore/context.pyr   r      s?           s333Hc#h33333r   r   _contextc                  6    t                               d          S )z@Get the current ``_context`` context variable if set, else None.N)r   getr   r   r   get_contextr   )   s    <<r   c                 :    t                               |           }|S )a2  Set the current ``_context`` context variable.

    :type ctx: ClientContext
    :param ctx: Client context object to set as the current context variable.

    :rtype: contextvars.Token
    :returns: Token object used to revert the context variable to what it was
        before the corresponding set.
    )r   r   )ctxtokens     r   set_contextr   .   s     LLELr   c                 :    t                               |            dS )zReset the current ``_context`` context variable.

    :type token: contextvars.Token
    :param token: Token object to reset the context variable.
    N)r   reset)r   s    r   reset_contextr"   <   s     NN5r   Nc              #      K   | pt                      }|t                      }nt          |          }t          |          }	 dV  t	          |           dS # t	          |           w xY w)a  
    Context manager that copies the passed or current context object and sets
    it as the current context variable. If no context is found, a new
    ``ClientContext`` object is created. It mainly ensures the context variable
    is reset to the previous value once the executed code returns.

    Example usage:

        def my_feature():
            with start_as_current_context():
                register_feature_id('MY_FEATURE')
                pass

    :type ctx: ClientContext
    :param ctx: The client context object to set as the new context variable.
        If not provided, the current or a new context variable is used.
    N)r   r   r   r   r"   )r   currentnewr   s       r   start_as_current_contextr&   E   sv      & "[]]GoowEees   A A)c                       fd}|S )a  
    Decorator that wraps ``start_as_current_context`` and optionally invokes a
    hook within the newly-set context. This is just syntactic sugar to avoid
    indenting existing code under the context manager.

    Example usage:

        @with_current_context(partial(register_feature_id, 'MY_FEATURE'))
        def my_feature():
            pass

    :type hook: callable
    :param hook: A callable that will be invoked within the scope of the
        ``start_as_current_context`` context manager.
    c                 @     t                      fd            }|S )Nc                  |    t                      5  r
               | i |cd d d            S # 1 swxY w Y   d S N)r&   )argskwargsfunchooks     r   wrapperz8with_current_context.<locals>.decorator.<locals>.wrapperv   s    )++ - - DFFFtT,V,,- - - - - - - - - - - - - - - - - -s   155r   )r-   r/   r.   s   ` r   	decoratorz'with_current_context.<locals>.decoratoru   s9    	t	- 	- 	- 	- 	- 
	- r   r   )r.   r0   s   ` r   with_current_contextr1   d   s$    "     r   r*   )r   
contextlibr   contextvarsr   copyr   dataclassesr   r   	functoolsr	   r   r   r   r   r"   r&   r1   r   r   r   <module>r7      s!   
 & % % % % % " " " " " "       ( ( ( ( ( ( ( (       	4 	4 	4 	4 	4 	4 	4 	4 :j!!  
        <     r   