
    Ꙝi\                         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y)    Nc                   0    e Zd ZdZd ZddZd Zd Zd Zy)	ImportKillerz@Context manager to make an import of a given name or names fail.c                     || _         y Nnames)selfr   s     P/mnt/e/genesis-system/.venv/lib/python3.12/site-packages/keyring/testing/util.py__init__zImportKiller.__init__   s	    
    Nc                 $    || j                   v r| S y r   r   )r	   fullnamepaths      r
   find_modulezImportKiller.find_module   s    tzz!K "r   c                 8    || 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                  j	                  |d       | j                   |<   1 t        j
                  j                  d|        y )Nr   )originalr   sysmodulespop	meta_pathinsert)r	   names     r
   	__enter__zImportKiller.__enter__   sM    JJ 	>D"%++//$"=DMM$	>Q%r   c                     t         j                  j                  |        | j                  j	                         D ]  \  }}|	|t         j
                  |<    y r   )r   r   remover   itemsr   )r	   argskeyvalues       r
   __exit__zImportKiller.__exit__   sH    T"----/ 	)JC #(C 	)r   r   )	__name__
__module____qualname____doc__r   r   r   r   r#    r   r
   r   r      s    F$&)r   r   c              +      K   i }|j                         D ])  \  }}| j                  |      ||<   |	|| v s!| |= %|| |<   + d |j                         D ]  \  }}|	|| v s| |= || |<    yw)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mmo %
U#,=k!$$K% 
nn& %
U=k!$$K%s   3A.+A."A.c                  6    t        t        j                  fi | S )z6A context manager to temporarily change the os.environ)r-   osenviron)r,   s    r
   Environr1   :   s    RZZ3733r   c                 J    dj                  fdt        |       D              S )z-Generate a random string with length <i>k</i> c              3   H   K   | ]  }t        j                          y wr   )randomchoice).0_unusedsources     r
   	<genexpr>z random_string.<locals>.<genexpr>D   s     AW6==(As   ")joinrange)kr9   s    `r
   random_stringr>   B   s    77AaAAAr   )
contextlibr/   r5   stringr   r   contextmanagerr-   r1   ascii_lettersdigitsALPHABETr>   r(   r   r
   <module>rE      s^     	   
) )6 % %,4
 &--/ % Br   