
    9[g                        d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ ddgZ ed      Z ed	      Z	 G d
 dee         Z
 G d d      Zy)    )annotations)Any)cast)Generic)TypeVarStashStashKeyTDc                      e Zd ZdZdZy)r	   z``StashKey`` is an object used as a key to a :class:`Stash`.

    A ``StashKey`` is associated with the type ``T`` of the value of the key.

    A ``StashKey`` is unique and cannot conflict with another key.

    .. versionadded:: 7.0
     N)__name__
__module____qualname____doc__	__slots__r       H/var/www/html/bid-api/venv/lib/python3.12/site-packages/_pytest/stash.pyr	   r	      s     Ir   c                  T    e Zd ZdZdZddZddZddZddZddZ	ddZ
dd	Zdd
Zy)r   aJ  ``Stash`` is a type-safe heterogeneous mutable mapping that
    allows keys and value types to be defined separately from
    where it (the ``Stash``) is created.

    Usually you will be given an object which has a ``Stash``, for example
    :class:`~pytest.Config` or a :class:`~_pytest.nodes.Node`:

    .. code-block:: python

        stash: Stash = some_object.stash

    If a module or plugin wants to store data in this ``Stash``, it creates
    :class:`StashKey`\s for its keys (at the module level):

    .. code-block:: python

        # At the top-level of the module
        some_str_key = StashKey[str]()
        some_bool_key = StashKey[bool]()

    To store information:

    .. code-block:: python

        # Value type must match the key.
        stash[some_str_key] = "value"
        stash[some_bool_key] = True

    To retrieve the information:

    .. code-block:: python

        # The static type of some_str is str.
        some_str = stash[some_str_key]
        # The static type of some_bool is bool.
        some_bool = stash[some_bool_key]

    .. versionadded:: 7.0
    _storagec                    i | _         y )Nr   selfs    r   __init__zStash.__init__H   s	    57r   c                "    || j                   |<   y)zSet a value for key.Nr   )r   keyvalues      r   __setitem__zStash.__setitem__K   s    "cr   c                <    t        t        | j                  |         S )zZGet the value for key.

        Raises ``KeyError`` if the key wasn't set before.
        )r   r
   r   r   r   s     r   __getitem__zStash.__getitem__O   s    
 At}}S)**r   c                0    	 | |   S # t         $ r |cY S w xY w)zNGet the value for key, or return default if the key wasn't set
        before.KeyErrorr   r   defaults      r   getz	Stash.getV   s%    	9 	N	s    c                :    	 | |   S # t         $ r
 || |<   |cY S w xY w)zmReturn the value of key if already set, otherwise set the value
        of key to default and return default.r$   r&   s      r   
setdefaultzStash.setdefault^   s.    	9 	DIN	s    c                    | j                   |= y)z]Delete the value for key.

        Raises ``KeyError`` if the key wasn't set before.
        Nr   r!   s     r   __delitem__zStash.__delitem__g   s    
 MM#r   c                    || j                   v S )zReturn whether key was set.r   r!   s     r   __contains__zStash.__contains__n   s    dmm##r   c                ,    t        | j                        S )z)Return how many items exist in the stash.)lenr   r   s    r   __len__zStash.__len__r   s    4==!!r   N)returnNone)r   StashKey[T]r   r
   r2   r3   )r   r4   r2   r
   )r   r4   r'   r   r2   zT | D)r   r4   r'   r
   r2   r
   )r   r4   r2   r3   )r   r4   r2   bool)r2   int)r   r   r   r   r   r   r   r"   r(   r*   r,   r.   r1   r   r   r   r   r      s7    &P I8#+$"r   N)
__future__r   typingr   r   r   r   __all__r
   r   r	   r   r   r   r   <module>r:      sP    "     J
 CLCL
wqz 
W" W"r   