
     h                         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y)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                   4    e Zd ZU dZ ee      Zee   ed<   y)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__     l/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/context.pyr   r      s     s3Hc#h3r   r   _contextc                  ,    t         j                  d      S )z@Get the current ``_context`` context variable if set, else None.N)r   getr   r   r   get_contextr   )   s    <<r   c                 0    t         j                  |       }|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         j                  |        y)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   | xs
 t               }|t               }nt        |      }t        |      }	 d t	        |       y# t	        |       w xY w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   sL     & "[]GowEees   2AA A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                 2     t                fd       }|S )Nc                  f    t               5  r          | i |cd d d        S # 1 sw Y   y xY wN)r&   )argskwargsfunchooks     r   wrapperz8with_current_context.<locals>.decorator.<locals>.wrapperv   s3    )+ -FT,V,- - -s   '0r   )r-   r/   r.   s   ` r   	decoratorz'with_current_context.<locals>.decoratoru   s     	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      sh   
 & "  (  	4 	4 	4 j!
  <r   