
    )h                        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 d dlmZ d dlmZ  ej                   e      Ze j&                  deded   fd	       Ze j&                  ded
   fd       Z G d de      Z G d d      Zy)    N)TracebackType)Dict	GeneratorOptionalTypeUnion)InstallRequirement)TempDirectorychangesreturnNNNc               +     K   t         j                  }t               }i }| j                         D ]  \  }}	 ||   ||<   |||<    	 d  |j                         D ]$  \  }}||u r||= t        |t              sJ |||<   & y # t        $ r |||<   Y Tw xY w# |j                         D ]$  \  }}||u r||= t        |t              sJ |||<   & w xY wwN)osenvironobjectitemsKeyError
isinstancestr)r   targetnon_existent_markersaved_valuesname	new_valueoriginal_values          _/var/www/html/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.pyupdate_env_context_managerr      s    ZZF !(24L"==? !i	5!'L !t!	. %1$6$6$8 	. D.!444L!.#666-t	.  	5!4L	5 %1$6$6$8 	. D.!444L!.#666-t	.s?   3CBCB 
8CBCBC9CC)BuildTrackerNNc               #     K   t         j                  j                  d      } t        j                         5 }| V|j                  t        d            j                  } |j                  t        |              t        j                  d|        t        |       5 }| d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY ww)NPIP_BUILD_TRACKERzbuild-tracker)kind)r!   z Initialized build tracking at %s)r   r   get
contextlib	ExitStackenter_contextr
   pathr   loggerdebugr   )rootctxtrackers      r   get_build_trackerr-   (   s     ::>>-.D				 3<$$]%HINND84PQLL;TB$ 	7M	 	 	 s5   4CA$B<B0B<'	C0B9	5B<<CCc                       e Zd ZdZy)	TrackerIdz:Uniquely identifying string provided to the build tracker.N)__name__
__module____qualname____doc__     r   r/   r/   5   s    Dr5   r/   c                       e Zd ZdZdeddfdZddZdeee	      dee	   d	ee
   ddfd
ZdedefdZdededdfdZdededdfdZddZej&                  dededed   fd       Zy)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   Nc                 `    || _         i | _        t        j                  d| j                          y )NzCreated build tracker: %s)_root_entriesr(   r)   )selfr*   s     r   __init__zBuildTracker.__init__B   s#    
=?0$**=r5   c                 F    t         j                  d| j                         | S )NzEntered build tracker: %s)r(   r)   r8   )r:   s    r   	__enter__zBuildTracker.__enter__G   s    0$**=r5   exc_typeexc_valexc_tbc                 $    | j                          y r   )cleanup)r:   r>   r?   r@   s       r   __exit__zBuildTracker.__exit__K   s     	r5   keyc                     t        j                  |j                               j                         }t        j
                  j                  | j                  |      S r   )hashlibsha224encode	hexdigestr   r'   joinr8   )r:   rD   hasheds      r   _entry_pathzBuildTracker._entry_pathS   s8    

-779ww||DJJ//r5   reqc                    | j                  |      }	 t        |      5 }|j                         }ddd       |j                   d }t	        |      # 1 sw Y   %xY w# t
        $ r Y nw xY w|| j                  vsJ t        |dd      5 }|j                  t        |             ddd       n# 1 sw Y   nxY w|| j                  |<   t        j                  d|| j                         y)z,Add an InstallRequirement to build tracking.Nz is already being built: wzutf-8)encodingzAdded %s to build tracker %r)rL   openreadlinkLookupErrorFileNotFoundErrorr9   writer   r(   r)   r8   )r:   rM   rD   
entry_pathfpcontentsmessages          r   addzBuildTracker.addW   s     %%c*
	'j! %R779%
 
";H:FGg&&% %  		 $--''' *cG4 	HHSX	 	 	 c3S$**Es3   A AA AA 	A+*A+B00B9c                     t        j                  | j                  |             | j                  |= t        j                  d|| j                         y)z1Remove an InstallRequirement from build tracking.z Removed %s from build tracker %rN)r   unlinkrL   r9   r(   r)   r8   )r:   rM   rD   s      r   removezBuildTracker.remover   s<     			$""3'(MM#7djjIr5   c                     t        | j                  j                               D ]  \  }}| j                  ||        t        j                  d| j                         y )NzRemoved build tracker: %r)listr9   r   r^   r(   r)   r8   )r:   rD   rM   s      r   rB   zBuildTracker.cleanup{   sJ    T]]0023 	"HCKKS!	" 	0$**=r5   r   c              #   r   K   t        |      }| j                  ||       d | j                  ||       yw)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^   )r:   rM   rD   
tracker_ids       r   trackzBuildTracker.track   s0      s^
j!C$s   57)r   r   )r   N)r0   r1   r2   r3   r   r;   r=   r   r   BaseExceptionr   rC   r/   rL   r	   r[   r^   rB   r$   contextmanagerr   rc   r4   r5   r   r   r   9   s    =>S >T >
4./ -( '	
 
0y 0S 0F) F	 Fd F6J, J9 J J> %+ %# %)DT:U % %r5   r   )r$   rF   loggingr   typesr   typingr   r   r   r   r   pip._internal.req.req_installr	   pip._internal.utils.temp_dirr
   	getLoggerr0   r(   re   r   r   r-   r/   r   r4   r5   r   <module>rl      s       	  9 9 < 6			8	$ .# .)<L2M . .2 	9%?@ 	 	E EQ% Q%r5   