
    !2iy                    ,   d dl mZ d dl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mZmZ d dlmZ d dlmZ d d	lmZ d%dZe
d&d            Z  edd          ej                  Zd%dZd%dZd'dZd(dZd)dZd(dZd)dZ d*d$Z!dS )+    )annotationsN)	Generator)contextmanager)NamedTemporaryFile)AnyBinaryIOcast)get_path_uid)format_size)retrypathstrreturnboolc                   t           j        dk    st          t          d          sdS t          j                            |           sJ d }| |k    rt          j                            |           r^t          j                    dk    r(	 t          |           }n# t          $ r Y dS w xY w|dk    S t          j
        | t          j                  S | t          j                            |           } }| |k    dS )Nwin32geteuidTr   F)sysplatformhasattrosr   isabslexistsr   r
   OSErroraccessW_OKdirname)r   previouspath_uids      ]/var/www/html/pixcura-vrs/venv/lib/python3.11/site-packages/pip/_internal/utils/filesystem.pycheck_path_ownerr!      s     |wgb)&<&<t7==H
(

7??4   	9z||q  !+D11HH ! ! ! 55!1}$yrw///!27??4#8#8dH (

 5s   B 
B&%B&kwargsr   Generator[BinaryIO, None, None]c              +    K   t          ddt          j                            |           t          j                            |           dd|5 }t          t          |          }	 |V  |                                 t          j        |	                                           n?# |                                 t          j        |	                                           w xY w	 ddd           dS # 1 swxY w Y   dS )a%  Return a file-like object pointing to a tmp file next to path.

    The file is created securely and is ensured to be written to disk
    after the context reaches its end.

    kwargs will be passed to tempfile.NamedTemporaryFile to control
    the way the temporary file will be opened.
    Fz.tmp)deletedirprefixsuffixN )
r   r   r   r   basenamer	   r   flushfsyncfileno)r   r"   fresults       r    adjacent_tmp_filer0   -   s0      
 
GOOD!!w%%	
 

 
 
 & 
h""	&LLLLLNNNHV]]__%%%% LLNNNHV]]__%%%%%& & & & & & & & & & & & & & & & & &s*   C1%B$);C1$<C  C11C58C5   g      ?)stop_after_delaywaitc                J   t           j                            |           sGt           j                            |           }|| k    rn!|} t           j                            |           Gt           j        dk    rt          j        | t           j                  S t          |           S )zgCheck if a directory is writable.

    Uses os.access() on POSIX, tries creating files on Windows.
    posix)r   r   isdirr   namer   r   _test_writable_dir_win)r   parents     r    test_writable_dirr:   K   s     gmmD!! &&T>>	 gmmD!!  
w'yrw'''!$'''    c                   d}dt          d          D ]}|d                    fdt          d          D                       z   }t          j                            | |          }	 t          j        |t          j        t          j        z  t          j        z            }t          j        |           t          j	        |            dS # t          $ r Y t          $ r Y  dS w xY wt          d	          )
N(accesstest_deleteme_fishfingers_custard_$abcdefghijklmnopqrstuvwxyz0123456789
    c              3  @   K   | ]}t          j                  V  d S N)randomchoice).0_alphabets     r    	<genexpr>z)_test_writable_dir_win.<locals>.<genexpr>c   s-      !L!La&-"9"9!L!L!L!L!L!Lr;      TFz3Unexpected condition testing for writable directory)rangejoinr   r   openO_RDWRO_CREATO_EXCLcloseunlinkFileExistsErrorPermissionErrorr   )r   r*   rF   r7   filefdrG   s         @r    r8   r8   ]   s    :H5H2YY  "''!L!L!L!L588!L!L!LLLLw||D$''	ry2:5	ABBB HRLLLIdOOO44  	 	 	D 	 	 	 555	 G
H
HHs   )9C
C'	C'&C'pattern	list[str]c                    g }t          j        |           D ]<\  }}t          j        ||          }|                    fd|D                        =|S )zReturns a list of absolute paths of files beneath path, recursively,
    with filenames which match the UNIX-style shell glob pattern.c              3  X   K   | ]$}t           j                            |          V  %d S rB   )r   r   rK   )rE   r.   roots     r    rH   zfind_files.<locals>.<genexpr>   s3      ==bgll4++======r;   )r   walkfnmatchfilterextend)r   rV   r/   rF   filesmatchesrZ   s         @r    
find_filesra   y   sg     F'$-- > >a.00====W=======Mr;   int | floatc                    t           j                            |           rdS t           j                            |           S )Nr   )r   r   islinkgetsizer   s    r    	file_sizerg      s1    	w~~d q7??4   r;   c                :    t          t          |                     S rB   )r   rg   rf   s    r    format_file_sizeri      s    y'''r;   c                    d}t          j        |           D ]=\  }}}|D ]4}t           j                            ||          }|t	          |          z  }5>|S )Ng        )r   r[   r   rK   rg   )r   sizerZ   _dirsr_   filename	file_paths          r    directory_sizero      si    D gdmm ) )eU 	) 	)HT844IIi(((DD	) Kr;   c                :    t          t          |                     S rB   )r   ro   rf   s    r    format_directory_sizerq      s    ~d++,,,r;   	directorytarget_filer   Nonec                2   t          j        |           j        dz  dz  }t           j        t           j        v r)t          j        |                                |           d S t           j        t           j        v rt          j        |j        |d           d S d S )Ni  i  F)follow_symlinks)r   statst_modechmodsupports_fdr-   supports_follow_symlinksr7   )rr   rs   modes      r    copy_directory_permissionsr}      s    
	"U*
	 	
 
x2>!!
##%%t,,,,,	R0	0	0
!4?????? 
1	0r;   )r   r   r   r   )r   r   r"   r   r   r#   )r   r   rV   r   r   rW   )r   r   r   rb   )r   r   r   r   )rr   r   rs   r   r   rt   )"
__future__r   r\   r   os.pathrC   r   collections.abcr   
contextlibr   tempfiler   typingr   r   r	   pip._internal.utils.compatr
   pip._internal.utils.miscr   pip._internal.utils.retryr   r!   r0   replacer:   r8   ra   rg   ri   ro   rq   r}   r)   r;   r    <module>r      s   " " " " " "  				   



 % % % % % % % % % % % % ' ' ' ' ' ' & & & & & & & & & & 3 3 3 3 3 3 0 0 0 0 0 0 + + + + + +   6 & & & &0 /%%
.
.
.rz
:
:
( ( ( ($I I I I8   ! ! ! !( ( ( (   - - - -	@ 	@ 	@ 	@ 	@ 	@r;   