
    Ki                        d dl m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 d dlmZ  ej        e          Zej        dd            Zej        dd            Z G d de          Z G d d          ZdS )    )annotationsN)	Generator)TracebackType)InstallRequirement)TempDirectorychangesstrreturnGenerator[None, None, None]c               +    K   t           j        }t                      }i }|                                 D ],\  }}	 ||         ||<   n# t          $ r |||<   Y nw xY w|||<   -	 d V  |                                D ])\  }}||u r||= t          |t                    sJ |||<   *d S # |                                D ])\  }}||u r||= t          |t                    sJ |||<   *w xY wN)osenvironobjectitemsKeyError
isinstancer	   )r   targetnon_existent_markersaved_valuesname	new_valueoriginal_values          d/srv/django_bis/venv311/lib/python3.11/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_managerr      sS     ZF !((,.L"==?? ! !i	5!'L 	5 	5 	5!4L	5 t	. %1$6$6$8$8 	. 	. D.!4444LL!.#66666-t	. 	.L$6$6$8$8 	. 	. D.!4444LL!.#66666-t	.s   AAA!B% %A C%#Generator[BuildTracker, None, None]c               #    K   t           j                            d          } t          j                    5 }| f|                    t          d                    j        } |                    t          |                      t          
                    d|            t          |           5 }|V  d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )NPIP_BUILD_TRACKERzbuild-tracker)kind)r   z Initialized build tracking at %s)r   r   get
contextlib	ExitStackenter_contextr   pathr   loggerdebugBuildTracker)rootctxtrackers      r   get_build_trackerr+   *   sN     :>>-..D				 3<$$]%H%H%HIIND84PPPQQQLL;TBBB$ 	7MMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	                 s6   A8C-B>2C>C	CC	CCCc                      e Zd ZdZdS )	TrackerIdz:Uniquely identifying string provided to the build tracker.N)__name__
__module____qualname____doc__     r   r-   r-   7   s        DDDDr3   r-   c                  l    e Zd 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'   a7  Ensure that an sdist cannot request itself as a setup requirement.

    When an sdist is prepared, it identifies its setup requirements in the
    context of ``BuildTracker.track()``. If a requirement shows up recursively, this
    raises an exception.

    This stops fork bombs embedded in malicious packages.r(   r	   r
   Nonec                b    || _         i | _        t                              d| j                    d S )NzCreated build tracker: %s)_root_entriesr%   r&   )selfr(   s     r   __init__zBuildTracker.__init__D   s-    
=?0$*=====r3   c                F    t                               d| j                   | S )NzEntered build tracker: %s)r%   r&   r7   )r9   s    r   	__enter__zBuildTracker.__enter__I   s    0$*===r3   exc_typetype[BaseException] | Noneexc_valBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r   )cleanup)r9   r=   r?   rA   s       r   __exit__zBuildTracker.__exit__M   s     	r3   keyr-   c                    t          j        |                                                                          }t          j                            | j        |          S r   )hashlibsha224encode	hexdigestr   r$   joinr7   )r9   rF   hasheds      r   _entry_pathzBuildTracker._entry_pathU   s=    

--7799w||DJ///r3   reqr   c                   |                      |          }	 t          |          5 }|                                }ddd           n# 1 swxY w Y   |j         d| }t	          |          # t
          $ r Y nw xY w|| j        vsJ t          |dd          5 }|                    t          |                     ddd           n# 1 swxY w 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)rN   openreadlinkLookupErrorFileNotFoundErrorr8   writer	   r%   r&   r7   )r9   rO   rF   
entry_pathfpcontentsmessages          r   addzBuildTracker.addY   s    %%c**
	'j!! %R7799% % % % % % % % % % % % % % %
 FFHFFGg&&&	 ! 	 	 	D	 $-'''' *cG444 	HHSXX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 c3S$*EEEEEsE   A- AA- AA- AA- -
A:9A:#C		CCc                    t          j        |                     |                     | j        |= t                              d|| j                   dS )z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)r   unlinkrN   r8   r%   r&   r7   )r9   rO   rF   s      r   removezBuildTracker.removet   sK     		$""3''(((M#7djIIIIIr3   c                    t          | j                                                  D ]\  }}|                     ||           t                              d| j                   d S )NzRemoved build tracker: %r)listr8   r   r`   r%   r&   r7   )r9   rF   rO   s      r   rD   zBuildTracker.cleanup}   s_    T]002233 	" 	"HCKKS!!!!0$*=====r3   r   c              #     K   t          |          }|                     ||           dV  |                     ||           dS )zEnsure that `key` cannot install itself as a setup requirement.

        :raises LookupError: If `key` was already provided in a parent invocation of
                             the context introduced by this method.N)r-   r]   r`   )r9   rO   rF   
tracker_ids       r   trackzBuildTracker.track   sJ       s^^
j!!!C$$$$$r3   N)r(   r	   r
   r5   )r
   r'   )r=   r>   r?   r@   rA   rB   r
   r5   )rF   r-   r
   r	   )rO   r   rF   r-   r
   r5   )r
   r5   )rO   r   rF   r	   r
   r   )r.   r/   r0   r1   r:   r<   rE   rN   r]   r`   rD   r!   contextmanagerre   r2   r3   r   r'   r'   ;   s        = => > > >
      0 0 0 0F F F F6J J J J> > > > % % % % % %r3   r'   )r   r	   r
   r   )r
   r   )
__future__r   r!   rH   loggingr   collections.abcr   typesr   pip._internal.req.req_installr   pip._internal.utils.temp_dirr   	getLoggerr.   r%   rf   r   r+   r	   r-   r'   r2   r3   r   <module>rn      sN   " " " " " "       				 % % % % % %       < < < < < < 6 6 6 6 6 6		8	$	$ . . . .2 	 	 	 	E E E E E E E EQ% Q% Q% Q% Q% Q% Q% Q% Q% Q%r3   