JFIF$        dd7 

Viewing File: /usr/lib/python3.9/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-39.opt-1.pyc

a

[��f�@s�ddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
mZmZmZmZddlmZmZmZddlmZddlmZeed�d	d
�Zeedd�dd
�Zeed�dd�Zeeeee
d�dd��Zeded�ed�d�Z e ej!�Z!eed�dd�Z"eed�dd�Z#eeeed�dd�Z$eee%e&fd�dd�Z'eed�d d!�Z(eee%e&fd�d"d#�Z)eed�d$d%�Z*dS)&�N)�contextmanager)�NamedTemporaryFile)�Any�BinaryIO�Iterator�List�Union�cast)�retry�stop_after_delay�
wait_fixed)�get_path_uid)�format_size)�path�returncCs�tjdksttd�sdSd}||kr�tj�|�rvt��dkrfzt|�}Wnty\YdS0|dkSt�	|tj
�Sq|tj�|�}}qdS)N�win32�geteuidTrF)�sys�platform�hasattr�osr�lexistsrr
�OSError�access�W_OK�dirname)rZpreviousZpath_uid�r�B/usr/lib/python3.9/site-packages/pip/_internal/utils/filesystem.py�check_path_ownersr)�src�destrcCsnzt�||�WnXtyh||fD]:}zt|�}WntyHYq&0|r&t�d|�d���q&�Yn0dS)z�Wrap shutil.copy2() but map errors copying socket files to
    SpecialFileError as expected.

    See also https://bugs.python.org/issue37700.
    �`z
` is a socketN)�shutil�copy2r�	is_socket�SpecialFileError)rr �fZis_socket_filerrr�copy2_fixed-sr'cCst�t�|�j�S�N)�stat�S_ISSOCKr�lstat�st_mode�rrrrr$Dsr$)r�kwargsrcks�tfdtj�|�tj�|�dd�|���T}tt|�}z |VW|��t�|�	��n|��t�|�	��0Wd�n1s�0YdS)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)
rrrr�basenamer	r�flush�fsync�fileno)rr.r&�resultrrr�adjacent_tmp_fileHs 


��
�r8T�g�?)Zreraise�stop�waitcCsHtj�|�s(tj�|�}||kr"q(|}qtjdkr@t�|tj�St|�S)zgCheck if a directory is writable.

    Uses os.access() on POSIX, tries creating files on Windows.
    �posix)rr�isdirr�namerr�_test_writable_dir_win)r�parentrrr�test_writable_diris
rAc	s�d}d�td�D]�}|d��fdd�td�D��}tj�||�}zt�|tjtjBtjB�}Wn&tyrYqt	y�YdS0t�
|�t�|�d	Sqtd
��dS)NZ(accesstest_deleteme_fishfingers_custard_Z$abcdefghijklmnopqrstuvwxyz0123456789�
�c3s|]}t���VqdSr()�random�choice)�.0�_�Zalphabetrr�	<genexpr>��z)_test_writable_dir_win.<locals>.<genexpr>�FTz3Unexpected condition testing for writable directory)
�range�joinrr�open�O_RDWR�O_CREAT�O_EXCL�FileExistsError�PermissionError�close�unlinkr)rr3rGr>�file�fdrrHrr?{s 


r?)r�patternrcsBg}t�|�D].\�}}t�||�}|��fdd�|D��q|S)z�Returns a list of absolute paths of files beneath path, recursively,
    with filenames which match the UNIX-style shell glob pattern.c3s|]}tj��|�VqdSr()rrrM)rFr&��rootrrrI�rJzfind_files.<locals>.<genexpr>)r�walk�fnmatch�filter�extend)rrXr7rG�files�matchesrrYr�
find_files�s
racCstj�|�rdStj�|�S)Nr)rr�islink�getsizer-rrr�	file_size�srdcCstt|��Sr()rrdr-rrr�format_file_size�srecCsBd}t�|�D].\}}}|D]}tj�||�}|t|�7}qq|S)Ng)rr[rrMrd)r�sizerZZ_dirsr_�filenameZ	file_pathrrr�directory_size�srhcCstt|��Sr()rrhr-rrr�format_directory_size�sri)+r\rZos.pathrDr"r)r�
contextlibrZtempfiler�typingrrrrrr	Zpip._vendor.tenacityr
rrZpip._internal.utils.compatr
Zpip._internal.utils.miscr�str�boolrr'r$r8Z_replace_retry�replacerAr?ra�int�floatrdrerhrirrrr�<module>s4 

	
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg