o
    g}”e  ã                   @   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eded fd	d
„ƒZe jded f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y&   |||< Y nw |||< qz"d V  W | ¡ D ]\}}||u rA||= q5t|tƒsHJ ‚|||< q5d S | ¡ D ]\}}||u r_||= qSt|tƒsfJ ‚|||< qSw ©N)ÚosÚenvironÚobjectÚitemsÚKeyErrorÚ
isinstanceÚstr)r   ÚtargetZnon_existent_markerZsaved_valuesÚnameZ	new_valueÚoriginal_value© r   úf/Users/abhinavbhinder/Documents/map/venv/lib/python3.10/site-packages/pip/_internal/req/req_tracker.pyÚupdate_env_context_manager   s0   €ÿ

û
ûr   ÚRequirementTrackerc               	   c   s°   � t j d¡} t ¡ �C}| d u r'| tdd�¡j} | t| d�¡ t	 
d| ¡ t| ƒ�}|V  W d   ƒ n1 s9w   Y  W d   ƒ d S W d   ƒ d S 1 sQw   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ÚctxZtrackerr   r   r   Úget_requirement_tracker)   s   €

ÿú"úr(   c                   @   s®   e Zd Zdeddfdd„Zddd„Zdeee  d	ee d
ee	 ddfdd„Z
dedefdd„Zdeddfdd„Zdeddfdd„Zddd„Zejdeded fdd„ƒZdS )r   r&   r   Nc                 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__c                 C   s   t  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_tbc                 C   s   |   ¡  d S r   )Úcleanup)r,   r/   r0   r1   r   r   r   Ú__exit__@   s   zRequirementTracker.__exit__Úlinkc                 C   s$   t  |j ¡ ¡ ¡ }tj | j|¡S r   )	ÚhashlibÚsha224Úurl_without_fragmentÚencodeÚ	hexdigestr   r#   Újoinr)   )r,   r4   Úhashedr   r   r   Ú_entry_pathH   s   zRequirementTracker._entry_pathÚreqc                 C   sÞ   |j sJ ‚|  |j ¡}zt|ƒ�}| ¡ }W d  ƒ n1 sw   Y  W n	 ty.   Y nw d |j |¡}t|ƒ‚|| jvsAJ ‚t|ddd��}| t	|ƒ¡ W d  ƒ n1 sZw   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)r4   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J ‚t |  |j ¡¡ | j |¡ t d|| j¡ dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)	r4   r   Úunlinkr<   r+   Úremover$   r%   r)   ©r,   r=   r   r   r   rK   h   s   
zRequirementTracker.removec                 C   s,   t | jƒD ]}|  |¡ qt d| j¡ d S )NzRemoved build tracker: %r)r*   r+   rK   r$   r%   r)   rL   r   r   r   r2   r   s   zRequirementTracker.cleanupc                 c   s    � |   |¡ d V  |  |¡ d S r   )rF   rK   rL   r   r   r   Útrackx   s   €
zRequirementTracker.track)r   r   )r   N)Ú__name__Ú
__module__Ú__qualname__r   r-   r.   r   r   ÚBaseExceptionr   r3   r	   r<   r
   rF   rK   r2   r    Úcontextmanagerr   rM   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   Ú	getLoggerrN   r$   rR   r   r   r(   r   r   r   r   r   Ú<module>   s     
