
    k7i\                         S SK r S SKrS SKrS SKrS SKr " S S5      r\ R                  S 5       rS r\R                  \R                  -   r\4S jrg)    Nc                   :    \ rS rSrSrS rS
S jrS rS rS r	S	r
g)ImportKiller   z@Context manager to make an import of a given name or names fail.c                     Xl         g Nnames)selfr	   s     N/home/james-whalen/.local/lib/python3.13/site-packages/keyring/testing/util.py__init__ImportKiller.__init__   s    
    Nc                 &    XR                   ;   a  U $ g r   r   )r
   fullnamepaths      r   find_moduleImportKiller.find_module   s    zz!K "r   c                 :    XR                   ;   d   e[        U5      er   )r	   ImportError)r
   r   s     r   load_moduleImportKiller.load_module   s    ::%%%(##r   c                     0 U l         U R                   H0  n[        R                  R	                  US 5      U R                   U'   M2     [        R
                  R                  SU 5        g )Nr   )originalr	   sysmodulespop	meta_pathinsert)r
   names     r   	__enter__ImportKiller.__enter__   sH    JJD"%++//$"=DMM$ Q%r   c                     [         R                  R                  U 5        U R                  R	                  5        H  u  p#Uc  M
  U[         R
                  U'   M     g r   )r   r   remover   itemsr   )r
   argskeyvalues       r   __exit__ImportKiller.__exit__   sA    T"----/JC #(C  0r   )r	   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r    r(   __static_attributes__ r   r   r   r      s    F$&)r   r   c              +      #    0 nUR                  5        H*  u  p4U R                  U5      X#'   Uc  X0;   a  X	 M$  M&  X@U'   M,     Sv   UR                  5        H  u  p4Uc  X0;   a  X	 M  M  X@U'   M     g7f)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   NoNoneDictMutatorr5   #   s      Hmmo
#,=!$ "  % & 
nn&
=!$ "  % 's   A1A3c                  6    [        [        R                  40 U D6$ )z6A context manager to temporarily change the os.environ)r5   osenviron)r4   s    r   Environr9   :   s    RZZ3733r   c                 L   ^ SR                  U4S j[        U 5       5       5      $ )z-Generate a random string with length <i>k</i> c              3   P   >#    U  H  n[         R                  " T5      v   M     g 7fr   )randomchoice).0_unusedsources     r   	<genexpr> random_string.<locals>.<genexpr>D   s     AW6==((s   #&)joinrange)krA   s    `r   random_stringrG   B   s    77AaAAAr   )
contextlibr7   r=   stringr   r   contextmanagerr5   r9   ascii_lettersdigitsALPHABETrG   r0   r   r   <module>rN      s^     	   
) )6 % %,4
 &--/ % Br   