
    3i                    $   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZ dd	lmZmZmZ erdd
lmZ ddlmZ  G d d      Z G d d      Z G d de      Z G d dee      Z G d de      Z G d dee      Zg dZ y)aE  Virtual environments in the traditional sense are built as reference to the host python. This file allows declarative references to elements on the file system, allowing our system to automatically detect what modes it can support given the constraints: e.g. can the file system symlink, can the files be read, executed, etc.    )annotationsN)ABCabstractmethod)OrderedDict)S_IXGRPS_IXOTHS_IXUSR)TYPE_CHECKING)fs_is_case_sensitivefs_supports_symlink)copymake_exesymlink)Callable)Pathc                      e Zd ZdZdZdZy)RefMustNAr   r   N)__name__
__module____qualname__r   COPYSYMLINK     _/var/www/opsc/venv/lib/python3.12/site-packages/virtualenv/create/via_global_ref/builtin/ref.pyr   r      s    	BDGr   r   c                      e Zd ZdZdZdZy)RefWhenANYr   r   N)r   r   r   r   r   r   r   r   r   r   r      s    
CDGr   r   c                      e Zd ZdZ e       Z e       Zej                  e
j                  fd
dZddZedd       Zedd       Zedd       Zedd       ZddZy	)PathRefzABase class that checks if a file reference can be symlink/copied.c                   || _         || _        || _        	 |j                         | _        | j                  rd nd| _        | j                  rd nd| _        | j                  rd | _        y d| _        y # t        $ r
 d| _        Y Xw xY wNF)mustwhensrcexistsOSError	_can_read	_can_copy_can_symlink)selfr&   r$   r%   s       r   __init__zPathRef.__init__%   sv    			 **,DK /3kkdu.2kkdu15%	  	 DK	 s   A2 2BBc                N    | j                   j                   d| j                   dS )N(src=))	__class__r   r&   r,   s    r   __repr__zPathRef.__repr__1   s$    ..))*%z;;r   c                   | j                   | j                  j                         r8	 | j                  j                  d      5  d| _         d d d        | j                   S t        j                  t        | j                        t
        j                        | _         | j                   S # 1 sw Y   ]xY w# t        $ r d| _         Y | j                   S w xY w)NrbTF)	r)   r&   is_fileopenr(   osaccessstrR_OKr2   s    r   can_readzPathRef.can_read4   s    >>!xx!+t, .)-. ~~ "$3txx="''!B~~. . +%*DN ~~	+s)   B3 B'B3 'B0,B3 3CCc                    | j                   K| j                  t        j                  k(  r| j                  | _         | j                   S | j
                  | _         | j                   S N)r*   r$   r   r   can_symlinkr<   r2   s    r   can_copyzPathRef.can_copyA   sL    >>!yyGOO+!%!1!1 ~~ "&~~r   c                    | j                   Y| j                  t        j                  k(  r| j                  | _         | j                   S | j
                  xr | j                  | _         | j                   S r>   )r+   r$   r   r   r@   FS_SUPPORTS_SYMLINKr<   r2   s    r   r?   zPathRef.can_symlinkJ   s]    $yyGLL($(MM!     %)$<$<$N!   r   c                    t         r>   )NotImplementedError)r,   creatorsymlinkss      r   runzPathRef.runS   s    !!r   c                    | j                   t        j                  k(  rt        S | j                   t        j                  k(  rt
        S |rt        S t
        S r>   )r$   r   r   r   r   r   )r,   rF   s     r   methodzPathRef.methodW   s9    99'N99$K"w,,r   Nr&   r   r$   r:   r%   r:   returnNonerK   r:   rK   boolrE   objectrF   rO   rK   rL   )rF   rO   rK   zCallable[..., None])r   r   r   __doc__r   rB   r   FS_CASE_SENSITIVEr   r   r   r   r-   r3   propertyr<   r@   r?   r   rG   rI   r   r   r   r!   r!      s    K-/,..5jjgkk 
H< 
 
   ! ! " "-r   r!   c                  v     e Zd ZdZej
                  ej                  fd fdZe	dd       Z
e	dd       Z xZS )
ExePathRefzJBase class that checks if a executable can be references via symlink/copy.c                6    t         |   |||       d | _        y r>   )superr-   _can_run)r,   r&   r$   r%   r1   s       r   r-   zExePathRef.__init__b   s    dD)%)r   c                4    | j                   r| j                  S yr#   )rB   can_runr2   s    r   r?   zExePathRef.can_symlinkf   s    ##<<r   c                    | j                   Y| j                  j                         j                  }t        t
        t        fD ]  }||z  rd| _          | j                   S  d| _         | j                   S )NTF)rY   r&   statst_moder	   r   r   )r,   modekeys      r   r[   zExePathRef.can_runl   sg    == 88==?**D'2 &#:$(DM }}&
 !&}}r   rJ   rN   )r   r   r   rR   r   r   r   r   r-   rT   r?   r[   __classcell__r1   s   @r   rV   rV   _   s@    T.5jjgkk *  
 	 	r   rV   c                  Z     e Zd ZdZej
                  ej                  fd fdZddZ	 xZ
S )PathRefToDestzLink a path on the file system.c                6    t         |   |||       || _        y r>   )rX   r-   dest)r,   r&   rf   r$   r%   r1   s        r   r-   zPathRefToDest.__init__|   s    dD)	r   c                *   | j                  || j                        }| j                  |      }t        |t              r|n|f}|j
                  j                         s|j
                  j                  dd       |D ]  } || j                  |        y )NT)parentsexist_ok)rf   r&   rI   
isinstancelistparentr'   mkdir)r,   rE   rF   rf   rI   dest_iterabledsts          r   rG   zPathRefToDest.run   sz    yy$((+X& *4 6TG{{!!#KKdT:  	"C488S!	"r   )
r&   r   rf   Callable[..., Path]r$   r:   r%   r:   rK   rL   rP   )r   r   r   rR   r   r   r   r   r-   rG   ra   rb   s   @r   rd   rd   y   s     )IPahalal "r   rd   c                  l    e Zd ZdZej
                  ej                  f	 	 	 	 	 	 	 	 	 	 	 ddZddZ	ddZ
y)	ExePathRefToDestz#Link a exe path on the file system.c                   t         j                  | |||       t        j                  | ||||       | j                  s)t	        t        d |D              j                               }|d   | _        |dd  | _        || _	        y )Nc              3  @   K   | ]  }|j                         d f  y wr>   )lower).0is     r   	<genexpr>z,ExePathRefToDest.__init__.<locals>.<genexpr>   s     &JQ	4'8&Js   r      )
rV   r-   rd   rS   rk   r   keysbasealiasesrf   )r,   r&   targetsrf   r$   r%   s         r   r-   zExePathRefToDest.__init__   st     	D#tT2tS$d;%%;&J'&JJOOQRGAJ	qr{	r   c                   | j                  || j                        j                  }|| j                  z  }| j	                  |      } || j                  |       |st        |       | j                  D ]i  }||z  }|j                         r|j                          |r|j                  | j                         nt        | j                  |       |r_t        |       k y r>   )rf   r&   rl   r{   rI   r   r|   r'   unlink
symlink_tor   )r,   rE   rF   bin_dirrf   rI   extra	link_files           r   rG   zExePathRefToDest.run   s    ))GTXX.55"X&txxTN\\ 		$E%I!  "$$TYY/TXXy)#		$r   c                h    | j                   j                   d| j                   d| j                   dS )Nr/   z, alias=r0   )r1   r   r&   r|   r2   s    r   r3   zExePathRefToDest.__repr__   s.    ..))*%z$,,qQQr   N)r&   r   r}   z	list[str]rf   rp   r$   r:   r%   r:   rK   rL   rP   rM   )r   r   r   rR   r   r   r   r   r-   rG   r3   r   r   r   rr   rr      s[    - U\T^T^lslwlw		"+	3F	NQ	fi			$$Rr   rr   )rV   rr   r!   rd   r   r   )!rR   
__future__r   r8   abcr   r   collectionsr   r]   r   r   r	   typingr
   virtualenv.infor   r   virtualenv.util.pathr   r   r   collections.abcr   pathlibr   r   r   r!   rV   rd   rr   __all__r   r   r   <module>r      s    L " 	 # # * *   E 8 8(  =-c =-@# 4"G ""!R}j !RHr   