a
    eS                     @   s   d dl mZ d dlZ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
 d dlmZ erd 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 eeZejd
d Zejdd ZG dd de Z!dS )    )absolute_importN)contextlib2)TempDirectory)MYPY_CHECK_RUNNING)TracebackType)DictIteratorOptionalSetTypeUnion)Link)InstallRequirementc               
   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)ZchangestargetZnon_existent_markerZsaved_valuesnameZ	new_valueoriginal_value r   Q/var/www/sunrise/env/lib/python3.9/site-packages/pip/_internal/req/req_tracker.pyupdate_env_context_manager   s*    
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   getr   	ExitStackenter_contextr   pathr   loggerdebugRequirementTracker)rootctxZtrackerr   r   r   get_requirement_tracker3   s    

r(   c                   @   sR   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
jdd ZdS )r%   c                 C   s    || _ t | _td| j  d S )NzCreated build tracker: %s)_rootset_entriesr#   r$   )selfr&   r   r   r   __init__E   s    zRequirementTracker.__init__c                 C   s   t d| j | S )NzEntered build tracker: %s)r#   r$   r)   )r,   r   r   r   	__enter__K   s    zRequirementTracker.__enter__c                 C   s   |    d S r   )cleanup)r,   exc_typeexc_valexc_tbr   r   r   __exit__P   s    zRequirementTracker.__exit__c                 C   s$   t |j  }tj| j|S r   )	hashlibsha224url_without_fragmentencode	hexdigestr   r"   joinr)   )r,   linkhashedr   r   r   _entry_pathY   s    zRequirementTracker._entry_pathc              
   C   s   |j s
J | |j }z4t|}| }W d   n1 s>0    Y  W n2 ty| } z|jtjkrh W Y d}~n d}~0 0 d|j |}t||| j	vsJ t|d}|
t| W d   n1 s0    Y  | j	| td|| j dS )z5Add an InstallRequirement to build tracking.
        Nz{} is already being built: {}wzAdded %s to build tracker %r)r:   r<   openreadIOErrorerrnoENOENTformatLookupErrorr+   writer   addr#   r$   r)   )r,   reqZ
entry_pathfpcontentsemessager   r   r   rF   ^   s"    

*,zRequirementTracker.addc                 C   s<   |j s
J t| |j  | j| td|| j dS )z:Remove an InstallRequirement from build tracking.
        z Removed %s from build tracker %rN)	r:   r   unlinkr<   r+   remover#   r$   r)   r,   rG   r   r   r   rM      s    
zRequirementTracker.removec                 C   s,   t | jD ]}| | q
td| j d S )NzRemoved build tracker: %r)r*   r+   rM   r#   r$   r)   rN   r   r   r   r/      s    zRequirementTracker.cleanupc                 c   s   |  | d V  | | d S r   )rF   rM   rN   r   r   r   track   s    
zRequirementTracker.trackN)__name__
__module____qualname__r-   r.   r3   r<   rF   rM   r/   
contextlibcontextmanagerrO   r   r   r   r   r%   C   s   	!r%   )"
__future__r   rS   rA   r4   loggingr   pip._vendorr   pip._internal.utils.temp_dirr   pip._internal.utils.typingr   typesr   typingr   r   r	   r
   r   r   pip._internal.models.linkr   pip._internal.req.req_installr   	getLoggerrP   r#   rT   r   r(   r   r%   r   r   r   r   <module>   s&    


