7i ddlZddlZddlZddlZddlZddlmZddlmZddl m Z m Z m Z m Z mZmZddlmZmZmZddlmZddlmZded efd Zeded e d e e ddffd Zed ededZeej:Zded efdZded efdZdeded e efdZ ded ee!e"ffdZ#ded efdZ$ded ee!e"ffdZ%ded efdZ&y)N)contextmanager)NamedTemporaryFile)AnyBinaryIO GeneratorListUnioncast)retrystop_after_delay wait_fixed) get_path_uid) format_sizepathreturnctjdk(sttdsytjj |sJd}||k7rtjj |rLtjdk(r t|}|dk(Stj|tjS|tjj|}}||k7ry#t$rYywxYw)Nwin32geteuidTrF) sysplatformhasattrosrisabslexistsrrOSErroraccessW_OKdirname)rpreviouspath_uids g/mnt/ssd/data/python-lab/ChefSystem/venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.pycheck_path_ownerr"s ||wgb)&< 77==  H (  77??4 zz|q !+D1H 1}$yyrww//!277??4#8dH (  ! !s C C,+C,kwargsc+Ktddtjj|tjj |dd|5}t t |} ||jtj|j dddy#|jtj|jwxYw#1swYyxYww)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)deletedirprefixsuffixN) rrrrbasenamer rflushfsyncfileno)rr#fresults r!adjacent_tmp_filer0+s   GGOOD !ww%      & h" &L LLN HHV]]_ % & & LLN HHV]]_ % & &s6A C$ CB #3C C$ 5CCC!C$Tg?)reraisestopwaitcRtjj|sGtjj|}||k(rn"|}tjj|sGtjdk(r$tj |tj St|S)zgCheck if a directory is writable. Uses os.access() on POSIX, tries creating files on Windows. posix)rrisdirrnamerr_test_writable_dir_win)rparents r!test_writable_dirr;Lsu ggmmD!& T>  ggmmD!  ww'yyrww'' !$ ''cd}dtdD]}|djfdtdDz}tjj||} tj|tj tj ztjz}tj|tj|ytd #t$rYt$rYywxYw) N(accesstest_deleteme_fishfingers_custard_$abcdefghijklmnopqrstuvwxyz0123456789 c3HK|]}tjywN)randomchoice).0_alphabets r! z)_test_writable_dir_win..ds!La&--"9!Ls"TFz3Unexpected condition testing for writable directory) rangejoinrropenO_RDWRO_CREATO_EXCLcloseunlinkFileExistsErrorPermissionErrorr)rr*rGr8filefdrHs @r!r9r9^s:H5H 2Y"''!L58!LLLww||D$' ryy2::5 ABB HHRL IIdO#( G HH      sAC C0$C0/C0patterncg}tj|D]6\}}tj||}|j fd|D8|S)zReturns a list of absolute paths of files beneath path, recursively, with filenames which match the UNIX-style shell glob pattern.c3^K|]$}tjj|&ywrC)rrrL)rFr.roots r!rIzfind_files..s =bggll4+=s*-)rwalkfnmatchfilterextend)rrWr/rGfilesmatchesrZs @r! find_filesrazsPF''$->a..0 =W==> Mr<ctjj|rytjj|S)Nr)rrislinkgetsizers r! file_sizerfs( ww~~d 77??4  r<c*tt|SrC)rrfres r!format_file_sizerhs y ''r<cd}tj|D];\}}}|D]0}tjj||}|t |z }2=|S)Ng)rr[rrLrf)rsizerZ_dirsr_filename file_paths r!directory_sizerns^ D ggdm)eU )H T84I Ii( (D )) Kr<c*tt|SrC)rrnres r!format_directory_sizerps ~d+ ,,r<)'r\ros.pathrDr contextlibrtempfilertypingrrrrr r pip._vendor.tenacityr r r pip._internal.utils.compatrpip._internal.utils.miscrstrboolr"r0_replace_retryreplacer;r9raintfloatrfrhrnrpr)r<r!r~sB  %'>>DD30346&C&3&9XtT=Q3R&&2t*:1*=JtDTU  $ (C(D($III8S349!C!E#u*-!(3(3(sEz!2---r<