
    /d~                         d dl Z d dlZd dlZd dlZd dlZ G d d          Ze j        d             Zd Zej	        ej
        z   ZefdZdS )    Nc                   2    e Zd ZdZd ZddZd Zd Zd ZdS )	ImportKillerz@Context manager to make an import of a given name or names fail.c                     || _         d S Nnames)selfr   s     4lib/python3.11/site-packages/keyring/testing/util.py__init__zImportKiller.__init__   s    


    Nc                     || j         v r| S d S r   r   )r	   fullnamepaths      r
   find_modulezImportKiller.find_module   s     tz! 	K	 	r   c                 6    || j         v sJ t          |          r   )r   ImportError)r	   r   s     r
   load_modulezImportKiller.load_module   s#    4:%%%%(###r   c                     i | _         | j        D ]*}t          j                            |d           | j         |<   +t          j                            d|            d S )Nr   )originalr   sysmodulespop	meta_pathinsert)r	   names     r
   	__enter__zImportKiller.__enter__   sW    J 	> 	>D"%+//$"="=DM$Q%%%%%r   c                     t           j                            |            | j                                        D ]\  }}||t           j        |<   d S r   )r   r   remover   itemsr   )r	   argskeyvalues       r
   __exit__zImportKiller.__exit__   sX    T"""---// 	) 	)JC )#(C 	) 	)r   r   )	__name__
__module____qualname____doc__r   r   r   r   r#    r   r
   r   r      sj        FF     $ $ $& & &) ) ) ) )r   r   c              +      K   i }|                                 D ],\  }}|                     |          ||<   ||| v r| |= '|| |<   -dV  |                                 D ]\  }}||| v r| |= || |<   dS )zHelper context manager to make and unmake changes to a dict.

    A None is not a valid value for the destination, and so means that the
    associated name should be removed.N)r   get)destinationchangesr   r!   r"   s        r
   NoNoneDictMutatorr-   #   s       Hmmoo % %
U#,, 	%k! %$$K	EEEnn&& % %
U 	%k! %$$K% %r   c                  0    t          t          j        fi | S )z6A context manager to temporarily change the os.environ)r-   osenviron)r,   s    r
   Environr1   :   s    RZ337333r   c                 ^    d}t          d|           D ]}|t          j        |          z  }|S )z-Generate a random string with length <i>k</i> r   )rangerandomchoice)ksourceresultis       r
   random_stringr;   B   s9    F1a[[ ( (&-'''Mr   )
contextlibr/   r   r5   stringr   contextmanagerr-   r1   ascii_lettersdigitsALPHABETr;   r(   r   r
   <module>rB      s        				 



  ) ) ) ) ) ) ) )6 % % %,4 4 4
 &-/ %      r   