ó vÆ_c@s‡dZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z m Z ddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZdd lmZddlmZddlm Z m!Z!ddl"m#Z#ddl$m%Z%ddl&m'Z'm(Z(e#rddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ddl0m1Z1ndddgZ2ej3e4ƒZ5e j6j7ƒZ8d„Z9d„Z:d„Z;d„Z<d„Z=de>fd„ƒYZ?d„Z@ddeBdeBeBd „ZCd!„ZDd"„ZEd#„ZFddeBdeBdeBd$„ZGdeBdeBd%„ZHeBdeBd&„ZIdS('s~Backing implementation for InstallRequirement's various constructors The idea here is that these formed a major chunk of InstallRequirement's size so, moving them and support code dedicated to them outside of that class helps creates for better understandability for the rest of the code. These are meant to be used elsewhere within pip to create instances of InstallRequirement. iÿÿÿÿN(tMarker(tInvalidRequirementt Requirement(t Specifier(tRequirementParseErrortparse_requirements(tInstallationError(tPyPItTestPyPI(tLink(tWheel(tmake_pyproject_path(tInstallRequirement(t deprecated(tARCHIVE_EXTENSIONS(tis_installable_dirtsplitext(tMYPY_CHECK_RUNNING(t path_to_url(tis_urltvcs(tAnytDicttOptionaltSettTupletUnion(tParsedRequirementtinstall_req_from_editabletinstall_req_from_linetparse_editablecCs*t|ƒdjƒ}|tkr&tStS(s9Return True if `name` is a considered as an archive file.i(RtlowerRtTruetFalse(tnametext((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytis_archive_file1s cCsOtjd|ƒ}d}|r?|jdƒ}|jdƒ}n|}||fS(Ns^(.+)(\[[^\]]+\])$ii(tretmatchtNonetgroup(tpathtmtextrastpath_no_extras((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt _strip_extras:scCs$|s tƒStd|jƒƒjS(Nt placeholder(tsetRRR+(R+((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytconvert_extrasGsc Cs*|}t|ƒ\}}tjj|ƒr¯tjjtjj|dƒƒs djtjj|ƒƒ}t|ƒ}tjj |ƒr‘|d7}nt |ƒ‚nt |ƒ}n|j ƒj dƒr t|ƒj}|rù||td|j ƒƒjfS||tƒfSnxBtD]:}|j ƒj dj|ƒƒrdj||ƒ}PqqWd|krut d j|ƒƒ‚n|jdd ƒd j ƒ}tj|ƒsíd jgtjD]} | jd ^q°ƒ} dj|| ƒ} t | ƒ‚nt|ƒj}|st dj|ƒƒ‚n||tƒfS(sParses an editable requirement into: - a requirement name - an URL - extras - editable options Accepted requirements: svn+http://blahblah@rev#egg=Foobar[baz]&subdirectory=version_subdir .[some_extra] ssetup.pysMFile "setup.py" not found. Directory cannot be installed in editable mode: {}sb (A "pyproject.toml" file was found, but editable mode currently requires a setup.py based build.)sfile:R.s{}:s{}+{}t+s{} is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with svn+, git+, hg+, or bzr+).iis, s+URLs2For --editable={}, only {} are currently supportedsZCould not detect requirement name for '{}', please specify one with #egg=your_package_name(R-tosR)tisdirtexiststjointformattabspathR tisfileRRRt startswithR t egg_fragmentRR+R/Rtsplitt get_backendtbackendsR"( t editable_reqturlt url_no_extrasR+tmsgtpyproject_patht package_nametversion_controltvc_typetbendsR=t error_message((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyRNsN !    , cCs§d}tjj|ƒrd}yEt|dƒ0}tt|jƒƒƒ|dj|ƒ7}WdQXWq£tk rŒt j d|dt ƒq£Xn|dj|ƒ7}|S( s„Returns helpful msg in case requirements file does not exist, or cannot be parsed. :params req: Requirements file path ts It does exist.trs•The argument you provided ({}) appears to be a requirements file. If that is the case, use the '-r' flag to install the packages specified within it.Ns&Cannot parse '%s' as requirements filetexc_infos File '{}' does not exist.( R2R)R4topentnextRtreadR6RtloggertdebugR (treqRAtfp((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytdeduce_helpful_msg™s tRequirementPartscBseZd„ZRS(cCs(||_||_||_||_dS(N(t requirementtlinktmarkersR+(tselfRTRURVR+((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt__init__¹s   (t__name__t __module__RX(((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyRS¸scCs‚t|ƒ\}}}|dk r]yt|ƒ}Wqctk rYtdj|ƒƒ‚qcXnd}t|ƒ}t||d|ƒS(NsInvalid requirement: '{}'(RR'RRRR6R RS(R>R"R?textras_overrideRPRU((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytparse_req_from_editableÆs   cCs©t|ƒ}t|jd|d|dtd|jd|d|d|d|r]|jdgƒngd |r{|jd gƒngd |r™|jd iƒnid |jƒ S( Nt comes_fromt user_suppliedteditableRUt constraintt use_pep517tisolatedtinstall_optionstglobal_optionst hash_optionsthashesR+(R\R RTR RUtgetR+(R>R]RaRbtoptionsR`R^tparts((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyRÚs   cCsUtjj|krtStjjdk r>tjj|kr>tS|jdƒrQtStS(skChecks whether the string "looks like" a path on the filesystem. This does not check whether the target actually exists, only judge from the appearance. Returns true if any of the following conditions is true: * a path separator is found (either os.path.sep or os.path.altsep); * a dot is found (which represents the current directory). t.N(R2R)tsepR taltsepR'R9R!(R"((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt_looks_like_path÷s $cCsÎt|ƒrOtjj|ƒrOt|ƒr4t|ƒStdjtƒƒ‚nt |ƒs_dStjj |ƒr{t|ƒS|j ddƒ}t |ƒdkr´t|dƒ r´dStjd|ƒt|ƒS(sd First, it checks whether a provided path is an installable directory (e.g. it has a setup.py). If it is, returns the path. If false, check if the path is an archive file (such as a .whl). The function checks if the path is a file. If false, if the path has an @, it will treat it as a PEP 440 URL requirement and return the path. sUDirectory {name!r} is not installable. Neither 'setup.py' nor 'pyproject.toml' found.t@iiisARequirement %r looks like a filename, but the file does not existN(RmR2R)R3RRRR6tlocalsR$R'R8R;tlenRNtwarning(R)R"t urlreq_parts((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt_get_url_from_path s"     #csÿt|ƒrd}nd}||kri|j|dƒ\}}|jƒ}|sZd}qot|ƒ}nd}|jƒ}d‰tjjtjj|ƒƒ}d}d}t|ƒrÆt |ƒ}n<t |ƒ\}}t ||ƒ} | dk rt | ƒ}n|r•|j dkr\t jd|jƒr\t ttjjtjj|jƒƒƒƒ}n|jr‰t|jƒ} djtƒ‰q›|j‰n|‰t|ƒ} ‡fd†} ˆdk ræytˆƒ} Wn±tk r…tjjˆkr d}|tˆƒ7}n8d ˆkr?t‡fd †tDƒƒ r?d }nd }| d jˆƒƒ}|rv|dj|ƒ7}nt|ƒ‚qìXxc| jD]O}t |ƒ}|j!dƒrdj|ƒ}d}t"|d|ddƒqqWnd} t#| ||| ƒS(Ns; t;itfiles\.\./s{wheel.name}=={wheel.version}csˆs |Sdj|ˆƒS(Ns {} (from {})(R6(ttext(t line_source(sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt with_source_ssIt looks like a path.t=c3s|]}|ˆkVqdS(N((t.0top(t req_as_string(sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pys mss,= is not a valid operator. Did you mean == ?RHsInvalid requirement: {!r}s Hint: {}t]sExtras after version '{}'.s+moving the extras before version specifierst replacementtgone_ins21.0($RR;tstripR'RR2R)tnormpathR7R R-RstschemeR%tsearchR?Rtis_wheelR tfilenameR6RoR:R0RRRkRRtanyt operatorsRt specifiertstrtendswithR RS(R"Rwt marker_septmarkers_as_stringRVR)RUtextras_as_stringtpR?twheelR+RxRPtadd_msgRAtspectspec_strtreplace((RwR|sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytparse_req_from_line-sp        $-         c Cs¬t||ƒ}t|j|d|jd|jd|d|d|rT|jdgƒngd|rr|jdgƒngd|r|jdiƒnid |d |jd |ƒ S( sCreates an InstallRequirement from a name, which might be a requirement, directory containing 'setup.py', filename, or URL. :param line_source: An optional string describing where the line is from, for logging purposes in case of an error. RURVRaRbRcRdReRfR`R+R^(R”R RTRURVRgR+( R"R]RaRbRhR`RwR^Ri((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyRˆs  c Cs²yt|ƒ}Wn&tk r8tdj|ƒƒ‚nXtjtjg}|jr“|r“|jr“|jj |kr“tdj|j |ƒƒ‚nt ||d|d|d|ƒS(NsInvalid requirement: '{}'skPackages installed from PyPI cannot depend on packages which are not also hosted on PyPI. {} depends on {} RbRaR^( RRRR6Rtfile_storage_domainRR?RUtnetlocR"R (t req_stringR]RbRaR^RPtdomains_not_allowed((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pytinstall_req_from_req_string§s"  cCsˆ|jr?t|jd|jd|d|jd|d|ƒ}nEt|jd|jd|d|d|jd|jd|jd|ƒ}|S(NR]RaR`RbR^RhRw(t is_editableRRTR]R`RRhRw(t parsed_reqRbRaR^RP((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt#install_req_from_parsed_requirementÊs$           (Jt__doc__tloggingR2R%tpip._vendor.packaging.markersRt"pip._vendor.packaging.requirementsRRt pip._vendor.packaging.specifiersRtpip._vendor.pkg_resourcesRRtpip._internal.exceptionsRtpip._internal.models.indexRRtpip._internal.models.linkR tpip._internal.models.wheelR tpip._internal.pyprojectR tpip._internal.req.req_installR tpip._internal.utils.deprecationR tpip._internal.utils.filetypesRtpip._internal.utils.miscRRtpip._internal.utils.typingRtpip._internal.utils.urlsRtpip._internal.vcsRRttypingRRRRRRtpip._internal.req.req_fileRt__all__t getLoggerRYRNt _operatorstkeysR‡R$R-R0RRRtobjectRSR\R'R!RRmRsR”RR™Rœ(((sO/opt/alt/python38/lib/python3.8/site-packages/pip/_internal/req/constructors.pyt sp   .   K     " ]