o
    Vh\                     @   sh   d dl Z d dlZd dlZd dlZd dlZG dd dZe jdd Zdd Zej	ej
 Zefdd	ZdS )
    Nc                   @   s:   e Zd ZdZdd ZdddZdd Zd	d
 Zdd ZdS )ImportKillerz@Context manager to make an import of a given name or names fail.c                 G   s
   || _ d S Nnames)selfr    r   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/keyring/testing/util.py__init__   s   
zImportKiller.__init__Nc                 C   s   || j v r| S d S r   r   )r   fullnamepathr   r   r   find_module   s   
zImportKiller.find_modulec                 C   s   || j v sJ t|r   )r   ImportError)r   r
   r   r   r   load_module   s   zImportKiller.load_modulec                 C   s8   i | _ | jD ]}tj|d | j |< qtjd|  d S )Nr   )originalr   sysmodulespop	meta_pathinsert)r   namer   r   r   	__enter__   s   
zImportKiller.__enter__c                 G   s6   t j|  | j D ]\}}|d ur|t j|< qd S r   )r   r   remover   itemsr   )r   argskeyvaluer   r   r   __exit__   s   
zImportKiller.__exit__r   )	__name__
__module____qualname____doc__r	   r   r   r   r   r   r   r   r   r      s    
r   c                 k   s    i }|  D ]\}}| |||< |du r|| v r| |= q|| |< qdV  |  D ]\}}|du r:|| v r9| |= q*|| |< q*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   r   r   r   NoNoneDictMutator#   s"   

r$   c                  K   s   t tjfi | S )z6A context manager to temporarily change the os.environ)r$   osenviron)r#   r   r   r   Environ:   s   r'   c                    s   d  fddt| D S )z-Generate a random string with length <i>k</i> c                 3   s    | ]}t  V  qd S r   )randomchoice).0_unusedsourcer   r   	<genexpr>D   s    z random_string.<locals>.<genexpr>)joinrange)kr.   r   r-   r   random_stringB   s   r3   )
contextlibr%   r)   stringr   r   contextmanagerr$   r'   ascii_lettersdigitsALPHABETr3   r   r   r   r   <module>   s    
