a
    Dmg                     @   s   d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ d dlmZ d dlmZ eeZe jeed ddd	Ze jed
 dddZG dd
 d
ZdS )    N)TracebackType)DictIteratorOptionalSetTypeUnion)Link)InstallRequirement)TempDirectory)changesreturnc               
   k   s   t j}t }i }|  D ]<\}}z|| ||< W n tyJ   |||< Y n0 |||< qzBd V  W | D ].\}}||u r||= qht|tsJ |||< qhn:| D ].\}}||u r||= qt|tsJ |||< q0 d S N)osenvironobjectitemsKeyError
isinstancestr)r   targetnon_existent_markersaved_valuesname	new_valueoriginal_value r   T/var/www/html/idle/venv/lib/python3.9/site-packages/pip/_internal/req/req_tracker.pyupdate_env_context_manager   s*    
r   RequirementTrackerr   c               	   c   s   t jd} t t}| d u rL|tddj} |t| d t	
d|  t| }|V  W d    n1 sp0    Y  W d    n1 s0    Y  d S )NPIP_REQ_TRACKERzreq-tracker)kind)r!   z Initialized build tracking at %s)r   r   get
contextlib	ExitStackenter_contextr   pathr   loggerdebugr   )rootctxtrackerr   r   r   get_requirement_tracker)   s    

r-   c                   @   s   e Zd ZeddddZd dddZeee  ee ee	 ddd	d
Z
eedddZeddddZeddddZddddZejeed dddZdS )r   N)r*   r   c                 C   s    || _ t | _td| j  d S )NzCreated build tracker: %s)_rootset_entriesr(   r)   )selfr*   r   r   r   __init__7   s    zRequirementTracker.__init__r    c                 C   s   t d| j | S )NzEntered build tracker: %s)r(   r)   r.   )r1   r   r   r   	__enter__<   s    zRequirementTracker.__enter__)exc_typeexc_valexc_tbr   c                 C   s   |    d S r   )cleanup)r1   r4   r5   r6   r   r   r   __exit__@   s    zRequirementTracker.__exit__)linkr   c                 C   s$   t |j  }tj| j|S r   )	hashlibsha224url_without_fragmentencode	hexdigestr   r'   joinr.   )r1   r9   hashedr   r   r   _entry_pathH   s    zRequirementTracker._entry_path)reqr   c                 C   s   |j s
J | |j }z4t|}| }W d   n1 s>0    Y  W n ty\   Y n0 d|j |}t||| jvsJ t|ddd}|t	| W d   n1 s0    Y  | j
| td|| j dS )z,Add an InstallRequirement to build tracking.Nz{} is already being built: {}wzutf-8)encodingzAdded %s to build tracker %r)r9   rA   openreadFileNotFoundErrorformatLookupErrorr0   writer   addr(   r)   r.   )r1   rB   
entry_pathfpcontentsmessager   r   r   rK   L   s    

*,zRequirementTracker.addc                 C   s<   |j s
J t| |j  | j| td|| j dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)	r9   r   unlinkrA   r0   remover(   r)   r.   r1   rB   r   r   r   rQ   h   s    
zRequirementTracker.removec                 C   s,   t | jD ]}| | q
td| j d S )NzRemoved build tracker: %r)r/   r0   rQ   r(   r)   r.   rR   r   r   r   r7   r   s    zRequirementTracker.cleanupc                 c   s   |  | d V  | | d S r   )rK   rQ   rR   r   r   r   trackx   s    
zRequirementTracker.track)__name__
__module____qualname__r   r2   r3   r   r   BaseExceptionr   r8   r	   rA   r
   rK   rQ   r7   r$   contextmanagerr   rS   r   r   r   r   r   6   s   

)r$   r:   loggingr   typesr   typingr   r   r   r   r   r   pip._internal.models.linkr	   Zpip._internal.req.req_installr
   pip._internal.utils.temp_dirr   	getLoggerrT   r(   rX   r   r   r-   r   r   r   r   r   <module>   s    
