idGW ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddlmZddlmZmZmZddlmZddlmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+ddl,m-Z-dd l.m/Z/m0Z0dd l1m2Z2dd l3m4Z4dd l5m6Z6gd Z7ej8e9Z:e#dZ;e!e"e<ee>e>fZ?e!e@e!ee@ee@ffZAde@fdZBde!e>dfde!e>e>e>ffdZCde@ddfdZDde@fdZEe)de*de+ddnde@deFddfdZGdedefde@d e$e=efd.ZPd/eQde@fd0ZRd1eeede!ee@ee>ffd2ZSde@deFfd3ZTejUfd4ed5e>deeVddffd6ZWdpde@d7eFde@fd8ZXde@de!e@e@ffd9ZYd:e@d;e@ddfd<ZZde@deFfd=Z[d>ed?eddfd@Z\GdAdBeZ]ej^dCe@dee]ddffdDZ_dee]fdEZ`dee]fdFZadGedHede"efdIZbdJe@dKee>de@fdLZcdqdNe@dOe@de@fdPZddNe@de!ee@ee>ffdQZedNe@deAfdRZfdNe@de@fdSZgdTe@dUee@ge!edffde!e@eAffdVZhdNe@deAfdWZidNe@de!e@fdXZjdTe@de!e@e@e!ee@ee@fffdYZkdTe@de@fdZZldTe@de@fd[ZmGd\d]Znd^e@denfd_ZodTe@denfd`ZpdaeFddfdbZqdrdcZrdeFfddZsdsde@dfe>de!ee>ffdgZtdheedee!eeffdiZudjee;geFfdhee;de!ee;ee;ffdkZvGdldme'ZwdS)tN)StringIO) filterfalsetee zip_longest) TracebackType)AnyBinaryIOCallableContextManagerDict GeneratorIterableIteratorListOptionalTextIOTupleTypeTypeVarUnioncast)BuildBackendHookCaller)retrystop_after_delay wait_fixed) __version__) CommandErrorExternallyManagedEnvironment)get_major_minor_version)WINDOWS)running_under_virtualenv)rmtree display_path backup_dirasksplitext format_sizeis_installable_dirnormalize_pathrenamesget_progcaptured_stdout ensure_dirremove_auth_from_urlcheck_externally_managed ConfiguredBuildBackendHookCallerTreturnctjtjtdd}tj|}dt|tS)Nz..zpip {} from {} (python {})) ospathjoindirname__file__abspathformatrr) pip_pkg_dirs M/opt/cloudlinux/venv/lib/python3.11/site-packages/pip/_internal/utils/misc.pyget_pip_versionr=Gsa',,rwx88$EEK'//+..K ' . .!!  py_version_info.ct|dkr|dt|z dzz }nt|dkr |dd}td|S)ax Convert a tuple of ints representing a Python version to one of length three. :param py_version_info: a tuple of ints representing a Python version, or None to specify no version. The tuple can have any length. :return: a tuple of length three if `py_version_info` is non-None. Otherwise, return `py_version_info` unchanged (i.e. None). )rN VersionInfo)lenr)r?s r<normalize_version_inforDRsf ?aAO 4 44<< _   ! !)"1"-   / //r>r5c tj|dS#t$r<}|jtjkr|jtjkrYd}~dSYd}~dSd}~wwxYw)z os.path.makedirs without EEXIST.N)r4makedirsOSErrorerrnoEEXIST ENOTEMPTY)r5es r<r-r-es D  7el " "qw%/'A'A  # " " " " "'A'A'A'A'A'As A+AAc tjtjd}|dvrtjdS|S#t ttf$rYnwxYwdS)Nr)z __main__.pyz-cz -m pippip) r4r5basenamesysargv executableAttributeError TypeError IndexError)progs r<r+r+osp w ,, ( ( (n--- -K Iz 2     5sAAAA A TrAg?)reraisestopwaitFdir ignore_errorsctjdkrtj||tdStj||tdS)N)rA )rZonexc)rZonerror)rO version_infoshutilr"rmtree_errorhandler)rYrZs r<r"r"}sL 7"" c>QRRRRRR c@STTTTTTr>funcexc_infoc tj|jtjz }n#t$rYdSwxYw|r,tj|tj||dS)zOn Windows, the files in .svn are read-only, so when rmtree() tries to remove them, an exception is thrown. We catch that here, remove the read-only attribute, and hopefully continue without problems.N)r4statst_modeS_IWRITErGchmod)rbr5rchas_attr_readonlys r<rarasz !#!6!FG  t}%%% T  s '* 88cDtjtj|}|tjtjjzr+d|ttjdz}|S)zTGives the display value for a given path, making it relative to cwd if possible..N)r4r5normcaser9 startswithgetcwdseprCr5s r<r#r#sr 7  BGOOD11 2 2D ry{{RW[011.T#bikk**,,-- Kr>.bakextcd}|}tj||zr9|dz }|t|z}tj||z9||zS)z\Figure out the name of a directory to back up the given dir to (adding .bak, .bak2, etc))r4r5existsstr)rYrrn extensions r<r$r$sh AI '..y ) )! Q#a&&L  '..y ) )! ?r>messageoptionsctjddD] }||vr|cS t ||S)NPIP_EXISTS_ACTION)r4environgetsplitr%)ryrzactions r<ask_path_existsrsW*..!4b99??AA W  MMM  w  r>chtjdrtd|dS)z&Raise an error if no input is allowed. PIP_NO_INPUTz5No input was expected ($PIP_NO_INPUT set); question: N)r4r~r Exceptionrys r<_check_no_inputrs? z~~n%%  MG M M     r>c t|t|}|}||vr7t d|d|n|S)z@Ask the message interactively, with the given possible responsesrtz>Your response ({!r}) was not one of the expected responses: {}z, )rinputstriplowerprintr:r6)ryrzresponses r<r%r%s    >>>>##))++ 7 " " VHdii&8&899     O r>c>t|t|S)zAsk for input interactively.)rrrs r< ask_inputrsG >>r>cHt|tj|S)z!Ask for a password interactively.)rgetpassrs r< ask_passwordrs G ?7 # ##r>valcf|}|dvrdS|dvrdStd|)zConvert a string representation of truth to true (1) or false (0). True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if 'val' is anything else. )yyesttrueon1rt)rwnoffalseoff0rzinvalid truth value )r ValueError)rs r< strtoboolrsJ ))++C 222q 5 5 5q777888r>bytesc|dkrd|dz dz S|dkr%dt|dz S|dkrd|dz Sdt|S) Ni@Bz {:.1f} MBg@@ii'z{} kBz {:.1f} kBz{} bytes)r:int)rs r<r'r's {!!%&.4"7888   ~~c%$,//000 !!%&.111  U,,,r>rowscld|D}dt|ddiDfd|D}|fS)zReturn a list of formatted rows and a list of column sizes. For example:: >>> tabulate([['foobar', 2000], [0xdeadbeef]]) (['foobar 2000', '3735928559'], [10, 4]) cRg|]$}ttt|%S)tuplemaprv).0rows r< ztabulate..s( 1 1 1SE#c3-- 1 1 1r>cRg|]$}ttt|%Sr)maxrrC)rcols r<rztabulate..s( L L LCSS#   L L Lr> fillvaluer}c g|]B}dttj|CS) )r6rrvljustrstrip)rrsizess r<rztabulate..s? K K KsSXXc#)S%00 1 1 8 8 : : K K Kr>)r)rtablers @r<tabulaters[ 2 1D 1 1 1D L L;+K+K+K L L LE K K K Kd K K KE %<r>cDtj|sdStjtj|drdStjtj|drdSdS)atIs path is a directory containing pyproject.toml or setup.py? If pyproject.toml exists, this is a PEP 517 project. Otherwise we look for a legacy setuptools layout by identifying setup.py. We don't check for the setup.cfg because using it without setup.py is only available for PEP 517 projects, which are already covered by the pyproject.toml check. Fzpyproject.tomlTzsetup.py)r4r5isdirisfiler6rps r<r(r(s{ 7==  u w~~bgll4)9::;;t w~~bgll44455t 5r>filesizec#DK ||}|sdS|V)z7Yield pieces of data from a file-like object until EOF.TN)read)rrchunks r< read_chunksrs5 $  E r>resolve_symlinksctj|}|r tj|}ntj|}tj|S)zN Convert a path to its canonical, case-normalized, absolute version. )r4r5 expanduserrealpathr9rl)r5rs r<r)r)sa 7  d # #D%w%%wt$$ 7  D ! !!r>ctj|\}}|dr|dd|z}|dd}||fS)z,Like os.path.splitext, but take off .tar tooz.tarN) posixpathr&rendswith)r5baserrs r<r&r&+s\"4((ID# zz||V$$233i#oCRCy 9r>oldnewctj|\}}|r5|r3tj|stj|t j||tj|\}}|r*|r* tj|dS#t$rYdSwxYwdSdS)z7Like os.renames(), but handles renaming across devices.N) r4r5rrurFr`move removedirsrG)rrheadtails r<r*r*4ss##JD$ RW^^D11 D KSs##JD$   M$         DD sB,, B:9B:cztsdS|ttjS)z Return True if path is within sys.prefix, if we're running in a virtualenv. If we're not in a virtualenv, all paths are considered "local." Caution: this function assumes the head of path has been normalized with normalize_path. T)r!rmr)rOprefixrps r<is_localrEs3 $ % %t ??>#*55 6 66r>msgargsc*tj|g|RdSN)loggerinfo)rrs r< write_outputrSs  Kdr>cVeZdZUeed<ededdfdZedefdZ dS) StreamWrapper orig_streamr2c(|}||_|Sr)r)clsrrets r< from_streamzStreamWrapper.from_streamZscee% r>c|jjSr)rencodingselfs r<rzStreamWrapper.encodingbs((r>N) __name__ __module__ __qualname__r__annotations__ classmethodrpropertyrvrrr>r<rrWsuf[)#)))X)))r>r stream_namec#"Ktt|}tt|t| tt|Vtt||dS#tt||wxYw)zReturn a context manager used by captured_stdout/stdin/stderr that temporarily replaces the sys stream *stream_name* with a StringIO. Taken from Lib/support/__init__.py in the CPython repo. N)getattrrOsetattrrr)r orig_stdouts r<captured_outputrgs#{++K Cm77 DDEEE/c;'''''[+.....[+....s A66Bc tdS)zCapture the output of sys.stdout: with captured_stdout() as stdout: print('hello') self.assertEqual(stdout.getvalue(), 'hello ') Taken from Lib/support/__init__.py in the CPython repo. stdoutrrr>r<r,r,vs 8 $ $$r>c tdS)z See captured_stdout(). stderrrrr>r<captured_stderrrs 8 $ $$r> sequentialnamedc tt|tt|fi|}d|D}||d<t dd|S)Nci|]\}}|| Srr)rkeyvalues r< zenum..s:::jc5uc:::r>reverse_mappingEnumr)dictziprangerCitemstype)rrenumsreverses r<enumr sg Zs:!7!788 B BE B BE::EKKMM:::G&E  E " ""r>hostportc,||Sd|vrd|d}|d|S)z. Build a netloc from a host-port pair N:[]r)r r s r< build_netlocrs8 |  d{{4{{{  T  r>httpsnetlocschemec^|ddkrd|vr d|vrd|d}|d|S)z) Build a full URL from a netloc. r @rrz://)count)rrs r<build_url_from_netlocrsP||CA#V"3"368I8IV ! ! ! !!r>czt|}tj|}|j|jfS)z2 Return the host-port pair from a netloc. )rurllibparseurlparsehostnamer )rurlparseds r< parse_netlocr s5  ' 'C \ " "3 ' 'F ?FK ''r>cd|vr|dfS|dd\}}d}d|vr|dd\}}n|d}}tj|}|tj|}|||ffS)zp Parse out and remove the auth information from a netloc. Returns: (netloc, (username, password)). rNNrtNr )rsplitrrrunquote)rauthpwusers r<split_auth_from_netlocr(s  &|## ==a((LD&B d{{::c1%%bbb <   % %D ~ \ ! !" % % D": r>ct|\}\}}||S|d}d}n!tj|}d}d|||S)z Replace the sensitive data in a netloc with "****", if it exists. For example: - "user:pass@example.com" returns "user:****@example.com" - "accesstoken@example.com" returns "****@example.com" N****r}z:****z{user}{password}@{netloc})r'passwordr)r(rrquoter:)rr'r+s r< redact_netlocr-su 6f==F T8 | |!!$'' & - - HV .  r>rtransform_netlocctj|}||j}|j|d|j|j|jf}tj|}|td|fS)aRTransform and replace netloc in a url. transform_netloc is a function taking the netloc and returning a tuple. The first element of this tuple is the new netloc. The entire tuple is returned. Returns a tuple containing the transformed url as item 0 and the original tuple returned by transform_netloc as item 1. r NetlocTuple) rrurlsplitrrr5queryfragment urlunsplitr)rr.purl netloc_tuple url_piecessurls r<_transform_urlr9sq <  % %D##DK00L+|A 4:t}UJ < " ": . .D m\22 22r>c t|Sr)r(rs r< _get_netlocr<s !& ) ))r>c"t|fSr)r-r;s r<_redact_netlocr>s & ! ! ##r>cBt|t\}\}}|||fS)z Parse a url into separate netloc, auth, and url with no auth. Returns: (url_without_auth, netloc, (username, password)) r9r<)rurl_without_authrr%s r<split_auth_netloc_from_urlrBs*(6c;'G'G$nvt VT ))r>c8t|tdS)z7Return a copy of url with 'username:password@' removed.rr@rs r<r.r. s #{ + +A ..r>c8t|tdS)z.Replace the password in a given url with ****.r)r9r>rDs r<redact_auth_from_urlrFs #~ . .q 11r>cJeZdZdededdfdZdefdZdefdZdedefd Z dS) HiddenTextsecretredactedr2Nc"||_||_dSr)rIrJ)rrIrJs r<__init__zHiddenText.__init__s   r>cFdt|S)Nz)r:rvrs r<__repr__zHiddenText.__repr__s"))#d))444r>c|jSrrJrs r<__str__zHiddenText.__str__s }r>othercft|t|krdS|j|jkS)NF)rrI)rrRs r<__eq__zHiddenText.__eq__#s/ ::e $ $5{el**r>) rrrrvrLrNrQrboolrTrr>r<rHrHs!s!c!d!!!!5#5555+C+D++++++r>rHrc$t|dS)Nr*rP)rH)rs r< hide_valuerW,s ef - - --r>cBt|}t||S)NrP)rFrH)rrJs r<hide_urlrY0s"#C((H cH - - --r> modifying_pipcddtjjdtjjdtjjg}|o7to0t jtjd|v}|rYtj ddgtjddz}td d |dS) zProtection of pip.exe from modification on Windows On Windows, any operation modifying pip should be run as: python -m pip ... rMrkrz-mrtNz3To modify pip, please run the following command: {}r) rOr_majorminorr r4r5rNrPrQrr:r6)rZ pip_namesshould_show_use_python_msg new_commands r<(protect_pip_from_modification_on_windowsra5s &c$&&?c$??s'7'=??I P'Pbg&6&6sx{&C&Cy&P" ~tU3chqrrlB  B I I%%       r>ctrdStjt jdd}tj|sdStj|)zCheck whether the current environment is externally managed. If the ``EXTERNALLY-MANAGED`` config file is found, the current environment is considered externally managed, and an ExternallyManagedEnvironment is raised. NstdlibzEXTERNALLY-MANAGED) r!r4r5r6 sysconfigget_pathrr from_config)markers r<r/r/Osd !! W\\),X668L M MF 7>>& ! ! & 26 : ::r>cZtjduotjS)zIs this console interactive?N)rOstdinisattyrr>r<is_console_interactiverk^s" 9D 7SY%5%5%7%77r> blocksizectj}d}t|d5}t||D])}|t |z }||* dddn #1swxYwY||fS)z5Return (hash, length) for path using hashlib.sha256()rrb)rN)hashlibsha256openrrCupdate)r5rmhlengthrblocks r< hash_filerwcs A F dD  Q 333  E c%jj F HHUOOOO  f9s (s0, s1), (s2, s3), (s4, s5), ... )iterr)rxs r<pairwiser{osH~~H x * **r>predcft|\}}t||t||fS)z Use a predicate to partition entries into false entries and true entries, like partition(is_odd, range(10)) --> 0 2 4 6 8 and 1 3 5 7 9 )rrfilter)r|rxt1t2s r< partitionrzs2]]FB tR &r"2"2 22r>cXeZdZ ddedededeedeeddeef fd Z dd ed eeee ee effd eed effd Z dded eeee ee effd effd Z dd ed eeee ee effd eed effd Z dd eeee ee effd e effd Z dd eeee ee effd e effd Z dd eeee ee effd e effd Z dd ed eeee ee effded effd Z dd ed eeee ee effded effd ZxZS)r0N config_holder source_dir build_backend backend_pathrunner).Npython_executablec`t|||||||_dSr)superrLr)rrrrrrr __class__s r<rLz)ConfiguredBuildBackendHookCaller.__init__s=   |V=N   +r>wheel_directoryconfig_settingsmetadata_directoryr2cd|jj}t|||SN)rr)rrr build_wheelrrrrcsrs r<rz,ConfiguredBuildBackendHookCaller.build_wheels9   /ww"" RDV#   r>sdist_directorycb|jj}t||SN)r)rrr build_sdist)rrrrrs r<rz,ConfiguredBuildBackendHookCaller.build_sdists-   /ww""?B"GGGr>cd|jj}t|||Sr)rrrbuild_editablers r<rz/ConfiguredBuildBackendHookCaller.build_editables9   /ww%% RDV&   r>c`|jj}t|Sr)rrrget_requires_for_build_wheelrrrrs r<rz=ConfiguredBuildBackendHookCaller.get_requires_for_build_wheel+  /ww33B3GGGr>c`|jj}t|Sr)rrrget_requires_for_build_sdistrs r<rz=ConfiguredBuildBackendHookCaller.get_requires_for_build_sdistrr>c`|jj}t|Sr)rrrget_requires_for_build_editablers r<rz@ConfiguredBuildBackendHookCaller.get_requires_for_build_editables+  /ww66r6JJJr>T_allow_fallbackcd|jj}t|||SN)rrr)rrr prepare_metadata_for_build_wheelrrrrrrs r<rzAConfiguredBuildBackendHookCaller.prepare_metadata_for_build_wheels:   /ww771+8   r>cd|jj}t|||Sr)rrr#prepare_metadata_for_build_editablers r<rzDConfiguredBuildBackendHookCaller.prepare_metadata_for_build_editables:   /ww::1+;   r>)NNNr"r)NT)rrrrrvrr rLr rrrrrrrrrUrr __classcell__)rs@r<r0r0s '+04+/ + + + + + sm + ),- +$C= + + + + + +"GK,0     "$sE#tCy.,A'A"BC  %SM        GKHHH"$sE#tCy.,A'A"BCH HHHHHHGK,0     "$sE#tCy.,A'A"BC  %SM        MQHH'S%T#Y2G-G(HIH cHHHHHHMQHH'S%T#Y2G-G(HIH cHHHHHHMQKK'S%T#Y2G-G(HIK cKKKKKKGK $     "$sE#tCy.,A'A"BC          GK $     "$sE#tCy.,A'A"BC              r>r0)F)rq)T)r)r2N)rl)x contextlibrHrrpiologgingr4rr`rerOrd urllib.parserr itertoolsrrrtypesrtypingrr r r r r rrrrrrrrrrpip._vendor.pyproject_hooksrpip._vendor.tenacityrrrrMrpip._internal.exceptionsrrpip._internal.locationsrpip._internal.utils.compatr pip._internal.utils.virtualenvr!__all__ getLoggerrrr1 BaseExceptionExcInforrBrvr0r=rDr-r+rUr"rar#r$rrr%rrrfloatr'rr(DEFAULT_BUFFER_SIZErrr)r&r*rrrcontextmanagerrr,rr rrr r(r-r9r<r>rBr.rFrHrWrYrar/rkrwr{rr0rr>r<rs     3333333333&?>>>>>DDDDDDDDDDOOOOOOOO;;;;;;......CCCCCC   $  8 $ $ GCLL ]#]MA BCcM" Cx}hsm;<<= 0E#s(O0c3PSm@T0000&ST #    t**1--JJsOODDDUUUDUTUUUEDU 38 $'38-9O3P ,ssCcs!S!8C=!S!!!! S T      x}     ss $#$#$$$$ 93 93 9 9 9 9 -u----- 8HSM* uT#YS 5I/J    ST$!# 6 udD ! " " " " " " " "35c?34" 73 74 7 7 7 7c#$ ) ) ) ) )H ) ) )   / /=$3L)M / / / / % 6 % % % %% 6%%%%#c#C#DI#### s (3- C    ""#"s"""""((x}hsm'C!D((((3;:##,3 3 (#c3h)? @3 3 3333(** ****$3$5:$$$$ *  * 3U8C=(3-78 89 * * * */c/c////2c2c2222 ++++++++*.c.j.....#.*....  D T    4 ; ; ; ;88888  C C eCHo    +x}+%S/)B++++ 3 A39  3qk 3 8A; #$ 3 3 3 3W W W W W '=W W W W W r>