U
    +|j'  ã                   @   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dd„ ƒZe jd	d
„ ƒZG dd„ dƒZdS )é    N)ÚTracebackType)ÚDictÚIteratorÚOptionalÚSetÚTypeÚUnion)ÚLink)ÚInstallRequirement)ÚTempDirectoryc               
   k   s¢   t j}tƒ }i }|  ¡ D ]>\}}z|| ||< W n tk
rL   |||< Y nX |||< qz
d V  W 5 | ¡ D ].\}}||kr„||= qlt|tƒs’t‚|||< qlX d S ©N)ÚosÚenvironÚobjectÚitemsÚKeyErrorÚ
isinstanceÚstrÚAssertionError)ÚchangesÚtargetÚnon_existent_markerÚsaved_valuesÚnameÚ	new_valueÚoriginal_value© r   úeC:\Users\snmko\Desktop\web_content\django_cbt\venv\Lib\site-packages\pip/_internal/req/req_tracker.pyÚupdate_env_context_manager   s     

r   c               
   c   st   t j d¡} t ¡ �V}| d krL| tdd�¡j} | t| d�¡ t	 
d| ¡ t| ƒ�}|V  W 5 Q R X W 5 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ÚdebugÚRequirementTracker)ÚrootÚctxÚtrackerr   r   r   Úget_requirement_tracker*   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__<   s    zRequirementTracker.__init__c                 C   s   t  d| j¡ | S )NzEntered build tracker: %s)r&   r'   r-   )r0   r   r   r   Ú	__enter__B   s    zRequirementTracker.__enter__c                 C   s   |   ¡  d S r   )Úcleanup)r0   Úexc_typeÚexc_valÚexc_tbr   r   r   Ú__exit__G   s    zRequirementTracker.__exit__c                 C   s$   t  |j ¡ ¡ ¡ }tj | j|¡S r   )	ÚhashlibÚsha224Úurl_without_fragmentÚencodeÚ	hexdigestr   r%   Újoinr-   )r0   ÚlinkÚhashedr   r   r   Ú_entry_pathP   s    zRequirementTracker._entry_pathc              	   C   s¸   |j s
t‚|  |j ¡}z t|ƒ�}| ¡ }W 5 Q R X W n tk
rJ   Y nX d |j |¡}t|ƒ‚|| jkspt‚t|ddd��}| 	t
|ƒ¡ W 5 Q R X | j |¡ t d|| j¡ dS )z5Add an InstallRequirement to build tracking.
        z{} is already being built: {}Úwzutf-8)ÚencodingzAdded %s to build tracker %rN)r>   r   r@   ÚopenÚreadÚFileNotFoundErrorÚformatÚLookupErrorr/   Úwriter   Úaddr&   r'   r-   )r0   ÚreqÚ
entry_pathÚfpÚcontentsÚmessager   r   r   rI   U   s"    

 ÿzRequirementTracker.addc                 C   s<   |j s
t‚t |  |j ¡¡ | j |¡ t d|| j	¡ dS )z:Remove an InstallRequirement from build tracking.
        z Removed %s from build tracker %rN)
r>   r   r   Úunlinkr@   r/   Úremover&   r'   r-   ©r0   rJ   r   r   r   rP   t   s    
zRequirementTracker.removec                 C   s,   t | jƒD ]}|  |¡ q
t d| j¡ d S )NzRemoved build tracker: %r)r.   r/   rP   r&   r'   r-   rQ   r   r   r   r3   €   s    zRequirementTracker.cleanupc                 c   s   |   |¡ d V  |  |¡ d S r   )rI   rP   rQ   r   r   r   Útrack‡   s    
zRequirementTracker.trackN)Ú__name__Ú
__module__Ú__qualname__r1   r2   r7   r@   rI   rP   r3   r"   ÚcontextmanagerrR   r   r   r   r   r(   :   s   	r(   )r"   r8   Úloggingr   Útypesr   Útypingr   r   r   r   r   r   Úpip._internal.models.linkr	   Zpip._internal.req.req_installr
   Úpip._internal.utils.temp_dirr   Ú	getLoggerrS   r&   rV   r   r,   r(   r   r   r   r   Ú<module>   s    


