3
g                 @   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j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 }xJ| j D ]>\}}y|| ||< W n tk
rN   |||< Y nX |||< qW z
d V  W d x:|j D ].\}}||kr||= qrt|tst|||< qrW X d S )N)osenvironobjectitemsKeyError
isinstancestrAssertionError)r   targetZnon_existent_markerZsaved_valuesnameZ	new_valueoriginal_value r   [/var/www/tester-filtro-web/env/lib/python3.6/site-packages/pip/_internal/req/req_tracker.pyupdate_env_context_manager   s     
r   RequirementTracker)r   c              c   st   t jjd} tj V}| d krL|jtddj} |jt| d t	j
d|  t| }|V  W d Q R X W d Q R X 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ctxZ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j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 jd| j | S )NzEntered build tracker: %s)r$   r%   r)   )r,   r   r   r   	__enter__<   s    zRequirementTracker.__enter__)exc_typeexc_valexc_tbr   c             C   s   | j   d S )N)cleanup)r,   r/   r0   r1   r   r   r   __exit__@   s    zRequirementTracker.__exit__)linkr   c             C   s$   t j|jj j }tjj| j|S )N)	hashlibsha224url_without_fragmentencode	hexdigestr   r#   joinr)   )r,   r4   hashedr   r   r   _entry_pathH   s    zRequirementTracker._entry_path)reqr   c             C   s   |j s
t| j|j }y t|}|j }W dQ R X W n tk
rJ   Y nX dj|j |}t||| jksptt|ddd}|j	t
| W dQ R X | jj| tj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)r4   r   r<   openreadFileNotFoundErrorformatLookupErrorr+   writer   addr$   r%   r)   )r,   r=   Z
entry_pathfpcontentsmessager   r   r   rF   L   s    

zRequirementTracker.addc             C   s<   |j s
ttj| j|j  | jj| tjd|| j	 dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)
r4   r   r   unlinkr<   r+   remover$   r%   r)   )r,   r=   r   r   r   rK   h   s    
zRequirementTracker.removec             C   s0   xt | jD ]}| j| qW tjd| j d S )NzRemoved build tracker: %r)r*   r+   rK   r$   r%   r)   )r,   r=   r   r   r   r2   r   s    zRequirementTracker.cleanupc             c   s   | j | d V  | j| d S )N)rF   rK   )r,   r=   r   r   r   trackx   s    
zRequirementTracker.track)__name__
__module____qualname__r   r-   r.   r   r   BaseExceptionr   r3   r	   r<   r
   rF   rK   r2   r    contextmanagerr   rL   r   r   r   r   r   6   s   

)r    r5   loggingr   typesr   typingr   r   r   r   r   r   pip._internal.models.linkr	   pip._internal.req.req_installr
   pip._internal.utils.temp_dirr   	getLoggerrM   r$   rQ   r   r   r(   r   r   r   r   r   <module>   s    
