
    ?g                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  SS/r\" S5      r\" S	5      r	 " S
 S\\   5      r
 " S S5      rg)    )annotations)Any)cast)Generic)TypeVarStashStashKeyTDc                      \ rS rSrSrSrSrg)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____firstlineno____doc__	__slots____static_attributes__r       //usr/lib/python3/dist-packages/_pytest/stash.pyr	   r	      s     Ir   c                  l    \ rS rSrSrSrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSrg)r      a  ``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                    0 U l         g )Nr   selfs    r   __init__Stash.__init__H   s	    57r   c                     X R                   U'   g)zSet a value for key.Nr   )r   keyvalues      r   __setitem__Stash.__setitem__K   s    "cr   c                <    [        [        U R                  U   5      $ )zJGet the value for key.

Raises ``KeyError`` if the key wasn't set before.
)r   r
   r   r   r"   s     r   __getitem__Stash.__getitem__O   s    
 At}}S)**r   c                0     X   $ ! [          a    Us $ f = f)zFGet the value for key, or return default if the key wasn't set
before.KeyErrorr   r"   defaults      r   get	Stash.getV   s#    	9 	N	s    c                8     X   $ ! [          a	    X U'   Us $ f = f)zeReturn the value of key if already set, otherwise set the value
of key to default and return default.r+   r-   s      r   
setdefaultStash.setdefault^   s*    	9 	IN	s    c                    U R                   U	 g)zMDelete the value for key.

Raises ``KeyError`` if the key wasn't set before.
Nr   r'   s     r   __delitem__Stash.__delitem__g   s    
 MM#r   c                    XR                   ;   $ )zReturn whether key was set.r   r'   s     r   __contains__Stash.__contains__n   s    mm##r   c                ,    [        U R                  5      $ )z)Return how many items exist in the stash.)lenr   r   s    r   __len__Stash.__len__r   s    4==!!r   N)returnNone)r"   StashKey[T]r#   r
   r>   r?   )r"   r@   r>   r
   )r"   r@   r.   r   r>   zT | D)r"   r@   r.   r
   r>   r
   )r"   r@   r>   r?   )r"   r@   r>   bool)r>   int)r   r   r   r   r   r   r   r$   r(   r/   r2   r5   r8   r<   r   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>rF      sP    "     J
 CLCL
wqz 
W" W"r   